K8S実践Ⅲ(ポッドコントローラ)

、展開

メイン関数の展開を自動的にコンテナアプリケーションの複数のコピーを展開し、連続コピーの数を監視し、常にクラスタ内のコピーのユーザが指定した数を維持することです

1.設定パラメータ
K8S実践Ⅲ(ポッドコントローラ)

セレクタ(セレクタ):
  .spec.selectorデプロイメント管理ポッドの範囲を定める、ラベルセレクタを指定するために使用されるオプションのフィールドです。指定された場合は、.spec.selectorは.spec.template.metadata.labelsと一致する必要があります、またはそれはAPIを拒否されます。.spec.selectorが指定されていない場合は、.spec.selector.matchLabelsのデフォルトは.spec.template.metadata.labelsです。

2.Deployment設定例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
        app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
# kubectl get deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           58s
# kubectl get pods
NAME                               READY   STATUS             RESTARTS   AGE
liveness-http                      0/1     CrashLoopBackOff   473        28h
nginx-deployment-6dd86d77d-6hk7w   1/1     Running            0          71s
nginx-deployment-6dd86d77d-mxr8l   1/1     Running            0          71s
nginx-deployment-6dd86d77d-xxhpd   1/1     Running            0          71s
# kubectl get pods --show-labels
NAME                               READY   STATUS    RESTARTS   AGE    LABELS
nginx-deployment-6dd86d77d-6hk7w   1/1     Running   0          2m5s   app=nginx,pod-template-hash=6dd86d77d
nginx-deployment-6dd86d77d-mxr8l   1/1     Running   0          2m5s   app=nginx,pod-template-hash=6dd86d77d
nginx-deployment-6dd86d77d-xxhpd   1/1     Running   0          2m5s   app=nginx,pod-template-hash=6dd86d77d

展開の作成またはさらにreplicaSetを引き継ぐ場合は、展開コントローラが自動的にポッド用ポッドのテンプレートのハッシュラベルを追加します。目的は、繰り返し子の展開のポッド名を防ぐためですさらにreplicaSet

アップグレードを3.Deployment

nginxのは、現在のバージョン1.9.1を反映するように更新されます、あなたはkubectl設定された画像コマンドによる新しいイメージのバージョンの展開を設定することができます

# kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
deployment.extensions/nginx-deployment image updated
# kubectl rollout status deployment/nginx-deployment
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx-deployment" rollout to finish: 1 old replicas are pending termination...
deployment "nginx-deployment" successfully rolled out
# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-6dd86d77d    0         0         0       70m
nginx-deployment-784b7cc96d   3         3         3       21m

# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-784b7cc96d-4575d   1/1     Running   0          2m13s
nginx-deployment-784b7cc96d-c98s8   1/1     Running   0          91s
nginx-deployment-784b7cc96d-r6sm9   1/1     Running   0          2m51s
#此处名称已经更新

ビューの展開の詳細

# kubectl describe deployment/nginx-deployment
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  17m   deployment-controller  Scaled up replica set nginx-deployment-784b7cc96d to 1
  Normal  ScalingReplicaSet  17m   deployment-controller  Scaled down replica set nginx-deployment-6dd86d77d to 2
  Normal  ScalingReplicaSet  17m   deployment-controller  Scaled up replica set nginx-deployment-784b7cc96d to 2
  Normal  ScalingReplicaSet  16m   deployment-controller  Scaled down replica set nginx-deployment-6dd86d77d to 1
  Normal  ScalingReplicaSet  16m   deployment-controller  Scaled up replica set nginx-deployment-784b7cc96d to 3
  Normal  ScalingReplicaSet  16m   deployment-controller  Scaled down replica set nginx-deployment-6dd86d77d to 0

もう一つの方法は、kubectl編集の展開設定を変更するには、updateコマンドを使用することです:
#kubectl編集展開/展開、nginxの

4.Deploymentバージョンロールバック
Viewの展開には、レコードをアップグレード

# kubectl rollout history deployment/nginx-deployment
deployment.extensions/nginx-deployment 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
  • デフォルトでは、システムに前の2つの展開の展開履歴が保存されてkubernetes、あなたは保存する変更の数に改訂改訂履歴の制限を変更することができます。
  • したがって、あなたがの変更リビジョンを見ることができない、展開を作成するときには増加--recordパラメータはありません。展開を作成するプラス--recordするときは、各バージョンによって使用されるコマンドパラメータを見ることができます。
  • 更新操作の展開が(例えば.spec.templateなど)ポッドテンプレートの展開は、新しいリビジョンを作成するために変更される場合に限り、つまり、展開時にトリガされ、別の更新操作(コピーの数を増加させる)となります展開はポッドテンプレートセクションの展開で以前のバージョンにロールバックは、ロールバックされたときにことを意味し、更新操作をトリガしません。

詳細についてはバージョンの機能を見ます

# kubectl rollout history deployment/nginx-deployment --revision=2

以前のバージョンにロールバック

# kubectl rollout undo deployment/nginx-deployment
deployment.extensions/nginx-deployment rolled back

また、バージョン履歴--to-revisionパラメータを指定することができます

# kubectl rollout undo deployment/nginx-deployment --to-revision=2
deployment.extensions/nginx-deployment rolled back

5.Deployment一時停止と再開

時には配備構成変更のために必要な回数は、その更新をトリガー頻繁を避けるために、あなたは、設定変更を行い、更新プログラムの展開を一時停止することができます。
展開が一時停止中にロールバックすることができないことに留意すべきです

更新操作の展開を一時停止

# kubectl rollout pause deployment/nginx-deployment
deployment.extensions/nginx-deployment paused

アップデートの回復

# kubectl rollout resume deploy nginx-deployment
deployment.extensions/nginx-deployment resumed

6.Deployment拡大

# kubectl scale deploy nginx-deployment --replicas=5
deployment.extensions/nginx-deployment scaled
# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-784b7cc96d-9z8df   1/1     Running   0          52m
nginx-deployment-784b7cc96d-dqfv4   1/1     Running   0          8s
nginx-deployment-784b7cc96d-q4jcw   1/1     Running   0          52m
nginx-deployment-784b7cc96d-rs8fn   1/1     Running   0          34m
nginx-deployment-784b7cc96d-v5drb   1/1     Running   0          8s

二、DaemonSet

インスタンスのコピーを管理するためのDaemonSetは、クラスタ内の各ノード上でのみポッドを実行しています。
該当するシーン:

  • 各ノード上のGlusterFSセファロストレージやストレージのプロセスを実行します
  • ログ収集プログラムは、例えば、各ノード上で実行されます:Fluentd、Logstash
  • 性能監視デーモンは、例えば、各ノード上で実行される:プロメテウスノード輸出、collectd

1. Redisの-filebeat例を作成しますdaemonset

# cat redis-filebeat-ds.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
      role: logstor
  template:
    metadata:
      labels:
        app: redis
        role: logstor
    spec:
      containers:
      - name: redis
        image: redis:4.0-alpine
        ports:
        - name: redis
          containerPort: 6379

---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: filebeat-ds
  namespace: default
spec:
  selector:
    matchLabels:
      app: filebeat
      release: stable
  template:
    metadata:
      labels:
        app: filebeat
        release: stable
    spec:
      containers:
      - name: filebeat
        image: ikubernetes/filebeat:5.6.5-alpine
        env:
        - name: REDIS_HOST
          value: redis.default.svc.cluster.local
        - name: REDIS_LOG_LEVEL
          value: info
# kubectl expose deployment redis --port=6379
# kubectl get ds
NAME          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
filebeat-ds   2         2         2       2            2           <none>          41s

各ノード上でポッドを作成します

# kubectl get pods -o wide
NAME                                READY   STATUS    RESTARTS   AGE   IP          NODE    NOMINATED NODE   READINESS GATES
filebeat-ds-ss4jx                   1/1     Running   0          70s   10.44.0.5   k8s-2   <none>           <none>
filebeat-ds-z5bdx                   1/1     Running   0          70s   10.36.0.4   k8s-3   <none>           <none>
redis-58b9f5776-sd2tc               1/1     Running   0          70s   10.36.0.3   k8s-3   <none>           <none>

更新2.DaemonSet

  • 設定ファイルの更新を変更することにより、利用kubectlが適用されます
  • またはkubectl編集を使用します
# kubectl edit ds/filebeat-ds

ミラーの更新バージョン

# kubectl set image daemonsets filebeat-ds filebeat=ikubernetes/filebeat:5.6.6-alpine
daemonset.extensions/filebeat-ds image updated

ビューの更新状況

# kubectl get pods -w
NAME                                READY   STATUS              RESTARTS   AGE
filebeat-ds-9l84r                   0/1     ContainerCreating   0          2s
filebeat-ds-z5bdx                   1/1     Running             0          17m
redis-58b9f5776-sd2tc               1/1     Running             0          17m
filebeat-ds-9l84r                   1/1     Running             0          20s
filebeat-ds-z5bdx                   1/1     Terminating         0          18m
filebeat-ds-z5bdx                   0/1     Terminating         0          18m
filebeat-ds-z5bdx                   0/1     Terminating         0          18m
filebeat-ds-z5bdx                   0/1     Terminating         0          18m
filebeat-ds-psdgb                   0/1     Pending             0          0s
filebeat-ds-psdgb                   0/1     Pending             0          0s
filebeat-ds-psdgb                   0/1     ContainerCreating   0          0s
filebeat-ds-psdgb                   1/1     Running             0          19s

三、ポッドの膨張体積の減少

1.手動スケーリング能力
部数を設定kubectlスケールを使用して

# kubectl scale deployment nginx-deployment --replicas=5

自動スケーリング能力HPA

四、StatefulSet

ます。https://blog.51cto.com/lullaby/2406041で再現

おすすめ

転載: blog.csdn.net/weixin_34290000/article/details/92680581