Linux容器篇-pod的生命周期管理
pod是一个逻辑抽象概念,是k8s创建和管理的额最小单元,一个pod由一个容器或者多个容器组成。运行单个容器:最常见的用法,在这种情况下,可以将pod看作是单个容器的抽象封装。
·
pod的基本概念
pod是一个逻辑抽象概念,是k8s创建和管理的额最小单元,一个pod由一个容器或者多个容器组成
pod特点:
- 一个pod可以理解为一个应用实例,提供服务
- pod中容器始终部署在一个node上
- pod中容器共享网络,存储资源
pod存在的意义
主要用法:
-
运行单个容器:最常见的用法,在这种情况下,可以将pod看作是单个容器的抽象封装
-
运行多个容器:(sidecar),通过在pod中定义专用容器,来执行主业务容器需要的辅助工作,这样的好处是将辅助功能同主业务容器解耦,实现独立发布和能力重用
应用场景:日志收集,应用监控
容器之间资源共享的实现
共享网络:
将业务容器网络加入到“负责网络的容器”实现网络共享 infra container(pause)
共享存储:
容器通过数据卷共享网络
pod中常用的管理命令
创建pod
kubectl apply -f pod.yaml
查看pod
kubectl get pods
kubectl describe pod <pod名称>
查看容器日志
kubectl logs <pod名称> [-c CONTAINER] -f
#-f 动态显示日志
#-c 多个容器时显示指定容器的日志
进入容器终端
kubectl exec -it <pod名称> [-c CONTAINER] -- bash
#-c 进入到指定的容器中
删除pod
kubectl delete pod <pod名称>
容器的健康检查
Pod处于running状态并不能说明应用工作正常,因此,可以为容器定义健康检查(探针),周期性检查应用是否“真正”提供服务,在发生故障时采取合适的措施。
健康检查有以下三种类型:
- livenessProbe(存活检查):如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。
- readinessProbe(就绪检查):如果检查失败,kubernetes会把Pod从service endpoints中剔除。
- startupProbe(启动检查):检查成功才由存活检查接手,用于保护慢启动容器
支持以下三种检查方法:
- httpGet发送HTTP请求,返回200-400范围状态码为成功。
- exec 执行shell命令返回状态码是0为成功。
- tcpSocket:发起TCP Socket建立成功。
示例:
apiVersion: v1
kund: Pod
metadata:
name: probe-demo
spec:
containers:
- name: web
image: nginx
livenessProbe: #存活检查,重启容器
httpGet:
path: /
port: 80
initialDelaySeconds: 5 #启动容器后多少秒健康检查
periodSeconds: 10 #以后每间隔多少秒检查一次
readinessProbe: #就绪检查,从Service中提出容器
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 10
容器的环境变量
创建Pod时,可以为其下的容器设置环境变量。
应用场景:
- 容器内应用程序希望获取Pod信息
- 容器内应用程序希望通过用户定义的变量改变默认行为
变量值几种定义的方式:
- 自定义变量值
- 变量值从Pod属性获取
- 变量值从Secret、ConfigMap获取
apiVersion: v1
kind: Pod
metadata:
name: pod-envars
spec:
containers:
- name: test
images: busybox
command: ["sh","-c","sleep 36000"]
env:
# 变量值从pod属性获取
- name: MY_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: MY_POD_NAME
valueFrom:
filedRef:
fieldPath: metadata.name
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: ABC #自定义变量值
value: "123456"
初始化容器(init container)
init container:顾名思义,用于初始化工作,执行完就结束,可以理解为一次性任务。
- 支持大部分应用容器配置,但不支持健康检查
- 优先应用容器执行
应用场景
- 环境检查: 例如确保应用容器依赖的服务启动后再启动容器
- 初始化检查:例如给应用容器准备配置文件
因此,pod中也会有这几种类型的容器:
- infrastructure Container: 负责pod网络(pause镜像)
- initContainers: 初始化容器,先于业务容器启动并完成
- Containers: 应用容器,当配置多个容器时并行启动
静态pod
静态pod特点:
- pod由特定节点上的kubelet管理
- 不能使用容器
- Pod名称标识当前节点名称
在kubelet配置文件启动静态pod参数:
vi /var/lib/kubectl/config.yaml
...
staticPodPath: /etc/kubernetes/manifests
...
注:将部署的pod yaml放到该目录会由kubelet自动创建
同时也是master节点主要组件yaml文件存放目录
/etc/kubernetes/manifests
更多推荐
已为社区贡献3条内容
所有评论(0)