您的位置:首页 > 其它

kubernetes_02_资源清单_02_Pod生命周期_20190918

2020-03-29 13:04 537 查看

容器环境初始化 pause c-(网络和数据卷初始化)-->init c 1---->init c 2--->man c、 start、 stop、 readness(就绪检测)、 liveness(生存检测)

 

1. init C 

示例: Example002:

/root/yaml/001_pod_rs_deployment_svc/002_00_init_pod.yaml

[code]apiVersion:  v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox
command: ['sh','-c','echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox
command: ['sh','-c','until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
- name: init-mydb
image: busybox
command: ['sh','-c','until nslookup mydb; do echo waiting for mydb; sleep 2; done;']

/root/yaml/001_pod_rs_deployment_svc/002_01_myservice.yaml

[code]kind: Service
apiVersion: v1
metadata:
name: myservice
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9376

/root/yaml/001_pod_rs_deployment_svc/002_02_mydb.yaml

[code]kind: Service
apiVersion: v1
metadata:
name: mydb
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9377

1)在(pause c)之后,Init容器会按照顺序启动(即init c 1容器启动成功并退出,init c 2才会启动)

2)如果init c启动失败,kubernetes会不断地重启该Pod,直到成功。如果Pod的restartPolicy为Never,则不会重启

3)init 使用的整个资源,不受名称空间资源范围限制

3)Init容器的端口不会在Service中进行聚集。正在初始化中的Pod处于Pending状态,但应该会将Initializing状态设置为true

4)如果Pod重启,所有Init容器会重新执行。(所以,pod定义要Init每次运行的结果必须是一样的)

5)kubectl edit pod 对InitContainers的修改仅限于image字段,修改其他字段都不会生效。更改后,会重启所在Pod

 

2.容器探针

探针是在容器内部定义的诊断程序。由kubelet完成对容器的定期诊断。

诊断程序有三种类型:

ExecAction: 容器内执行指定的命令。返回码为0 , 成功

TCPSocketAction:对容器的TCP端口进行检查。端口打开,成功

HTTPGetAction:对容器进行HTTP Get请求。响应码大于等于200 且小于400,成功

探测结果:成功,失败,未知(诊断失败,不采取任何行动。可认为是挂死)

探针分类:

readinessProbe: 就绪探针,指示容器是否就绪。失败,端点控制器将从与Pod匹配的所有Service的端点中删除该Pod的IP地址。初始延迟之前的就绪状态默认为Failure。如果容器不提供就绪探针,则默认状态为Success

livenessProbe:存活探针,指示容器是否存活。失败,则kubelet会杀死容器,并且容器将受到其restartPolicy 的影响。如果容器不提供存活探针,则默认状态为 Success

示例: Example003: readinessProbe

/root/yaml/001_pod_rs_deployment_svc/003_readinessProbe-httpget.yaml

[code]apiVersion: v1
kind: Pod
metadata:
name: readiness-httpget-pod
namespace: default
spec:
containers:
- name: readiness-httpget-container
image: nginx:latest
imagePullPolicy: IfNotPresent
readinessProbe:
httpGet:
port: 80
path: /index1.html
initialDelaySeconds: 1
periodSeconds: 3

# kubectl exec -it pod_name -c container_name -- /bin/bash

添加index1.html,容器就会Ready

示例: Example004: livenessProbe

每60s会重启一次pod

/root/yaml/001_pod_rs_deployment_svc/004_livenessProbe-exec.yaml

[code]apiVersion: v1
kind: Pod
metadata:
name: liveness-exec-pod
namespace: default
spec:
containers:
- name: liveness-exec-container
image: busybox
imagePullPolicy: IfNotPresent
command: ["/bin/sh", "-c", "touch /tmp/live; sleep 60; rm -rf /tmp/live; sleep 3600"]
livenessProbe:
exec:
command: ["test","-e","/tmp/live"]
initialDelaySeconds: 1
periodSeconds: 3

3.启动动作(start)、退出动作(stop):lifecycle

示例: Example005:

/root/yaml/001_pod_rs_deployment_svc/005_lifecycle-demo.yaml

[code]apiVersion: v1
kind: Pod
metadata:
name: lifecycle-demo
spec:
containers:
- name: lifecycle-demo-container
image: nginx
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
preStop:
exec:
command: ["/bin/sh", "-c", "echo Hello from the postStop handler > /usr/share/message"]

 

4.Pod的状态值

  1. 挂起(Pending):Pod已经被 Kubernetes接受,但有一个或者多个容器镜像尚未被创建。等待时间包括调度pod的时间和通过下载镜像过的时间
  2. 运行中(Runing):该Pod已经绑定到一个节点上,Pod中所有的容器都已经被创建。至少有一个容器正在运行,或者处于启动或者重启状态
  3. 成功(Success):Pod中的所有容器都被成功终止,且不会再重启
  4. 失败(Failed):Pod中的所有容器都已经终止了,并且至少有一个容器是因为失败终止。也就是说,容器以非0状态退出或者被系统终止
  5. 未知(Unknow):因为某些原因无法取得Pod的状态,通常是因为与Pod所在主机通信失败

 

 

 

  • 点赞
  • 收藏
  • 分享
  • 文章举报
一默1991 发布了47 篇原创文章 · 获赞 5 · 访问量 3万+ 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: