k8s-Pod中容器的初始化
1. 概述
POD的spac下 containers 定义了常规运行的容器,在initContainers中定义了用于初始化的容器(可以是一个也可以是多个)。pod启动时先将initContainers中的容器执行一次。
如果初始化失败仍然按容器重启策略执行。
2. 测试
2.1 yml文件
说明:
container中定义了一个nginx容器。initContainers中定义了一个busybox容器用于初始化nginx容器。
具体初始化方案如下:
1)nginx和busybox共同挂着一个空目录,nginx中指向web家目录。
2)初始化时,busybox给nginx写入一个首页
创建init-test.yml文件,内容如下:
apiVersion: v1
kind: Pod
metadata:
labels:
app: init-demo
name: init-demo
namespace: test
spec:
containers:
- name: nginx
image: harborcto.xxx.com.cn/public/nginx #公司内网镜像打个码,改成公网即可。
ports:
- containerPort: 80
volumeMounts:
- name: workdir
mountPath: /usr/share/nginx/html
initContainers:
- name: install
image: harborcto.xxx.com.cn/public/busybox #公司内网镜像打个码,改成公网即可。
command:
- /bin/sh
- "-c"
- echo "刘备" > /work-dir/index.html
volumeMounts:
- name: workdir
mountPath: "/work-dir"
dnsPolicy: Default
volumes:
- name: workdir
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: init-demo
namespace: test
labels:
app: init-demo
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30588
selector:
app: init-demo
2.2 启动和测试
[root@DoM01 test]# kubectl create -f init-test.yml
[root@DoM01 test]# kubectl get pod -n test
NAME READY STATUS RESTARTS AGE
init-demo 1/1 Running 0 10m
访问web页面,可见我们写在index里的“刘备”