Pod的常状态与initContainer
pod调度流程:
pod常见状态效果图:
pod常见状态:
######################################################################################################
pauser:又叫Infra容器,是pod的基础容器,镜像体积很小(只有几百kb),配置在容器运行时(1.24之前的版本在kubelet上配置)上,主要功能是一个pod中多个容器的网络通信(运行pod的时候kubelet来加载它)
(如果想要测试pause,在docker运行镜像的时候加上参数--net=,指定容器使用容器的网络)
安装ethtool能查看到容器中对端网卡的编号:
ethtool -S eth0
######################################################################################################
init容器的作用:
-
可以为业务容器提前准备好运行环境,比如将业务容器需要的配置文件提前生成并放在指定位置、检查数据权限或完整性、软件版本等基础环境
-
可以在运行有业务容器前准备好需要的业务数据,比如从OSS下载、或者从其他位置copy
-
检查依赖服务是否启动
init容器的特点:
-
一个pod可以有多个业务容器和多个init容器,但是每个init容器和业务容器运行的环境都是隔离的
-
init容器会比业务容器先启动,只有init容器运行成功后才会继续运行业务容器
-
如果一个pod拥有多个init容器,则需要从上到下逐个运行并且要全部运行成功后才会运行业务容器
-
init容器不支持探针检测(因为初始化完成后就会退出,不会再次运行)
init容器实战:
cat <<EOF >initcontainer.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
namespace: wyh-test1-ns
labels:
app: nginx-deploy-debug
spec:
selector:
matchLabels:
app: nginx-test
template:
metadata:
labels:
app: nginx-test
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: data-volume
mountPath: /usr/share/nginx/html/wyh
initContainers:
- name: init-nginx-html
image: centos:7.9.2009
command: ['/bin/bash','-c',"for i in {1..10}; do echo ${i} $(date) >> /data/initcontainer/a.txt; sleep 1; done " ]
volumeMounts:
- name: data-volume
mountPath: "/data/initcontainer"
volumes:
- name: data-volume
hostPath:
path: /data/initcontainer
---
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
namespace: wyh-test1-ns
labels:
app: nginx-svc-debug
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 80
nodePort: 30080
selector:
app: nginx-test
EOF
执行文件并查看容器变化
kubectl apply -f initcontainer.yaml
kubectl get pod -nwyh-test1-ns -owide
进入192.168.213.21服务器,查看/data/initcontainer/a.txt文件变化
######################################################################################################