Kubernetes----Pod中的初始化容器

【原文链接】

一、初始化容器简介与应用场景

1.1 初始化容器简介

初始化容器是在pod的主容器启动之前要运行的容器,主要是做一些主容器的前置工作,它有两大特征:

  • 1、初始化容器必须运行完成直到结束,若某初始化容器运行失败,那么kubernetes需要重启它直到成功完成
  • 2、初始化容器必须按照定义的顺序执行,当且仅当前一个成功之后,后一个才能执行

1.2 初始化容器使用场景

初始化容器有很多应用场景,如下为最常见的几个:

  • 提供主容器镜像中不具备的工具程序或者自定义代码
  • 初始化容器要先于应用容器串行启动并运行完成,因此可用于延后应用容器的启动直至其依赖的条件得到满足

二、创建初始化容器

2.1 编写yaml文件

如下,编写pod_init_container.yaml文件,内容如下,设置一个初始化容器,用于ping 192.168.16.41,如果ping通了则继续,如果ping不通,则继续等待直到ping通

apiVersion: v1
kind: Namespace
metadata:
  name: dev

---

apiVersion: v1
kind: Pod
metadata:
  name: pod-init-container
  namespace: dev
  labels:
    user: redrose2100
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP
  initContainers:
  - name: test-ping
    image: busybox:1.30
    command: ["sh","-c","until ping 192.168.16.41 -c 1 ; do echo 'waiting for ping...'; sleep 2; done;"]

2.2 创建资源

使用如下命令创建资源

[root@master pod]# kubectl apply -f pod_init_container.yaml
namespace/dev created
pod/pod-init-container created
[root@master pod]#

2.3 查看资源创建状态

如下,可以看到pod创建过程中,首先创建并执行的初始化容器

[root@master pod]# kubectl get pod -n dev
NAME                 READY   STATUS    RESTARTS   AGE
pod-init-container   1/1     Running   0          2m15s
[root@master pod]# kubectl describe pod pod-init-container -n dev
Name:         pod-init-container
Namespace:    dev
Priority:     0
Node:         node2/192.168.16.42
Start Time:   Tue, 22 Mar 2022 17:02:15 +0800
Labels:       user=redrose2100
Annotations:  <none>
Status:       Running
IP:           10.244.2.37
IPs:
  IP:  10.244.2.37
Init Containers:
  test-ping:
    Container ID:  docker://ad5638803015fa3aec476117828a68561c3b11e478e3ea50c036700871a6e318
    Image:         busybox:1.30
    Image ID:      docker-pullable://busybox@sha256:4b6ad3a68d34da29bf7c8ccb5d355ba8b4babcad1f99798204e7abb43e54ee3d
    Port:          <none>
    Host Port:     <none>
    Command:
      sh
      -c
      until ping 192.168.16.41 -c 1 ; do echo 'waiting for ping...'; sleep 2; done;
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Tue, 22 Mar 2022 17:02:15 +0800
      Finished:     Tue, 22 Mar 2022 17:02:15 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-z8w87 (ro)
Containers:
  nginx:
    Container ID:   docker://e1f0e2f09720dcd0f467288e8984b7741f2e6d73825428e50c9b025779a307cc
    Image:          nginx:1.17.1
    Image ID:       docker-pullable://nginx@sha256:b4b9b3eee194703fc2fa8afa5b7510c77ae70cfba567af1376a573a967c03dbb
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Tue, 22 Mar 2022 17:02:16 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-z8w87 (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  kube-api-access-z8w87:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  2m29s  default-scheduler  Successfully assigned dev/pod-init-container to node2
  Normal  Pulled     2m29s  kubelet            Container image "busybox:1.30" already present on machine
  Normal  Created    2m29s  kubelet            Created container test-ping
  Normal  Started    2m29s  kubelet            Started container test-ping
  Normal  Pulled     2m28s  kubelet            Container image "nginx:1.17.1" already present on machine
  Normal  Created    2m28s  kubelet            Created container nginx
  Normal  Started    2m28s  kubelet            Started container nginx
[root@master pod]#

2.4 删除资源

使用如下命令删除资源

[root@master pod]# kubectl delete -f pod_init_container.yaml
namespace "dev" deleted
pod "pod-init-container" deleted
[root@master pod]#

你可能感兴趣的:(Kubernetes,kubernetes)