k8s-initC

2682 ワード

Init容器は何ができますか?
Initコンテナには、アプリケーションコンテナから分離された個別のミラーがあるため、関連コードの起動には次のような利点があります.
  • Initコンテナは、インストール中にアプリケーションコンテナに存在しないユーティリティまたはパーソナライズドコードを含むことができる.例えば、インストール中にsed、awk、python、digのようなツールを使用するためにFROMのミラーを除去して新しいミラーを生成する必要はありません.
  • Initコンテナは、ミラーの適用によるセキュリティの低下を回避するために、これらのツールを安全に実行することができる.
  • アプリケーションミラーの作成者とデプロイメント者は、個別のアプリケーションミラーを共同で構築する必要がなく、それぞれ独立して作業することができます.
  • Initコンテナは、Pod内のアプリケーションコンテナとは異なるファイルシステムビューで実行できます.したがって、InitコンテナはSecretsにアクセスする権限を持つことができ、アプリケーションコンテナはアクセスできない.
  • Initコンテナは、アプリケーションコンテナが起動する前に動作しなければならないため、Initコンテナは、アプリケーションコンテナの起動のセットが前提条件を満たすまで、アプリケーションコンテナの起動をブロックまたは遅延させるメカニズムを提供する.先行条件が満たされると、Pod内のすべてのアプリケーションコンテナが並列に起動します.

  • 例:
  • masterで3つのyamlファイルを参照してください:init-pod.yaml、myservice.yaml、mydb.yaml
  • 実行init-pod.yamlファイルvim init-pod.yaml
  • 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;']
    

    myapp-containerコンテナを構築する前にinit-myserviceコンテナとinit-mydbコンテナ2.1を構築してinit-podを実行する必要があることを示す.yamlファイル
    [root@apiserver ~]# kubectl create -f init-pod.yaml 
    pod/myapp-pod created
    

    2.2 podを見る(initは一人も起きていないし、readyも起きていない)
    [root@apiserver ~]# kubectl get pod
    NAME        READY   STATUS     RESTARTS   AGE
    myapp-pod   0/1     Init:0/2   0          47s
    
  • 実行init-myservice
  • vim myservice.yaml
    

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

    podを表示(initはもう1つ起きています)
    [root@apiserver ~]# kubectl get pod
    NAME        READY   STATUS     RESTARTS   AGE
    myapp-pod   0/1     Init:1/2   0          13m
    
  • mydbを実行します.yamlファイル
  • vim mydb.yaml
    

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

    podの表示:(readyは正常)
    [root@apiserver ~]# kubectl  get pod
    NAME        READY   STATUS    RESTARTS   AGE
    myapp-pod   1/1     Running   0          61s
    

    OKが完了しました.