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

posted @   liwenchao1995  阅读(153)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示