Deployment
Deployment
资源对象通常包括以下几个主要部分:
-
apiVersion
-
kind
-
metadata
-
spec
apiVersion
指定 API 的版本。对于 Deployment
,通常使用 apps/v1
。
apiVersion: apps/v1
kind
指定资源的类型。对于 Deployment
,这个字段的值为 Deployment
。
kind: Deployment
metadata
包含 Deployment
对象的元数据,如名称、命名空间、标签和注释等。
-
name
: Deployment 的名称(必须唯一)。 -
namespace
: Deployment 所在的命名空间(默认为default
)。 -
labels
: 用于标记 Deployment 的键值对,方便后续的选择器和过滤。 -
annotations
: 用于存储附加的信息和注释。
metadata: name: my-deployment namespace: default labels: app: my-app
spec
定义了 Deployment 的详细规格,包括副本数量、Pod 模板、选择器和更新策略等。
-
replicas
: 指定 Pod 的副本数量。这决定了有多少个 Pod 应该同时运行。
replicas: 3
selector:
matchLabels:
app: my-app
metadata:
labels:
app: my-app
-
-
-
name
: 容器的名称。 -
image
: 容器的镜像。 -
ports
: 容器暴露的端口。 -
env
: 环境变量配置。 -
resources
-
-
spec: containers: - name: my-container image: my-image:latest ports: - containerPort: 80
volumes: - name: my-volume emptyDir: {}
strategy:
type: RollingUpdate
-
-
-
-
maxUnavailable
-
-
-
-
-
如果没有指定
type
,默认使用"RollingUpdate"
-
-
rollingUpdate: maxSurge: 1 maxUnavailable: 1
minReadySeconds: 10
功能说明:
-
-
-
默认值: 如果没有显式设置这个字段,Kubernetes 默认会保留 10 个历史
ReplicaSet
。 -
指针: 这个字段是一个指针,意味着可以将其设置为
0
(表示不保留任何历史ReplicaSet
-
revisionHistoryLimit: 5
-
-
回滚(Rollback):支持回滚到先前的版本,以便在新版本出现问题时快速恢复。
-
副本管理(Replica Management):自动创建、删除或更新 Pod 副本以保持所需的副本数量。
-
声明式配置
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx-dep spec: replicas: 10 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: harbor.hiuiu.com/nginx/nginx:1.21.5 ports: - containerPort: 80
创建或更新 Deployment
kubectl apply -f deployment.yaml
查看 Deployment 状态
kubectl get deployments
kubectl describe deployment <deployment-name>
删除 Deployment
kubectl delete deployment <deployment-name>
升级版本管理
查看升级历史
kubectl rollout history deployment/nginx-deployment
回滚到指定版本
kubectl rollout undo deployment/nginx-deployment --to-revision=3
动态缩放
kubectl scale deployment/nginx-deployment --replicas=10
锁定当前版本
kubectl rollout pause deployment/nginx-deployment
解除锁定
kubectl rollout resume deployment/nginx-deployment
查看配置
kubectl explain deployment
kubectl describe deployments.apps nginx-deployment
使用deployment升级pod
#修改配置文件 apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx-dep spec: replicas: 10 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: harbor.hiuiu.com/nginx/nginx:1.22a ports: - containerPort: 80 kubectl apply -f deployment.yaml
#查看升级过程
watch kubectl get pod -o wide
升级回滚
方法一:
命令形式升级
kubectl set image deployment.v1.apps/nginx-deployment nginx=harbor.hiuiu.com/nginx/nginx:1.21.5
方法二:
修改配置文件
kubectl edit deployment/nginx-deployment
自动更新策略配置
##Recreate 重建式更新 --- spec: template: metadata: spec: startegy: type: Recreate --- ##rollingUpdate maxSurge:允许超出期望副本数的最大 Pod 数量(跟新过程中的额外创建的pod) maxUnavailable:允许的最大不可用 Pod 数量 #两种取值方式:1.给定数量,2.根据百分比 maxUnavailable <string> --- strategy: type:RollingUpdate rollingupdate: maxSurge: 50% maxUnavailable: 50%