|NO.Z.00204|——————————|CloudNative|——|KuberNetes&高级调度.V07|——|初始化容器|InitContainer操作|

一、InitContainer概述
### --- InitContainer概述

~~~     # InitContainer:    
~~~     初始化容器:预处理、预判断、与执行命令操作;在我应用容器启动之前做的一些舒适化操作。
~~~     # postStart:
~~~     在容器启动之前做一些操作。不能保证在你的container的EntryPoint
### --- 为什么不适用postStart而是使用InitContainer呢?

~~~     两者都是在容器启动之前执行一些操作
~~~     使用InitContainer的原因:因为postStart不能保证在EntryPoint之前在运行,
~~~     但是InitContainer可以保证一定会在容器启动之前去运行,
~~~     因为它运行完成之后,才能运行我们的应用容器。
二、InitContainer预处理
### --- InitContainer预处理操作:

~~~     验证在初始化之前进行执行InitContainer的参数,若是InitContainer执行成功,在执行启动。
### --- 添加InitContainers参数在容器启动之前执行一些操作

[root@k8s-master01 ~]# kubectl edit deploy demo-nginx
    spec:                       # 在spec之下添加如下内容
      initContainers:
      - image: nginx
        imagePullPolicy: IfNotPresent
        command: ["sh", "-c", "echo InitContainer"]
        name: init1
      containers:               # 在containers之上添加如上内容
### --- 查看容器是否被初始化操作 
~~~     # 正在进行初始化操作

[root@k8s-master01 ~]# kubectl get po -owide
NAME                          READY   STATUS        RESTARTS   AGE    IP               NODE           NOMINATED NODE   READINESS GATES
demo-nginx-7d5fb74f4-splmz    0/2     Init:0/1      0          5s     <none>           k8s-node02     <none>           <none>
demo-nginx-7d5fb74f4-tn7xk    0/2     Init:0/1      0          6s     <none>           k8s-master01   <none>           <none> 
~~~     # 初始化完成

[root@k8s-master01 ~]# kubectl get po -owide
NAME                          READY   STATUS        RESTARTS   AGE    IP               NODE           NOMINATED NODE   READINESS GATES
demo-nginx-7d5fb74f4-splmz    2/2     Running       0          45s    172.27.14.206    k8s-node02     <none>           <none>
demo-nginx-7d5fb74f4-tn7xk    2/2     Running       0          46s    172.25.244.241   k8s-master01   <none>           <none> 
三、InitContainer挂载nfs卷
### --- 挂载nfs卷进去,写入内容,查看是否执行

[root@k8s-master01 ~]# kubectl edit deploy demo-nginx    
      initContainers:
      - command:
        - sh
        - -c
        - echo "InitContainer" > /tmp/nfs/init  // 输出一行内容
        image: nginx
        imagePullPolicy: IfNotPresent
        name: init1
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:                           // 挂载一个nfs进去
        - mountPath: /tmp/nfs
          name: nfs-test
[root@k8s-master01 ~]# kubectl get po -owide
NAME                          READY   STATUS        RESTARTS   AGE     IP               NODE           NOMINATED NODE   READINESS GATES
demo-nginx-7d847948d8-8h8kt   2/2     Running       0          24s     172.25.92.85     k8s-master02   <none>           <none>
demo-nginx-7d847948d8-jtvtr   2/2     Running       0          22s     172.27.14.207    k8s-node02     <none>           <none>
### --- 查看文件是否被写入进去
~~~     启动它是被执行了2次初始化操作的

root@demo-nginx-7d847948d8-8h8kt:/# cat /tmp/nfs/init 
InitContainer               // 文件已经被写入进来
### --- 再次更改,它的输入内容

[root@k8s-master01 ~]# kubectl edit deploy demo-nginx  
      initContainers:
      - command:
        - sh
        - -c
        - echo "InitContainer" >> /tmp/nfs/init     // 输出内容应该是3行是正确的
### --- 验证;是否输入3行内容

[root@k8s-master01 ~]# kubectl get po
NAME                          READY   STATUS        RESTARTS   AGE
demo-nginx-7648bb7d-75vhx     2/2     Running       0          13s
demo-nginx-7648bb7d-9sdb7     2/2     Running       0          14s
~~~     所以说是每一个pod上面会挂一个InitContainer,InitContainer会执行我们的命令,
~~~     InitContainer在使用非常广泛,主要是做一些预处理的工作。比postStart使用好一些。

[root@k8s-master01 ~]# kubectl exec -ti demo-nginx-7648bb7d-75vhx -- bash
root@demo-nginx-7648bb7d-75vhx:/# cat /tmp/nfs/init  // 输入了3行内容
InitContainer
InitContainer
InitContainer

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on   yanqi_vip  阅读(37)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示