编辑
2023-06-08
K8S
00
请注意,本文编写于 594 天前,最后修改于 593 天前,其中某些信息可能已经过时。

目录

1. Controller 控制器
1.1 什么是 Controller
1.2 常见的 Controller 控制器
2.Controller 如何管理 Pod
3.创建deployment控制器
4.查看 deployment
5.缩扩展deployment副本
6. 回滚 deployment
7.删除 deployment

1. Controller 控制器

官网: http://kubernetes.p2hp.com/docs/concepts/architecture/controller.html

1.1 什么是 Controller

Kubernetes 通常不会直接创建 Pod, 而是通过 Controller 来管理 Pod 的。Controller 中定义了 Pod 的部署特性,比如有几个副本、在什么样的 Node 上运行等。通俗的说可以认为 Controller 就是用来管理 Pod 一个对象。其核心作用可以通过一句话总结: 通过监控集群的公共状态,并致力于将当前状态转变为期望的状态。

通俗定义: controller 可以管理 pod 让 pod 更具有运维能力

1.2 常见的 Controller 控制器

  • Deployment 是最常用的 Controller。Deployment 可以管理 Pod 的多个副本,并确保 Pod 按照期望的状态运行。

    • ReplicaSet 实现了 Pod 的多副本管理。使用 Deployment 时会自动创建 ReplicaSet,也就是说 Deployment 是通过 ReplicaSet 来管理 Pod 的多个副本的,我们通常不需要直接使用 ReplicaSet。
  • Daemonset 用于每个Node 最多只运行一个 Pod 副本的场景。正如其名称所揭示的,DaemonSet 通常用于运行 daemon。

  • Statefuleset 能够保证 Pod 的每个副本在整个生命周期中名称是不变的,而其他Controller 不提供这个功能。当某个 Pod 发生故障需要删除并重新启动时,Pod 的名称会发生变化,同时 StatefuleSet 会保证副本按照固定的顺序启动、更新或者删除。

  • Job 用于运行结束就删除的应用,而其他 Controller 中的 Pod 通常是长期持续运行。

2.Controller 如何管理 Pod

注意: Controller 通过 label 关联起来 Pods

image.png

3.创建deployment控制器

yml
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx #deployment的标签=pod的标签=selector标签 spec: replicas: 1 #用来指定控制器的副本数,指定一个 template: metadata: name: nginx #指定pod的名称 labels: app: nginx #指定pod的标签 #deployment的标签=pod的标签=selector标签 spec: containers: - name: nginx-deployment image: nginx:1.19 imagePullPolicy: IfNotPresent restartPolicy: Always selector: #用来告知deployment控制器选择带有对应标签pod来管理 matchLabels: app: nginx #deployment的标签=pod的标签=selector标签

4.查看 deployment

sh
# 部署应用 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

5.缩扩展deployment副本

查询副本

js
kubectl get rs|replicaset

伸缩扩展副本

js
kubectl scale deployment nginx --replicas=5

6. 回滚 deployment

说明:

仅当 Deployment Pod 模板(即 .spec.template)发生改变时,例如模板的标签或容器镜像被更新, 才会触发 Deployment 上线。其他更新(如对 Deployment 执行扩缩容的操作)不会触发上线动作。

k8s
# 查看上线状态 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

7.删除 deployment

js
# 删除 Deployment kubectl delete deployment nginx-deployment kubect delete -f nginx-deployment.yml # 删除默认命名空间下全部资源 kubectl delete all --all # 删除指定命名空间的资源 kubectl delete all --all -n 命名空间的名称

本文作者:松轩(^U^)

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

Document