Pause容器说明

每个Pod里运行着一个特殊的被称之为Pause的容器,其他容器则为业务容器,这些业务容器共享Pause容器的网络栈和Volume挂载卷,因此他们之间通信和数据交换更为高效。在设计时可以充分利用这一特性,将一组密切相关的服务进程放入同一个Pod中;同一个Pod里的容器之间仅需通过localhost就能互相通信。

kubernetes中的pause容器主要为每个业务容器提供以下功能:

PID命名空间:Pod中的不同应用程序可以看到其他应用程序的进程ID。

网络命名空间:Pod中的多个容器能够访问同一个IP和端口范围。

IPC命名空间:Pod中的多个容器能够使用System V IPC或POSIX消息队列进行通信。

UTS命名空间:Pod中的多个容器共享一个主机名;Volumes(共享存储卷)。

Pod中的各个容器可以访问在Pod级别定义的Volumes。

Init Container可以在多种K8S资源里被使用到如Deployment、Daemon Set, Pet Set, Job等,但归根结底都是在Pod启动时,在主容器启动前执行,做初始化工作。

Init 容器不支持 lifecyclelivenessProbereadinessProbestartupProbe, 因为它们必须在 Pod 就绪之前运行完成。

应用场景:

第一种场景:等待其它模块Ready,比如我们有一个应用里面有两个容器化的服务,一个是Web Server,另一个是数据库。其中Web Server需要访问数据库。但是当我们启动这个应用的时候,并不能保证数据库服务先启动起来,所以可能出现在一段时间内Web Server有数据库连接错误。为了解决这个问题,我们可以在运行Web Server服务的Pod里使用一个InitContainer,去检查数据库是否准备好,直到数据库可以连接,Init Container才结束退出,然后Web Server容器被启动,发起正式的数据库连接请求。

第二种场景:初始化配置

个人总结示例:

(weops) [root@node201 k8s]# cat initcontainer_emptyvolume.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-initcontainer-emptyvolume
  labels:
    app: init
spec:
  initContainers:
    - name: init1
      image: busybox
      command:
      - wget
      - "-O"
      - "/temp/index.html"
      - http://www.baidu.com
      volumeMounts:
        - name: initdir1     # 关联volumes:-> name: initdir1
          mountPath: "/temp" #挂载到init容器busybox的/temp
    - name: init2
      image: busybox
      command:
      - wget
      - "-O"
      - "/temp/index1.html"
      - http://www.baidu.com
      volumeMounts:
        - name: initdir2      # 关联volumes:-> name: initdir2
          mountPath: "/temp" #挂载到init容器busybox的/temp


  containers:
    - name: nginx
      image: nginx
      ports:
      - containerPort: 80
      volumeMounts:
        - name: initdir1
          mountPath: /usr/share/nginx/html  #initdir1挂载到nginx容器的/usr/share/nginx/html
    - image: busybox
      name: busybox
      command: [ "sleep", "3600" ]
      volumeMounts:
        - name: initdir2
          mountPath: /tmp  #initdir2挂载到busybox容器的/tmp

  volumes:
    - name: initdir1
      emptyDir: {}
      #emptyDir:
      #  medium: Memory #Memory表示使用基于RAM的临时文件系统tmpfs
      #  sizeLimit: 50Mi
    - name: initdir2
      #emptyDir: {}
      emptyDir:
        medium: Memory #Memory表示使用基于RAM的临时文件系统tmpfs
        sizeLimit: 50Mi

  restartPolicy: Always

(weops) [root@node201 k8s]# kubectl get pod
NAME                            READY   STATUS     RESTARTS   AGE
pod-initcontainer-emptyvolume   0/2     Init:1/2   0          37s

(weops) [root@node201 k8s]# kubectl get pod
NAME                            READY   STATUS            RESTARTS   AGE
pod-initcontainer-emptyvolume   0/2     PodInitializing   0          42s

(weops) [root@node201 k8s]# kubectl get pod
NAME                            READY   STATUS    RESTARTS   AGE
pod-initcontainer-emptyvolume   2/2     Running   0          68s

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐