• Init Container介绍


    一、什么是Init Container

       Init Container就是用来做初始化工作的容器,可以是一个或者多个,如果有多个的话,这些容器会按定义的顺序依次执行,只有所有的Init Container执行完后,主容器才会被启动。我们知道一个Pod里面的所有容器是共享数据卷和网络命名空间的,所以Init Container里面产生的数据可以被主容器使用到的。
    
       Init Container与应用容器本质上是一样的,但他们是仅运行一次就结束的任务,并且必须在成功执行完后,系统才能继续执行下一个容器
    

    二、Init Container应用场景

    • 等待其他量关联组件正确运行(例如solr启动先依赖zookeeper)
    • 基于环境变量或配置模板生成配置文件
    • 从远程数据库获取本地所需配置,或者将吱声注册到某个中央数据库中
    • 下载相关依赖包,或者对系统进行一些预配置操作(可以用python或者bash对系统做初始化操作)

    三、初始容器使用

    cat > myapp.yaml << EFO
    apiVersion: v1
    kind: Pod
    metadata:
      name: myapp-pod
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: busybox
        command: ['sh', '-c', 'echo The app is running! && sleep 3600']
      initContainers:
      - name: init-myservice
        image: busybox
        command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
      - name: init-mydb
        image: busybox
        command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
    EFO
    

    以上pod定义包含两个初始容器,第一个等待myservice服务可用,第二个等待mydb服务可用,这两个pod执行完成,应用容器开始执行

    下面是myservicemydb两个服务的yaml文件

    cat > services.yaml << EFO
    kind: Service
    apiVersion: v1
    metadata:
      name: myservice
    spec:
      ports:
      - protocol: TCP
        port: 80
        targetPort: 9376
    EFO
    #------------------------#
    cat > mydb.yaml << EFO
    kind: Service
    apiVersion: v1
    metadata:
      name: mydb
    spec:
      ports:
      - protocol: TCP
        port: 80
        targetPort: 9377
    EFO
    

    分别构建这些pod、service:

    # 1、首先构建myapp这个pod、
    [root@k8s-master01 app]# kubectl create -f myapp.yaml
    pod/myapp-pod created
    
    # 2、查看状态,现在是不会创建成功的因为那2个servicer没初始化
    [root@k8s-master01 app]# kubectl get  -f myapp.yaml
    NAME        READY   STATUS                  RESTARTS   AGE
    myapp-pod   0/1     Init:ImagePullBackOff   0          11s
    
    # 3、构建那2个servier
    [root@k8s-master01 app]# kubectl create -f services.yaml
    service/myservice created
    
    [root@k8s-master01 app]# kubectl create -f mydb.yaml 
    service/mydb created
    
    # 4、查看这2个svc
    [root@k8s-master01 ~]# kubectl get  svc
    NAME           TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)   AGE
    mydb           ClusterIP      10.96.15.77      <none>          80/TCP    38s
    myservice      ClusterIP      10.101.111.161   <none>          80/TCP    52s
    
    # 5、查看pod是否构建完成,可以看到已经构建完成。
    [root@k8s-master01 app]# kubectl get -f myapp.yaml
    NAME        READY   STATUS    RESTARTS   AGE
    myapp-pod   1/1     Running   0          4m46s
    # 这样查看也可以
    [root@k8s-master01 app]# kubectl get pod
    NAME                        READY   STATUS    RESTARTS   AGE
    myapp-pod                   1/1     Running   0          6m46s
    

    学习于:https://www.cnblogs.com/tylerzhou/p/11007430.html

  • 相关阅读:
    eclipse rcp 获取工程项目路径
    Eclipse RCP中添加第三方jar包的办法
    eclipse content assist 代码提示功能失效解决办法
    lwuit更改字体大小
    lwuit调整滚动条灵敏度值
    AWTEvent
    IE7 IE6去掉关闭提示框的解决方案
    jQuery多库共存最优解决方案
    电子商务网站 数据库产品表设计方案
    javascript操作cookie
  • 原文地址:https://www.cnblogs.com/hsyw/p/14203389.html
Copyright © 2020-2023  润新知