一、Deployment介绍
Kubernetes 的 Deployment
是一种高层次的 API 对象,用于声明式地管理 Pod 的副本、升级、回滚等操作。它为应用的部署和维护提供了强大的功能。
Deployment是Replicat的一个升级版本,具备动态升级和回滚功能。 Deployment是kubernetes中最常用的资源对象,为ReplicaSet和Pod的创建提供了一种声明式的定义方法,在Deployment对象中描述一个期望的状态,Deployment控制器就会按照一定的控制速率把实际状态改成期望状态,通过定义一个Deployment控制器会创建一个新的ReplicaSet控制器,通过ReplicaSet创建pod,删除Deployment控制器,也会删除Deployment控制器下对应的ReplicaSet控制器和pod资源。
二、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
: 定义一个标签选择器,用于选择和管理 Pod。
matchLabels
: 定义要匹配的标签键值对,用于选择与 Deployment 相关的 Pod。
selector: matchLabels: app: my-app
template
: 定义 Pod 的模板。所有根据 Deployment 创建的 Pod 都会基于这个模板。
metadata
: Pod 的标签,通常与 selector
中的标签匹配。
metadata: labels: app: my-app
spec
: Pod 的规格,包括容器配置、卷、环境变量等。
containers
: 容器列表,定义 Pod 中的容器。
-
-
-
name
: 容器的名称。 -
image
: 容器的镜像。 -
ports
: 容器暴露的端口。 -
env
: 环境变量配置。 -
resources
: 资源请求和限制。
-
-
spec: containers: - name: my-container image: my-image:latest ports: - containerPort: 80
volumes
: 定义 Pod 使用的卷(可选)
volumes: - name: my-volume emptyDir: {}
strategy
: 定义滚动更新的策略。
type
: 更新策略类型。常用的有 RollingUpdate
和 Recreate
。
strategy: type: RollingUpdate
rollingUpdate
: 这是一个 RollingUpdateDeployment
类型的字段,仅在 type
设置为 RollingUpdate
时出现。它定义了滚动更新的配置参数。
-
-
-
maxSurge
: 更新期间可以创建的额外 Pod 数量或百分比。 -
maxUnavailable
: 更新期间允许不可用的 Pod 数量或百分比。
-
-
默认值:
-
-
-
如果没有指定
type
,默认使用"RollingUpdate"
策略。
-
-
rollingUpdate: maxSurge: 1 maxUnavailable: 1
minReadySeconds
: Pod 在被认为可用之前必须在 Ready 状态下等待的最小秒数(可选)。
minReadySeconds: 10
revisionHistoryLimit
: 保留的历史版本数量,默认是 10 个(可选)。
功能说明:
-
-
回滚: 当你更新
Deployment
的配置时,Kubernetes 会创建一个新的ReplicaSet
并逐步替换掉旧的ReplicaSet
。revisionHistoryLimit
用于控制保留多少个历史的ReplicaSet
,这样你可以在需要时将应用程序回滚到之前的版本。 -
默认值: 如果没有显式设置这个字段,Kubernetes 默认会保留 10 个历史
ReplicaSet
。 -
指针: 这个字段是一个指针,意味着可以将其设置为
0
(表示不保留任何历史ReplicaSet
),或者将其留空以使用默认值 10
-
revisionHistoryLimit: 5
二、Deployment 的主要功能
-
滚动更新(Rolling Update):允许逐步替换旧版本的 Pod,以便在不停止服务的情况下部署新的版本。
-
回滚(Rollback):支持回滚到先前的版本,以便在新版本出现问题时快速恢复。
-
副本管理(Replica Management):自动创建、删除或更新 Pod 副本以保持所需的副本数量。
-
声明式配置:通过 YAML 文件定义 Pod 的期望状态,Kubernetes 会自动确保实际状态符合期望。
三、常用命令
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
标签:kubectl,app,Deployment,nginx,deployment,Pod From: https://www.cnblogs.com/hxqwe/p/18374427