k8s InitC
k8s InitC
Pod能够具有多个容器,应用运行在容器里面,但是它可能有一个或多个先于应用容器起的Init容器
Init容器与普通的容器非常像,除了两点:
- Init容器总是运行到成功完成为止
- 每个Init容器都必须在下一个Init容器启动之前成功完成
如果Pod的Init容器失败,K8s会不断的重启这个Pod,知道init容器成功为止,然而,如果Pod对应的 restartPolicy为never,它不会重新启动
1.1 优势
InitC存在的优势:
- 他们可以包含并运行实用工具,但是出于安全考虑,是不建议在应用程序容器镜像中包含这些实用工具的,比如可以通过端口攻击的服务,在initc中只运行几分钟就退出了
- 应用程序镜像可以分离出创建和部署的角色,而没有必要联合他们构建一个单独的镜像
- Init容器使用Linux Namespace,所以相对应用程序容易来说具有不同的文件系统视图,因此,他们能够具有访问Secret的权限,而应用程序则不能
- 他们必须在应用程序容器启动之前运行完成,而应用程序容器是并行运行的,所以Init
容器能够提供一种简单的阻塞或者延迟应用容器的启动的方法,知道满足了一组先决条件
只要创建svc,在pod中就可以解析这个域名
2.1 Initc模板
两个Initc,一个MainC
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: harbor.hongfu.com/library/busybox:v1
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: harbor.hongfu.com/library/busybox:v1
command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
- name: init-mydb
image: harbor.hongfu.com/library/busybox:v1
command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
kubectl create -f pod.yaml
kubectl logs myapp-pod -c init-myservice //查看initc的日志
kubectl describe pod myapp-pod //查看pod调度日志
上面是pod的yaml,接下来是对pod的service的yaml
//service的yaml
kind: Service
apiVersion: v1
metadata:
name: myservice
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9376
---
---
kind: Service
apiVersion: v1
metadata:
name: mydb
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9377
kubectl create -f pod-service.yaml
当我们创建一个clusterIp的时候,假如有一个已经存在的pod myapp,那我们创建svc的时候,加上myapp相当于默认给myapp加了svc

本文来自博客园,作者:liwenchao1995,转载请注明原文链接:https://www.cnblogs.com/liwenchao1995/p/16351856.html

浙公网安备 33010602011771号