k8s-initC
Init 容器能做什么?因为 Init 容器具有与应用容器分离的单独镜像,其启动相关代码具有如下优势:Init 容器可以包含一些安装过程中应用容器中不存在的实用工具或个性化代码。例如,没有必要仅为了在安装过程中使用类似 sed、 awk、python 或 dig 这样的工具而去FROM 一个镜像来生成一个新的镜像。Init 容器可以安全地运行这些工具,避免这些工具导致应用镜像的安全性降低。...
·
Init 容器能做什么?
因为 Init 容器具有与应用容器分离的单独镜像,其启动相关代码具有如下优势:
- Init 容器可以包含一些安装过程中应用容器中不存在的实用工具或个性化代码。例如,没有必要仅为了在安装过程中使用类似 sed、 awk、python 或 dig 这样的工具而去FROM 一个镜像来生成一个新的镜像。
- Init 容器可以安全地运行这些工具,避免这些工具导致应用镜像的安全性降低。
- 应用镜像的创建者和部署者可以各自独立工作,而没有必要联合构建一个单独的应用镜像。
- Init 容器能以不同于Pod内应用容器的文件系统视图运行。因此,Init容器可具有访问 Secrets 的权限,而应用容器不能够访问。
- 由于 Init 容器必须在应用容器启动之前运行完成,因此 Init
容器提供了一种机制来阻塞或延迟应用容器的启动,直到满足了一组先决条件。一旦前置条件满足,Pod内的所有的应用容器会并行启动。
示例:
- 在master上见三个yaml文件:init-pod.yaml、myservice.yaml、mydb.yaml
- 运行init-pod.yaml文件
vim init-pod.yaml
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;']
上面表示在搭建myapp-container容器之前需要搭建init-myservice容器和init-mydb容器
2.1 运行init-pod.yaml 文件
[root@apiserver ~]# kubectl create -f init-pod.yaml
pod/myapp-pod created
2.2查看pod(init连个都没有起来,ready也没有起来)
[root@apiserver ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
myapp-pod 0/1 Init:0/2 0 47s
- 运行init-myservice
vim myservice.yaml
编辑:
kind: Service
apiVersion: v1
metadata:
name: myservice
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9376
查看pod(这时init已经起来一个了)
[root@apiserver ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
myapp-pod 0/1 Init:1/2 0 13m
- 运行mydb.yaml文件
vim mydb.yaml
编辑:
kind: Service
apiVersion: v1
metadata:
name: mydb
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9377
查看pod:(ready已经成功)
[root@apiserver ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
myapp-pod 1/1 Running 0 61s
ok 完成了。
更多推荐
已为社区贡献18条内容
所有评论(0)