第4章 Pod对象:应用目修复、初始奢器、静态Pod等
基本概念
- 最小部署单元
- 一组容器的集合
- 一个Pod中的容器共享网络命名空间
- Pod是短暂的
存在的意义
Pod为亲密性应用而存在。
亲密性应用场景
- 两个应用之间发生文件交互
- 两个应用需要通过127.0.0.1或者 socket通信(典型组合:nginx+php)
- 两个应用需要发生频繁的调用
容器分类
- Infrastructure Container:基础容器,维护整个Pod网络空间
- InitContainers:初始化容器,先于业务容器开始执行
- Containers:业务容器,并行启动
pod ip 绑定 instruction 容器
容器的1号进程
应用自恢复(重启策略+健康检查)
重启策略
● Always:当容器终止退出后,总是重启容器,默认策略
Always:例如nginx、mysql,长期运行应用
● OnFailure:当容器异常退出(退出状态码非0)时,才重启容器
OnFailure:定时任务
● Never:当容器终止退出,从不重启容器。
Nerver:适用临时任务
健康检查有以下两种类型
● liveness Probe(存活检查)
如果检查失败,将杀死容器,根据Pod的 】restartPolicy来操作。
initialDelaySeconds: 5 #第一次启动pod多少秒后执行健康检查
periodSeconds: 5 #健康检查周期
● readiness probe(就绪检查)
如果检查失败, Kubernetes会把Pod从 service endpoint中剔除
支持以下三种检查方法:
●httpget:发送HTTP请求,返回200-400范围状态码为成功。
●exec:执行Shel命令返回状态码是0为成功
● tcp Socket:发起 TCP Socke建立成功。
apiVersion: apps/v1 kind: Deployment metadata: labels: app: web-3 name: web-3 spec: replicas: 1 selector: matchLabels: app: web-3 template: metadata: labels: app: web-3 spec: restartPolicy: Always containers: - image: lizhenliang/java-demo name: java-demo livenessProbe: tcpSocket: port: 8080 initialDelaySeconds: 30 periodSeconds: 2
apiVersion: apps/v1 kind: Deployment metadata: labels: app: web-3 name: web-3 spec: replicas: 1 selector: matchLabels: app: web-3 template: metadata: labels: app: web-3 spec: restartPolicy: Always containers: - image: lizhenliang/java-demo name: java-demo livenessProbe: exec: command: ['cat','/tmp/healthy']
Init container
Init container.
- 基本支持所有普通容器特征
- 优先普通容器执行
应用场景:
1.控制普通容器启动,初始容器完成后才会启动业务容器
2.初始化配置,例如下载应用配置文件、注册信息等
apiVersion: v1 kind: Pod metadata: name: init-demo spec: containers: - name: nginx image: nginx ports: - containerPort: 80 volumeMounts: - name: workdir mountPath: /usr/share/nginx/html initContainers: - name: install image: busybox command: ['wget','-O','/work-dir/index.html','http://kubernetes.io'] volumeMounts: - name: workdir mountPath: "/work-dir" dnsPolicy: Default volumes: - name: workdir emptyDir: {}
[root@k8s-m1 chp4]# kubectl get pod NAME READY STATUS RESTARTS AGE init-demo 0/1 Init:0/1 0 7s nginx-f89759699-qjjjb 1/1 Running 2 7d21h web-6b9c78c94f-m6q8j 1/1 Running 0 35h web-6b9c78c94f-tqxvj 1/1 Running 0 35h web-6b9c78c94f-zs9pk 1/1 Running 0 35h web2-57b578c78c-kkh8p 1/1 Running 0 35h [root@k8s-m1 chp4]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES init-demo 1/1 Running 0 5m30s 10.244.111.215 k8s-n2 <none> <none> nginx-f89759699-qjjjb 1/1 Running 2 7d21h 10.244.215.77 k8s-n1 <none> <none> web-6b9c78c94f-m6q8j 1/1 Running 0 36h 10.244.111.214 k8s-n2 <none> <none> web-6b9c78c94f-tqxvj 1/1 Running 0 35h 10.244.215.81 k8s-n1 <none> <none> web-6b9c78c94f-zs9pk 1/1 Running 0 35h 10.244.215.82 k8s-n1 <none> <none> web2-57b578c78c-kkh8p 1/1 Running 0 35h 10.244.215.83 k8s-n1 <none> <none> [root@k8s-m1 chp4]# curl 10.244.111.215:80
静态Pod
静态Pod:固定在某个Node上面,由 kubelet管理生成的一种Pod,无法使用控制器。
在 kubelet配置文件启用静态Pod
vi /var/lib/kubelet/config yaml staticPodPath:/etc/kubernetes/manifests
将部署的 pod yam放到该目录会由 kubele自动创建。
初始化容器怎么让配置文件放到业务容器?
答:数据卷共享
静态pod特点:
1、yaml只能是pod
2、pod是由kubelet拉起的,只管理当前节点上的yaml
3、kubelet会定期扫描静态pod目录,根据目录下yaml启动或者删除