k 8 s deploymentによるアップグレード

44498 ワード

コンセプト
Deployment(中国語では配置、スケジューリングを意味する)は、RCとPodをより簡単に更新するメカニズムを提供し、K 8 Sバージョン1.2で実現された.Deploymentで所望のクラスタ状態を記述することによって、Deployment Controllerは現在のクラスタ状態を制御可能な速度で所望のクラスタ状態に徐々に更新する.Deploymentの主な役割はpodの数と健康を保証するためであり、90%の機能はRCと全く同じであり、次世代のRCと見なすことができる.
機能
Deploymentはオンライン配置、スクロールアップグレード、コピー作成、オンラインタスクの一時停止、オンラインタスクの回復、以前のバージョン(成功/安定)にロールバックするDeploymentなどの機能を統合し、ある程度、Deploymentは無人のオンラインを実現し、オンラインプロセスの複雑なコミュニケーション、操作リスクを大幅に低減することができる.
RC全機能:DeploymentはRC全機能を継承している.
イベントとステータスの表示:Deploymentのアップグレードの詳細とステータスを表示できます.
ロールバック:podミラーまたは関連パラメータをアップグレードしたときに問題が発生した場合、ロールバック操作を使用して前の安定したバージョンまたは指定したバージョンにロールバックできます.
バージョンレコード:Deploymentの操作のたびに保存され、後続のロールバック使用が可能になります.
≪一時停止と起動|Pause and Start|emdw≫:アップグレードのたびに、いつでも一時停止および起動できます.
複数のアップグレードスキーム:Recreate--既存のpodをすべて削除し、新しいものを再作成します.RollingUpdate-スクロールアップグレード、段階的に置換されたポリシーをスクロールアップグレードすると、最大使用不可pod数の設定、最小アップグレード間隔の設定など、より多くの追加パラメータがサポートされます.
シーンの操作
Deploymentを使用してPodまたはRSを起動(オンライン/導入)
Deploymentが正常に実行されたかどうかを確認します
Deploymentを更新して対応するPodsを再作成します(たとえば、新しいImageを使用する必要があります)
既存のDeploymentが不安定な場合は、初期の安定したDeploymentバージョンにロールバックします.
Deploymentを一時停止または再開
RCと比較してdeploymentのメリット
DeploymentはRSを使用しており、より高い概念です.
RCは等式ベースのselector(env=devまたはenvironment!=qa)のみをサポートするが、RSは新しい、集合ベースのselector(version in(v 1.0,v 2.0)またはenv notin(dev,qa))もサポートし、複雑なメンテナンス管理に便利である.
Deploymentを使用してPodをアップグレードするには、Podの最終状態を定義するだけで、K 8 Sは必要な操作を実行します.コマンドkubectl rolling-updateを使用してアップグレードを完了することができますが、クライアントとサービス側でRCを複数回インタラクティブに制御して完了するので、REST APIにはrolling-updateのインタフェースがありません.これは自分の管理システムをカスタマイズするのにいくつかの面倒をもたらします.
Deploymentは、より柔軟で強力なアップグレード、ロールバック機能を備えています.
共通コマンド
作成
サブコマンドcreateを使用してDeploymentを作成
kubectl create -f test-dpm.yaml --record

注記--recordパラメータ.このパラメータを使用すると、後でオブジェクトを作成する操作が記録され、管理と問題の遡及が容易になります.
配置ステータスの表示
  1. kubectl rolloutstatus deployment/lykops-dpm
  2. kubectl describe deployment/lykops-dpm

kubectl set image deployment/lykops-dpm lykops-dpm=app:v1

edit, spec.replicas/spec.template.spec.container.image , deployment ( rolling-update )

kubectl rolloutpause deployment/lykops-dpm

kubectl rolloutresume deployment/lykops-dpm

kubectl rolloutundo deployment/lykops-dpm

deployments

kubectl rollouthistory deployments

kubectl rolloutundo deployment/lykops-dpm --to-revision=2

  1. kubectl describedeployment/lykops-dpm
  2. Name: lykops-dpm
  3. Namespace: default
  4. CreationTimestamp: Tue, 01 Aug 2017 16: 56: 45 + 0800
  5. Labels: app=lykops-dpm
  6. project=lykops
  7. software=apache
  8. version=v1
  9. Selector: app=lykops-dpm,name=lykops-dpm,project=lykops,software=apache,version=v1
  10. Replicas: 3updated | 3 total | 3 available | 0 unavailable
  11. StrategyType: Recreate
  12. MinReadySeconds: 30
  13. Conditions:
  14. Type Status Reason
  15. ---- ------ ------
  16. Available True MinimumReplicasAvailable
  17. OldReplicaSets:
  18. NewReplicaSet: lykops-dpm -4183418831 ( 3/ 3 replicas created)
  19. Events:
  20. FirstSeen LastSeen Count From SubObjectPath Type Reason Message
  21. --------- -------- ----- ---- ------------- -------- ------ -------
  22. 29m 29m 1 {deployment-controller } Normal ScalingReplicaSet Scaledup replica set lykops-dpm -2823415590 to 3
  23. 28m 28m 1 {deployment-controller } Normal ScalingReplicaSet Scaleddown replica set lykops-dpm -2823415590 to 0
  24. 28m 28m 1 {deployment-controller } Normal ScalingReplicaSet Scaledup replica set lykops-dpm -4001949646 to 3
  25. 26m 26m 1 {deployment-controller } Normal ScalingReplicaSet Scaleddown replica set lykops-dpm -4001949646 to 0
  26. 26m 26m 1 {deployment-controller } Normal ScalingReplicaSet Scaledup replica set lykops-dpm -4183418831 to 3

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: lykops-dpm
  5. labels:
  6. software: apache
  7. project: lykops
  8. app: lykops-dpm
  9. version: v1
  10. spec:
  11. replicas: 3 #
  12. minReadySeconds: 30 # , 30s
  13. strategy:
  14. type: recreate #
  15. #rollingUpdate:## replicas 3, ,pod 2-4
  16. # maxSurge: 3 # 3 pod
  17. # maxUnavailable: 1 # Unavailable pod
  18. selector:
  19. matchLabels:
  20. name: lykops-dpm
  21. software: apache
  22. project: lykops
  23. app: lykops-dpm
  24. version: v1
  25. template:
  26. metadata:
  27. labels:
  28. name: lykops-dpm
  29. software: apache
  30. project: lykops
  31. app: lykops-dpm
  32. version: v1
  33. spec:
  34. terminationGracePeriodSeconds: 60 ##k8s SIGTERM , 、 , 30
  35. containers:
  36. - name: lykops-dpm
  37. image: web:apache
  38. command: [ "sh", "/etc/run.sh" ]
  39. ports:
  40. - containerPort: 80
  41. name: http
  42. protocol: TCP
  43. resources:
  44. requests:
  45. cpu: 0.05
  46. memory: 16Mi
  47. limits:
  48. cpu: 0.1
  49. memory: 32Mi
  50. livenessProbe: #livenessProbe K8S pod , kill , , RS 。
  51. httpGet:
  52. path: /
  53. port: 80
  54. scheme: HTTP
  55. initialDelaySeconds: 30
  56. timeoutSeconds: 5
  57. successThreshold: 1
  58. failureThreshold: 5
  59. readinessProbe: #readinessProbe K8S pod , , , command, httpGet。
  60. httpGet:
  61. path: /
  62. port: 80
  63. scheme: HTTP
  64. initialDelaySeconds: 30
  65. timeoutSeconds: 5
  66. successThreshold: 1
  67. failureThreshold: 5

strategy type

recreate rollingUpdate。recreate-- pod, ; rollingUpdate-- , , , , pod , 。

, 。recreate , , ; rollingUpdate , , 。

maxSurge maxUnavailable

maxSurge: 1 1 pod

maxUnavailable:1 Unavailable pod 。 replicas 3, ,pod 2-4 terminationGracePeriodSeconds

k8s SIGTERM , 、 , 30 。

, k8s pre-stop lifecycle hook , SIGTERM 。

livenessProbe readinessProbe

livenessProbe K8S pod , kill , , RS 。

readinessProbe K8S pod , , , command, httpGet。 java web , tomcat , spring , 。 spring boot , actuator /health , 。

readinessProbe.initialDelaySeconds ,livenessProbe.initialDelaySeconds + 。