コピーPods


種子を安定させる方法


prob


ノードのkubeletは、シードが存在する限り、シードのコンテナを実行します.
ではkubeletパドのコンテナが正常であることをどのように確定しますか?
これを確認するために使用するオプションはliveness probeです.
livenessという言葉のように、定期的に容器が生きているかどうかをチェックすることができます.これも、サービスが正常に動作する重要な環境で使用する必要があるオプションです.
livenessオプションが適用されたパイドコンテナがアクティブでないと判断した場合(定期的なチェックのフィットネスロジックに応答しない場合)、kubeletはコンテナを再実行します.
livenessprobeでは、この健康診断ロジックをアプリケーションのプライマリ・サービス(ex:order/payment支払)に指定して、キー・サービスが正常に動作していることを確認できます.
しかし、プローブが働きすぎると、容器の速度が遅くなるため、1秒以内に完了する論理を構成する必要があります.
probには3つのシリーズがあります
  • exec:完全JVMの健康診断
  • httpGet : http health check
  • TCPソケット:tcp健康診断
  • 次に、execに関連するlivenessprobを示します.
    exec-liveness.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        test: liveness
      name: liveness-exec
    spec:
      containers:
      - name: liveness
        image: k8s.gcr.io/busybox
        args:
        - /bin/sh
        - -c
        - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
        livenessProbe:
          exec:
            command:
            - cat
            - /tmp/healthy
          initialDelaySeconds: 5
          periodSeconds: 5
    applyとdescripeで確認すると、以下のリアルタイムオプションが含まれています.

    今回は、上記のオプションを見てみましょう.
  • InitionalDelaySeconds:Kuber Nations指定待ち秒数
  • periodSeconds:指定された秒周期で確認
  • replicaSet ( ReplicationController)


    https://kubernetes.io/ko/docs/concepts/workloads/controllers/replicationcontroller/
    https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/
    Replicationコントローラは、シードが常に動作することを保証するクバーネディスリソースです.ノードがクラスタから消えた場合、またはノードからシードが除去された場合、アプリケーションコントローラは消えたシードを検出し、代替シードを生成します.また、実行中のシード数が実際に指定したシード数と一致していることを確認します.

    アプリケーションコントローラの3つのコンポーネント

  • label selector:アプリケーションコントローラ管理のシード
  • replicationcount:指定されたシード数
  • pods template:シードテンプレート
  • replicationcontroller.yaml
    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: nginx
    spec:
      replicas: 3
      selector:
        app: nginx
      template:
        metadata:
          name: nginx
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            ports:
            - containerPort: 80
    

    kubectl apply -f replicationconroller.yaml

    しかし、このリフレッシュコントローラは最近、リフレッシュに取って代わられた.
    Reflicasetは、Reflicationコントローラと比較して、より豊富な式を使用してセレクタ機能を改善します.
    それは後で見て、まずReflicaコントローラとあまり変わらないReflicasetを見てみましょう.
    replicaset.yaml
    apiVersion: apps/v1
    kind: ReplicaSet
    metadata:
      name: frontend
      labels:
        app: guestbook
        tier: frontend
    spec:
      # 케이스에 따라 레플리카를 수정한다.
      replicas: 3
      selector:
        matchLabels:
          tier: frontend
      template:
        metadata:
          labels:
            tier: frontend
        spec:
          containers:
          - name: php-redis
            image: gcr.io/google_samples/gb-frontend:v3
    
    

    label


    レプリケーションコントローラ(ReplicationController,ReplicationSet)はラベルベースなのでラベルが重要です.
  • labelビュー
  • kubectl label pods --show-labels
  • ラベル
  • ラベルのみ表示
  • kubectl get pods -L type

    コピーの編集


    Reflicaであるシード数を編集する方法は3つあります.
  • yamlファイル編集と適用
  • kubectl edit rs {rs} (kubectl edit deploy {deploy} )

  • kubectl scale rs frontend --replicas=3

  • このようにパードの個数を増やすことを水平パードスケールと呼び,scaloutと呼ぶ.
    今回は使い切ったリソースを削除します
    kubectl delete rs {rs 이름 } --cascade=false
    
    --cascade=falseオプションは、シードを保持し続けます.trueを与えると、実行中のシードも削除できます.

    複製セットの式


    前述したように、replicasetは、より豊富な式matchexpressionsを使用することができる.
    selector:
      metchExpressions:
        - key: app
          operator: In
          values:
            - app2
    このセレクタにはpadキーがappであるラベルが含まれ、ラベル値がapp 2である必要があります.
    また、バッテリに次のオプションを追加することもできます.
  • In:ラベルの値が指定した値の1つと一致
  • NotIn:ラベルのカバーボックスに一致
  • Exists:シードには、指定された鍵を持つラベル
  • が含まれている必要があります.
  • DoesNotExist:padには、指定されたキーを持つラベルは含まれていません.
  • 悪魔3


    https://kubernetes.io/ko/docs/concepts/workloads/controllers/daemonset/
    クバーネディスクラスタは通常、ノードから構成されません.複数のノードからなる環境で各ノードにシードを配置する場合は、daemonSetを使用します.
    デーモンプロセスセットは、ノード数に応じてシードを作成し、各ノードに配布します.
    デーモンプロセスセットを使用するように設計できますが、特定のノードにのみ配置できます.すなわち、node-selectorプロパティを使用します.
    
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: fluentd-elasticsearch
      namespace: kube-system
      labels:
        k8s-app: fluentd-logging
    spec:
      selector:
        matchLabels:
          name: fluentd-elasticsearch
      template:
        metadata:
          labels:
            name: fluentd-elasticsearch
        spec:
          tolerations:
          # this toleration is to have the daemonset runnable on master nodes
          # remove it if your masters can't run pods
          - key: node-role.kubernetes.io/master
            operator: Exists
            effect: NoSchedule
          containers:
          - name: fluentd-elasticsearch
            image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
            resources:
              limits:
                memory: 200Mi
              requests:
                cpu: 100m
                memory: 200Mi
            volumeMounts:
            - name: varlog
              mountPath: /var/log
            - name: varlibdockercontainers
              mountPath: /var/lib/docker/containers
              readOnly: true
          terminationGracePeriodSeconds: 30
          volumes:
          - name: varlog
            hostPath:
              path: /var/log
          - name: varlibdockercontainers
            hostPath:
              path: /var/lib/docker/containers
    
    
    
    EFKは各ノードにFluentdとElasticsearchをインストールして各ノードのログを収集する必要がある.上記の例は、yamlスクリプトに適用されます.
    配置するノードを選択して配置することもできます.ノードにlabelを追加し、department、rs、daemonsetにlabelを追加すると、指定したノードに配置されます.
    
    kubectl get node
    
    kubectl label node {node name} disk=ssd
    
    kubectl label node {node name} disk=hdd --overwride
    
    

    ちゃんぽん


    ヘテロから1つ以上のシードを生成し、指定した数のシードが正常に終了するまでシードを再試行し続けます.種子が正常に完了すると,完了したヘテロ波を追跡し,ヘテロ波を完了する.キャプチャが削除されると、そのキャプチャが生成されたシードも削除されます.
    job.yaml
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: pi
    spec:
      template:
        spec:
          containers:
          - name: pi
            image: perl
            command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
          restartPolicy: Never
      backoffLimit: 4
    


    5つのシードを順次実行する場合は、次のオプションCompletionsを使用します.
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: multi-job
    spec:
      completions: 5
      template:
        spec:
          containers:
          - name: pi2
            image: perl
            command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
    


    5つのフィードを並列に実行する場合は、どのくらいのフィードparallelismを並列に実行するかを指定できます.
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: multi-job
    spec:
      completions: 5
      parallelism: 2
    
    次の実行可能ファイルを表示すると、両方が同時に実行されていることがわかります.

    このような雑用を一定時間おきに実行したい場合は、どうすればいいですか?

    コロン雑


    https://kubernetes.io/ko/docs/concepts/workloads/controllers/cron-jobs/
    この場合Crontabを使用できます.
    次のスクリプトは毎分hellopodsを生成します.
    apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: hello
    spec:
      schedule: "*/1 * * * *"
      jobTemplate:
        spec:
          template:
            spec:
              containers:
              - name: hello
                image: busybox
                imagePullPolicy: IfNotPresent
                command:
                - /bin/sh
                - -c
                - date; echo Hello from the Kubernetes cluster
              restartPolicy: OnFailure
    
    
    

    賭け時間はscheduleオプションで、導入スケジュールとともに参照できます.

    リファレンス


    クバーネディス公式文書
    クバーネディス動作