一些日常问题的简单总结

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • maven
    • 生命周期
    • 二方包
    • maven的配置
  • Java内存管理
    • jvm内存调优
    • GC流程
      • G1垃圾回收器
  • CPU负载及使用率
  • docker
    • 二进制安装及配置
    • nexus
    • nginx做反向代理
  • k8s
    • pod生命周期
    • 探针
    • linux中fork和exec的区别
    • python的安装步骤
    • 使用dockerfile构建镜像,并作为yaml文件中的镜像源
    • 资源限制及优先级
    • iptables四表五链
  • jenkins
    • 安装
    • pipeline
    • 结合gitlab
    • 自动构建大致流程



提示:以下是本篇文章正文内容,下面案例可供参考

一些日常问题的简单总结_第1张图片

maven

生命周期

Maven生命周期就是为了对所有构建过程进行抽象和统一;包括项目清理、初始化、编译、打包、测试、部署等几乎所有构建步骤;生命周期可以理解为构建工程的步骤。

Maven中有三套相互独立的生命周期:

Clean Lifecycle:构建前的清理工作 Mvn clean

Default(build) Lifecycle:构建的核心部分:编译、测试、打包、部署等 Mvn compile test package install deploy

Site Lifecycle:生成项目报告、站点、发布站点
典型的Maven生命周期:

validate验证 compile编译 test测试 package打包 verify检查 install安装 deploy部署

**正是生命周期阶段和插件的互相绑定,才能真正完成项目的构建**

二方包

简单理解就是公司内部其他项目发布的jar包,我们可以去调用

maven的配置

基本上就是对配置文件中的本地仓库、镜像源、jdk版本进行修改,再去idea中将默认的Maven改为我们自己配置的Maven

Java内存管理

JVM内存分为堆、栈、方法区;分别用于存储不同的数据

JVM堆内存将内存分为新生代、老年代、元空间(存储一些方法中的临时对象)
建立一个对象时从两个地方都分配了内存,在堆中分配的内存实际上建立了这个对象,而在栈中分配的内存只是一个指向这个堆对象的指针(引用)而已。

jvm内存调优

主要是为了减少GC频率和FULL GC次数

GC流程

基本所有数据都会保存在JVM堆内存中,最需要处理的是年轻代和老年代的GC,元空间都不在GC范围内
新对象产生,JVM要为该对象进行内存空间申请,先判断eden区有没有空间,没有进行新生代GC,再判断,还是不够则判断存活区,以此类推,最坏的情况就是full GC之后还是没有空间,则会产生内存溢出

G1垃圾回收器

一种暂停时间在可接受范围内的高吞吐量GC(-XX:+UseG1GC开启)

CPU负载及使用率

造成cpu load过高的原因有:full gc次数增大或者死循环(首先要找到那几个线程在占用cpu,再通过线程的id值在堆栈文件中查找具体的线程,来判断问题)

docker

二进制安装及配置

wget 解压
docker.service docker.socket containerd.service
修改docker默认的网段和地址要在/etc/docker/daemon.json中修改:镜像加速、允许不安全的镜像仓库、修改地址、网段等配置;并使用systemctl管理

nexus

拉取镜像 运行(前面配置没有问题就可以成功login) ps:放在/opt/下

nginx做反向代理

安装nginx,用nginx做转发,添加域名;在push的时候会出现问题,要修改默认上传文件大小(默认很小)

k8s

安装k8s:安装kubeadm,kubelet,kubectl;使用阿里云的yum镜像仓库,在daemon.json中设置exec-opts:[“native.cgroupdriver=systemd”],否则docker和k8s的cgroupdriver可能冲突;kubeadm init,并添加flannel.yaml并应用
去除污点:kubectl taint nodes --all node-role.kubernetes.io/master-
在创建ingress-controller的时候,主要端口冲突的问题

pod生命周期

init容器:在应用容器启动前运行完成,可以用来延迟应用容器的启动;可以包含一些安装过程中不存在的实用工具或个性代码

探针

livenessProbe存活探针:指示容器是否正在运行 readinessProbe就绪探针 startupProbe启动探针:为了防止存活探针误杀正在启动的容器,一般可以给容器配置一个启动探针

linux中fork和exec的区别

fork生成的子进程是一个与正在运行的进程完全相同的副本;总结就是fork是进程的分身(执行相同的程序而分为两个进程)而exec是进程的变身(进程执行而程序发生了变化)

python的安装步骤

安装依赖 在opt下wget软件包,并解压 编译 、make 、make install 绝对路径执行python和pip 添加软连接,便于直接使用

使用dockerfile构建镜像,并作为yaml文件中的镜像源

我们可以在构建镜像的时候自定义内容,例如nginx可以增添新的路径及页面等

资源限制及优先级

可以对CPU、内存进行资源限制;也可以对某一命名空间下的内存和cpu统一进行限制
优先级有两种方式:一种是Qos发方式,另一种是pod优先级,在pod.spec.PriorityClassName后边添加pod名称即可

iptables四表五链

iptables是linux系统下应用层内置控制防火墙的工具
FORWARD链是转发链,只有在网卡数大于等于2的时候才具有
Filter表:过滤数据包 NAT表:用于网络地址转换 Mangle表:修改数据包的服务类型、TTL、并且可以配置路由实现QOS Raw表:决定数据包是否被状态跟踪机制处理

jenkins

安装

在安装的时候,如果出现该jenkins实例似乎已离线的问题,我们首先需要检查本机是否能够ping通外网,如果没有问题,再去进入容器内部检查容器内是否可以ping通外网,还有注意DNS解析的问题;如果容器内不能连通外网,就要检查flannel插件的问题或者在node不多等情况下,通过设置iptables策略来使得pod出网,这个问题就可以解决

pipeline

下面是一个用钉钉机器人给钉钉群推送消息的功能,也可以设置定时推送
pipeline {
agent any
stages {
stage(‘test’){
steps{
sh ‘’‘curl -XPOST ‘https://oapi.dingtalk.com/robot/send?access_token=404e1fdc5aafa19563960ebb2035c960cc42ebd65d15c9705152a6dd2fa92949’ -H ‘Content-Type: application/json’ -d ‘{“msgtype”: “text”,“text”: {“content”:"’“time$(date +%Y-%m-%d_%H-%M-%S)”’"}}’
‘’’
}
}
}

}

结合gitlab

拉取gitlab代码,自动触发构建等等

自动构建大致流程

拉取代码,构建、测试、部署、存储等这些流程

你可能感兴趣的:(Linux企业运维,docker,kubernetes,jenkins)