官网: http://kubernetes.p2hp.com/docs/concepts/architecture/controller.html
Kubernetes 通常不会直接创建 Pod, 而是通过 Controller 来管理 Pod 的。
Controller 中定义了 Pod 的部署特性,比如有几个副本、在什么样的 Node 上运行等。通俗的说可以认为 Controller 就是用来管理 Pod 一个对象。其核心作用可以通过一句话总结: 通过监控集群的公共状态,并致力于将当前状态转变为期望的状态。
通俗定义: controller 可以管理 pod 让 pod 更具有运维能力
Deployment
是最常用的 Controller。Deployment 可以管理 Pod 的多个副本,并确保 Pod 按照期望的状态运行。
Daemonset
用于每个Node 最多只运行一个 Pod 副本的场景。正如其名称所揭示的,DaemonSet 通常用于运行 daemon。
Statefuleset
能够保证 Pod 的每个副本在整个生命周期中名称是不变的,而其他Controller 不提供这个功能。当某个 Pod 发生故障需要删除并重新启动时,Pod 的名称会发生变化,同时 StatefuleSet 会保证副本按照固定的顺序启动、更新或者删除。
Job
用于运行结束就删除的应用,而其他 Controller 中的 Pod 通常是长期持续运行。
注意: Controller 通过 label 关联起来 Pods
ymlapiVersion: 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标签
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
查询副本
jskubectl get rs|replicaset
伸缩扩展副本
jskubectl scale deployment nginx --replicas=5
说明:
仅当 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
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 许可协议。转载请注明出处!