目次
1 コントローラーコントローラー
公式ウェブサイト:コントローラー | Kubernetes
1.1 コントローラーとは
Kubernetes 通常不会直接创建 Pod, 而是通过 Controller 来管理 Pod 的。
ポッドのデプロイメント特性 (コピーの数、どのノードで実行されるかなど) はコントローラーで定義されます。平たく言えば、ControllerはPodを管理するためのオブジェクトであると考えることができます。その中心的な役割は、次の一文に要約できます。通过监控集群的公共状态,并致力于将当前状态转变为期望的状态。
一般的な定義: コントローラーはポッドを管理して、ポッドの運用とメンテナンスの能力を高めることができます。
1.2 共通コントローラ コントローラ
-
Deployment
最も一般的に使用されるコントローラーです。デプロイメントでは、Pod の複数のコピーを管理し、Pod が期待どおりに実行されていることを確認できます。-
ReplicaSetはPodの複数コピー管理を実現します。ReplicaSet は、Deployment を使用するときに自動的に作成されます。つまり、Deployment は ReplicaSet を通じて Pod の複数のコピーを管理し、通常は ReplicaSet を直接使用する必要はありません。
-
-
Daemonset
各ノードが最大 1 つのポッド コピーを実行するシナリオで使用されます。その名前が示すように、DaemonSet は通常、デーモンを実行するために使用されます。 -
Statefuleset
これにより、Pod の各コピーの名前がライフサイクルを通じて変更されないことが保証されますが、他のコントローラーはこの機能を提供しません。ポッドに障害が発生し、削除して再起動する必要がある場合、ポッドの名前が変更され、StatefuleSet によってレプリカが固定された順序で起動、更新、または削除されるようになります。 -
Job
他のコントローラーのポッドは通常、長時間継続して実行されますが、実行後に削除されるアプリケーションに使用されます。
1.3 コントローラーはポッドをどのように管理するか
注意: Controller 通过 label 关联起来 Pods
2 展開
正式なアドレス:デプロイメント | Kubernetes
Deployment は、Pod と ReplicaSet の宣言的な更新機能を提供します。
デプロイメントでターゲットの状態を記述するのはユーザーの責任であり、デプロイメント コントローラー (コントローラー) は実際の状態を制御された速度で変更して、望ましい状態にします。Deployment を定義して新しい ReplicaSet を作成したり、既存の Deployment を削除してそのリソースを新しい Deployment を通じて採用したりできます。
2.1 デプロイメントを作成する
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.19
ports:
- containerPort: 80
2.2 展開を表示する
# 部署应用
$ kubectl apply -f app.yaml
# 查看 deployment
$ kubectl get deployment
# 查看 pod
$ kubectl get pod -o wide
# 查看 pod 详情
$ kubectl describe pod pod-name
# 查看 deployment 详细
$ kubectl describe deployment 名称
# 查看 log
$ kubectl logs pod-name
# 进入 Pod 容器终端, -c container-name 可以指定进入哪个容器。
$ kubectl exec -it pod-name -- bash
# 输出到文件
$ kubectl get deployment nginx-deployment -o yaml >> test.yaml
-
NAME
ネームスペース内のデプロイメントの名前をリストします。 -
READY
利用可能なアプリケーションの「コピー」数を表示します。表示されるパターンは「Ready Count/Expected Count」です。 -
UP-TO-DATE
望ましい状態を達成するために更新されたレプリカの数を示します。 -
AVAILABLE
ユーザーが利用できるアプリのコピー数を表示します。 -
AGE
アプリケーションの実行時間を表示します。
必要なレプリカの数は
.spec.replicas
フィールド 3 に従って設定されることに注意してください。
2.3 スケーリング展開
# 查询副本
$ kubectl get rs|replicaset
# 伸缩扩展副本
$ kubectl scale deployment nginx --replicas=5
2.4 ロールバック展開
例証します:
.spec.template
Deployment go-liveは、テンプレートのタグやコンテナー イメージが更新されるなど、Deployment Pod テンプレート (つまり ) が変更された場合にのみトリガーされます。他の更新 (デプロイメントの拡張または縮小など) は、ライブ稼働アクションをトリガーしません。
# 查看上线状态
$ kubectl rollout status [deployment nginx-deployment | deployment/nginx]
# 查看历史
$ kubectl rollout history deployment nginx-deployment
# 查看某次历史的详细信息
$ kubectl rollout history deployment/nginx-deployment --revision=2
# 回到上个版本
$ kubectl rollout undo deployment nginx-deployment
# 回到指定版本
$ kubectl rollout undo deployment nginx-deployment --to-revision=2
# 重新部署
$ kubectl rollout restart deployment nginx-deployment
# 暂停运行,暂停后,对 deployment 的修改不会立刻生效,恢复后才应用设置
$ kubectl rollout pause deployment ngixn-deployment
# 恢复
$ kubectl rollout resume deployment nginx-deployment
2.5 デプロイメントの削除
# 删除 Deployment
$ kubectl delete deployment nginx-deployment
$ kubect delete -f nginx-deployment.yml
# 删除默认命名空间下全部资源
$ kubectl delete all --all
# 删除指定命名空间的资源
$ kubectl delete all --all -n 命名空间的名称