一、概述
1. 简述pod
pod是k8s应用最小纸箱单元,pod表示在集群上运行的进程,docker是k8s pod中最常用的容器,但pods也支持其他容器运行。单个pod下可以有一个运行的容器也可以同时有多个运行的容器。
2. pods管理多个容器
当一个pods中有运行多个容器时,多个容器彼此之间可以共享资源和彼此通信。其中有以下两种共享资源:
- 网络
- 存储
3. pod模板
[root@redis-cluser-01 tmp]# cat nginx.yml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']
二、Pod生命周期
1. pod的6种模式
- Pending
该Pod已被k8s接受,但是尚未创建一个或多个Container映像
-
Running
Pod已绑定到节点,并且所有容器都已创建。至少一个容器仍在运行
-
Succeesed
Pod中的所有容器已成功终止,并且不会重新启动
-
Failed
Pod中的所有容器均已终止,并且至少一个容器因故障而终止
-
Unkonwn
由于某种原因,通常由于与Pod主机通信时出错而无法获得Pod状态
2. 容器探针
探针可以周期性的执行诊断容器状态,有以下三种类型的处理程序方式:
- ExecAction
在Container中执行指定的命令,如果命令以状态码0退出则认为诊断成功
-
TCPSocketAction
对指定端口上的容器IP地址执行TCP检查,如果端口成功则任务诊断成功
-
HTTPGetAction
对指定端口和路径上的容器的IP执行HTTP Get请求。如果响应的状态码大于或等于200,小于400则任务诊断成功
每个探针具有以下三个结果
- 成功 容器通过了诊断
- 失败 容器无法通过诊断
- 位置 诊断失败
kubelet可以选择对正在运行的Container进行三种探测并对其做出反应
- livenessProbe 指示容器是否正在运行。如果获得探针失败,则kubelet将杀死Container,并且Container将接受其重新启动策略。
- readinessProbe 指示容器是否准备好服务请求。如果就绪探针失败,则端点控制器从与Pod匹配的所有服务的端点中删除Pod的IP地址。如果容器未提供就绪探测器,则默认状态为Success。
- startupProbe 指示容器是否准备好服务器请求
3. 示例
[root@redis-cluser-01 tmp]# cat liveness.yml
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-http
spec:
containers:
- args:
- /server
image: xiangys0134/liveness:v1.0.2
livenessProbe:
httpGet:
# when "host" is not defined, "PodIP" will be used
# host: my-host
# when "scheme" is not defined, "HTTP" scheme will be used. Only "HTTP" and "HTTPS" are allowed
# scheme: HTTPS
path: /healthz
port: 8080
httpHeaders:
- name: X-Custom-Header
value: Awesome
initialDelaySeconds: 15
timeoutSeconds: 1
name: liveness
留言