k8s学习pod第七天

2023-11-11

init Container

初始化容器是一类只运行一次的容器,本质是也是容器,不同容器间启动有先后顺序,只有前面的容器运行成功了,后面的容器才能运行

初始化容器的场景:

  1. 在其他容器运行之前做个初始化,比如配置文件生成、环境变量生成
  2. 有先后顺序的运行容器,比如像启动数据库容器、再启动服务容器
  3.  下载依赖文件或依赖包,对系统做一些预制的操作
  4. apiVersion: v1
    kind: Pod
    metadata:
       name: nginx
       annotations:
    spec:
       #初始化容器,只会执行一次
       initContainers:
       - name: busybox
         image: busybox
         command:
         - wget
         - "-O"
         - "/work-dir/index.html"
         - http://kubernetes.io
         volumeMounts:
         - name: workdir
           mountPath: "/work-dir"
       containers:
       - name: nginx
         image: nginx
         ports:
         - containerPort: 80
         volumeMounts:
         - name: workdir
           mountPath: /usr/share/nginx/html
       dnsPolicy: Default
       restartPolicy: Always
       volumes:
       - name: workdir
         emptyDir: {}

    已上配置文件,首先要运行一个busybox,并且下载一个文件到/work-dir中,然后启动nginx容器,在/usr/share/nginx/html中就有了文件index.html

    //查看nginx容器的index.html文件
    kubectl exec -it nginx -- cat  /usr/share/nginx/html/index.html
    kubectl  describe pod nginx
    Name:             nginx
    Namespace:        default
    Priority:         0
    Service Account:  default
    Node:             scms01/172.16.2.220
    Start Time:       Fri, 21 Apr 2023 17:55:46 +0800
    Labels:           <none>
    Annotations:      cni.projectcalico.org/containerID: a41631bbfb14e42f600f44841550a2ccaa7977e22d19142033ce19f7ee7a69fc
                      cni.projectcalico.org/podIP: 192.168.61.43/32
                      cni.projectcalico.org/podIPs: 192.168.61.43/32
    Status:           Running
    IP:               192.168.61.43
    ...
    
    
    Events:
      Type    Reason     Age   From               Message
      ----    ------     ----  ----               -------
      Normal  Scheduled  33m   default-scheduler  Successfully assigned default/nginx to scms01
      Normal  Pulling    33m   kubelet            Pulling image "busybox"
      Normal  Pulled     33m   kubelet            Successfully pulled image "busybox" in 1.648537736s (1.648546748s including waiting)
      Normal  Created    33m   kubelet            Created container busybox
      Normal  Started    33m   kubelet            Started container busybox
      Normal  Pulling    33m   kubelet            Pulling image "nginx"
      Normal  Pulled     33m   kubelet            Successfully pulled image "nginx" in 1.695249999s (1.695256875s including waiting)
      Normal  Created    33m   kubelet            Created container nginx
      Normal  Started    33m   kubelet            Started container nginx

    可见先启动了buysbox,然后又启动了nginx容器。

init container与应用容器的区别

  1. init container 必须在应用容器启动之前运行,但设置了多个init container ,将按顺序执行,只有前面的成功后,后面的才能运行
  2. 在init container的定义中也可以设置资源限制、Volume的使用和安全策略。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s学习pod第七天 的相关文章

随机推荐