其他分享
首页 > 其他分享> > 初始化容器

初始化容器

作者:互联网

初始化容器即应用程序的主容器启动之前要运行的容器,常用于为主容器执行一些预置操作,它们具有两种典型特征

  1. 初始化容器必须运行完成直至结束,若某初始化容器运行失败,那么k8s需要重启它直到成功完成
  2. 每个初始化容器都必须按定义的顺序串行运行
  3. 如果pod对应的restartPolicy为never,它就不会重新启动

有不少场景都需要在应用容器启动之前进行部分初始化操作,例如,等待其他相关联组件服务可 用、基于环境变量或配置模板为应用程序生成配置文件、从配置中心获取配置等。初始化容器的典型应 用需求具体包含如下几种。

  1. 用于运行特定的工具程序,出于安全等方面的原因,这些程序不适于包含在主容器镜像中
  2. 提供主容器镜像中不具备的工具程序或自定义代码
  3. 为容器镜像的构建和部署人员提供了分离、独立工作的途径,使得它们不必协同起来制作单个镜像文件
  4. 初始化容器和主容器处于不同的文件系统视图中,因此可以分别安全地使用敏感数据,例如secrets资源
  5. 初始化容器要先于应用容器串行启动并运行完成,因此可用于延后应用容器的启动直至其依赖的条件得到满足

案例

准备镜像

docker pull busybox:1.32.0
docker pull nginx:1.17.10-alpine

initcpod.yml

apiVersion: v1
kind: Pod
metadata:
  name: initcpod-test
  labels:
    app: initcpod-test
spec:
  containers:
    - name: initcpod-test
      image: busybox:1.32.0
      imagePullPolicy: IfNotPresent
      command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
    - name: init-myservice
      image: busybox:1.32.0
      imagePullPolicy: IfNotPresent
      command: [ 'sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;' ]
    - name: init-mydb
      image: busybox:1.32.0
      command: [ 'sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;' ]
  restartPolicy: Always

initcservice1.yml

apiVersion: v1
kind: Service
metadata:
  name: myservice
spec:
  selector:
    app: myservice
  ports:
    - port: 80
      targetPort: 9376
      protocol: TCP

initcservice2.yml

apiVersion: v1
kind: Service
metadata:
  name: mydb
spec:
  selector:
    app: mydb
  ports:
    - port: 80
      targetPort: 9377
      protocol: TCP

查看

先查看pod启动情况
kubectl get pods

详细查看pod启动情况
kubectl describe pod initcpod-test

查看initcpod-test中的第一个initContainer日志
kubectl logs myapp-pod -c init-myservice

运行init-myservice服务
kubectl apply -f initcservice1.yml

查看init-myservice服务运行情况
kubectl get svc

查看myapp-pod运行情况,需要耐心等一会,会发现pod的第一个init已经就绪
kubectl get pods

运行init-mydb服务
kubectl apply -f initcservice2.yml

查看init-myservice服务运行情况
kubectl get svc

查看myapp-pod运行情况,需要耐心等一会,会发现pod的两个init已经就绪,pod状态ready
kubectl get pod -w

标签:初始化,kubectl,容器,init,myservice,pod
来源: https://www.cnblogs.com/ltaodream/p/15317053.html