初始化容器

发布时间:2022-07-05 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了初始化容器脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

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

  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

脚本宝典总结

以上是脚本宝典为你收集整理的初始化容器全部内容,希望文章能够帮你解决初始化容器所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。