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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!