文章目录
一、资源调度
1.1 Labels and Selectors 标签和选择算符
Label是kubernetes系统中的一个重要概念。它的作用就是在资源上添加标识,用来对它们进行区分和选择。
Label的特点:
- 一个Label会以key/value键值对的形式附加到各种对象上,如Node、Pod、Service等等
- 一个资源对象可以定义任意数量的Label ,同一个Label也可以被添加到任意数量的资源对象上去
- Label通常在资源对象定义时确定,当然也可以在对象创建后动态添加或者删除
可以通过Label实现资源的多维度分组,以便灵活、方便地进行资源分配、调度、配置、部署等管理工作。
一些常用的Label 示例如下:
- 版本标签:“version”:“release”, “version”:“stable”…
- 环境标签:“environment”:“dev”,“environment”:“test”,“environment”:“pro”
- 架构标签:“tier”:“frontend”,“tier”:“backend”
标签定义完毕之后,还要考虑到标签的选择,这就要使用到Label Selector,即:
Label用于给某个资源对象定义标识
Label Selector用于查询和筛选拥有某些标签的资源对象
当前有两种Label Selector:
- 基于等式的Label Selector
name = slave: 选择所有包含Label中key="name"且value="slave"的对象
env != production: 选择所有包括Label中的key="env"且value不等于"production"的对象
- 基于集合的Label Selector
name in (master, slave): 选择所有包含Label中的key="name"且value="master"或"slave"的对象
name not in (frontend): 选择所有包含Label中的key=“name"且value不等于"frontend"的对象
标签的选择条件可以使用多个,此时将多个Label Selector进行组合,使用逗号”,"进行分隔即可。
例如:
name=slave,env!=production
name not in (frontend),env!=production
1.命令方式
# 为pod资源打标签
[root@master ~]# kubectl label pod nginx-pod version=1.0 -n dev
pod/nginx-pod labeled
# 为pod资源更新标签
[root@master ~]# kubectl label pod nginx-pod version=2.0 -n dev --overwrite
pod/nginx-pod labeled
# 查看标签
[root@master ~]# kubectl get pod nginx-pod -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-pod 1/1 Running 0 10m version=2.0
# 筛选标签
[root@master ~]# kubectl get pod -n dev -l version=2.0 --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-pod 1/1 Running 0 17m version=2.0
[root@master ~]# kubectl get pod -n dev -l version!=2.0 --show-labels
No resources found in dev namespace.
#删除标签
[root@master ~]# kubectl label pod nginx-pod -n dev tier-
pod/nginx unlabeled
# 匹配单个值,查找 app=hello 的 pod
kubectl get po -A -l app=hello
# 匹配多个值
kubectl get po -A -l 'k8s-app in (metrics-server, kubernetes-dashboard)'
或
# 查找 version!=1 and app=nginx 的 pod 信息
kubectl get po -l version!=1,app=nginx
# 不等值 + 语句
kubectl get po -A -l version!=1,'app in (busybox, nginx)'
2.配置方式
配置文件:
在各类资源的 metadata.labels 中进行配置
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: dev
labels:
version: "3.0" #修改lebels中的 version为3.0
env: "test"
spec:
containers:
- image: nginx:latest
name: pod
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
然后就可以执行对应的更新命令了:kubectl apply -f pod-nginx.yaml
3.作用举例
- 组织和分类资源
通过为资源对象添加标签,可以轻松地组织和分类它们,使集群管理更清晰。
对于一组 Pod,可以使用标签来表示它们属于哪个应用、环境或部门。
# Pod定义
metadata:
labels:
app: frontend
environment: production
- 选择器用于筛选资源
选择器用于根据标签条件选择特定的资源对象,实现有目的的资源关联和操作。
在 Service 中使用选择器,确保只有具有特定标签的 Pod 接收到流量。
# Service定义
spec:
selector:
matchLabels:
app: frontend
- 滚动升级和版本管理
作用: 标签可以用于标识不同版本或阶段的应用程序,有助于管理滚动升级和多版本共存。
举例: 在 Deployment 中使用标签标识不同版本的应用程序。
# Deployment定义
spec:
template:
metadata:
labels:
app: myapp
version: v2
- 灵活性和自定义
作用: 标签的灵活性允许用户根据需求自定义标签,适应不同的业务场景和需求。
举例: 用户可以根据自己的需要为 Pod 添加自定义的标签,比如标识 Pod 的角色。
# Pod定义
metadata:
labels:
role: database
- 通信和关联
作用: 标签可用于建立资源对象之间的关联,特别是在 Service 中,确保与具有特定标签的 Pod 之间建立通信。
举例: 在 Service 中使用选择器,将流量路由到具有特定标签的 Pod。
# Service定义
spec:
selector:
matchLabels:
app: backend
1.2Pod控制器介绍
Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类:
- 自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就没有了,也不会重建
- 控制器创建的pod:kubernetes通过控制器创建的pod,这种pod删除了之后还会自动重建
在kubernetes中,有很多类型的pod控制器,每种都有自己的适合的场景,常见的有下面这些:
- ReplicationController:比较原始的pod控制器,已经被废弃,由ReplicaSet替代
- ReplicaSet:保证副本数量一直维持在期望值,并支持pod数量扩缩容,镜像版本升级
- Deployment:通过控制ReplicaSet来控制Pod,并支持滚动升级、回退版本
- Horizontal Pod Autoscaler:可以根据集群负载自动水平调整Pod的数量,实现削峰填谷
- DaemonSet:在集群中的指定Node上运行且仅运行一个副本,一般用于守护进程类的任务
- Job:它创建出来的pod只要完成任务就立即退出,不需要重启或重建,用于执行一次性任务
- Cronjob:它创建的Pod负责周期性任务控制,不需要持续后台运行
- StatefulSet:管理有状态应用
1.3Deployment(Deploy) 无状态服务
为了更好的解决服务编排的问题,kubernetes在V1.2版本开始,引入了Deployment控制器。值得一提的是,这种控制器并不直接管理pod,而是通过管理ReplicaSet来简介管理Pod,即:Deployment管理ReplicaSet,ReplicaSet管理Pod。所以Deployment比ReplicaSet功能更加强大。
Deployment主要功能有下面几个:
- 支持ReplicaSet的所有功能
- 支持发布的停止、继续
- 支持滚动升级和回滚版本
#创建名为 nginx-deploy 的Deployment,并使用Nginx 1.7.9的镜像:
[root@k8s-master deployments]# kubectl create deploy nginx-deploy --image=nginx:1.7.9
deployment.apps/nginx-deploy created
#获取所有Deployments
[root@k8s-master deployments]# kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 1/1 1 1 16s
#获取所有Deployments
[root@k8s-master deployments]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 1/1 1 1 27s
#获取所有ReplicaSets
[root@k8s-master deployments]# kubectl get replicaset
NAME DESIRED CURRENT READY AGE
nginx-deploy-78d8bf4fd7 1 1 1 61s
#与这个Deployment关联的ReplicaSet是 nginx-deploy-78d8bf4fd7
#nginx-deploy-78d8bf4fd7: 由 nginx-deploy Deployment创建的ReplicaSet,
#同样负责维护运行Nginx容器的Pod的期望数量。
#每个ReplicaSet都有一个唯一的标识符(在这里是 78d8bf4fd7)。
#kubectl get po
[root@k8s-master deployments]# kubectl get po
NAME READY STATUS RESTARTS AGE
nginx-deploy-78d8bf4fd7-xxzv4 1/1 Running 0 80s
#nginx-deploy-78d8bf4fd7-xxzv4: 是由 nginx-deploy-78d8bf4fd7 ReplicaSet创建的Pod的实例。
#每个Pod都有一个唯一的标识符(在这里是 xxzv4)。
#如果需要删除 nginx-deploy 的Deployment:
kubectl delete deployment nginx-deploy
#查看 pod 以及展示标签,可以看到是关联的那个 rs
[root@k8s-master deployments]# kubectl get po,rs,deploy --show-labels
NAME READY STATUS RESTARTS AGE LABELS
pod/nginx-deploy-78d8bf4fd7-xxzv4 1/1 Running 0 44m app=nginx-deploy,pod-template-hash=78d8bf4fd7
NAME DESIRED CURRENT READY AGE LABELS
replicaset.apps/nginx-deploy-78d8bf4fd7 1 1 1 44m app=nginx-deploy,pod-template-hash=78d8bf4fd7
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
deployment.apps/nginx-deploy 1/1 1 1 44m app=nginx-deploy
ReplicaSet(RS):
- DESIRED: 表示期望的副本数,这里是 1。
- CURRENT: 表示当前运行的副本数,这里是 1。
- READY: 表示就绪的副本数,这里是 1。
- LABELS: 表示ReplicaSet的标签,这里有两个标签 app=nginx-deploy 和 pod-template-hash=78d8bf4fd7。
Deployment(DEPLOY):
- READY: 表示就绪的副本数/期望的副本数,这里是 1/1。
- UP-TO-DATE: 表示Deployment中已部署的最新副本数,这里是 1。
- AVAILABLE: 表示Deployment中可用的副本数,这里是 1。
- LABELS: 表示Deployment的标签,这里有一个标签 app=nginx-deploy。
这些资源共同协作,通过Deployment和ReplicaSet确保所需数量的Pod在运行。当进行扩展、滚
动更新或者需要重新启动Pod时,Deployment和ReplicaSet会协同工作以维护系统的期望状态。Pod是最小的可部署单元,它们托管应用程序的实际实例
#获取名为 nginx-deploy 的 Deployment 的详细配置信息,以 YAML 格式输出 Deployment 的配置.
[root@k8s-master deployments]# kubectl get deploy nginx-deploy -o yaml
#以下是可能的输出示例,展示了 nginx-deploy Deployment 的详细配置信息:
4apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
creationTimestamp: "2024-01-08T07:30:29Z"
generation: 1
1.3.1创建deployment与配置文件解析
apiVersion: apps/v1 # 版本号
kind: ReplicaSet # 类型
metadata: # 元数据
name: # rs名称
namespace: # 所属命名空间
labels: #标签
controller: rs
spec: # 详情描述
replicas: 3 # 副本数量
selector: # 选择器,通过它指定该控制器管理哪些pod
matchLabels: # Labels匹配规则
app: nginx-pod
matchExpressions: # Expressions匹配规则
- {key: app, operator: In, values: [nginx-pod]}
template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.17.1
ports:
- containerPort: 80
[root@k8s-master deployments]# vi nginx-deploy.yaml
apiVersion: apps/v1 # 版本号
kind: Deployment #资源类型为Deployment
metadata: #原信息
labels: #标签
app: nginx-deploy # 具体的ky:value配置行驶
name: nginx-deploy #deployment的名字
namespace: default #所在命名空间
spec:
replicas: 1 # 期望副本数
revisionHistoryLimit: 10 #进行滚动更新后,保留的历史版本数
selector: # 选择器,用于找到匹配的RS
matchLabels: #按照标签匹配
app: nginx-deploy # 匹配的标签key /value
strategy: # 更新策略
rollingUpdate: #滚动更新配置
maxSurge: 25% # 进行滚动更新时,更新的个体数最多可以超过期望副本数的个数/比例
maxUnavailable: 25% # 进行滚动更新时,最大不可用比例更新比例,表示所在副本数中,最多可以有多少个不更新成功
type: RollingUpdate # 更新类型,采用滚动更新
template: #采用pod模版
metadata: #pod 的元信息
labels: #pod的标签
app: nginx-deploy
spec: #pod 期望信息
containers: #pod 的容器
- image: nginx:1.7.9 #镜像
imagePullPolicy: IfNotPresent #拉取策略
name: nginx #容器名称
restartPolicy: Always #重启策略
terminationGracePeriodSeconds: 30 #删除操作最多宽限多长时间
1.3.2 滚动更新
一般是取出一个或者多个服务器停止服务,执行更新,并重新将其投入使用。周而复始,直到集群中所有的实例都更新成新版本。
滚动更新是一种在Kubernetes中更新应用程序的策略,其中旧版本的Pod逐渐被新版本的Pod替代,以确保在整个更新过程中服务的可用性。这种更新策略有助于减小系统的冲击,保持应用程序的连续可用性,同时允许新版本逐步生效。
滚动更新的关键特点和优势:
- 逐步替代: 滚动更新通过逐步替代旧版本的Pod来进行,而不是立即替换所有Pod。这有助于减小系统在更新期间的波动,降低潜在的服务中断。
- 健康检查: 在替代旧Pod之前,Kubernetes会进行健康检查,确保新Pod已经启动并且处于健康状态。如果新Pod无法成功启动或者健康检查失败,滚动更新将会暂停并回滚到之前的版本。
- 自动回滚: 如果在滚动更新期间出现问题,Kubernetes能够自动回滚到之前的版本,确保系统的稳定性。
- 版本控制: 通过使用不同的版本号,您可以在Deployment中指定要部署的镜像版本,从而简化更新过程。
- 可配置性: 您可以通过调整滚动更新的配置参数,如更新的间隔、最大不可用Pod的数量等,来满足特定应用程序的需求。
#编辑deployments
[root@k8s-master deployments]# kubectl edit deploy nginx-deploy
deployment.apps/nginx-deploy edited
labels:
app: nginx-deploy
test: '123'
[root@k8s-master deployments]# kubectl get deploy --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
nginx-deploy 1/1 1 1 68m app=nginx-deploy,test=123
[root@k8s-master deployments]#kubectl describe deploy nginx-deploy
Events: <none>
没有更新过程意味着没有进行滚动更新
先增加副本数 (只有副本数多个才能滚动更新)
#编辑rs的副本数量,修改replicas: 3即可
[root@k8s-master deployments]# kubectl edit deploy nginx-deploy
deployment.apps/nginx-deploy edited
# 查看deployment
# UP-TO-DATE 最新版本的pod的数量
# AVAILABLE 当前可用的pod的数量
[root@k8s-master deployments]# kubectl get deploy nginx-deploy --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
nginx-deploy 3/3 3 3 78m app=nginx-deploy,test=123
#查看rs
#发现一个rs管理3个pod
[root@k8s-master deployments]# kubectl get rs --show-labels
NAME DESIRED CURRENT READY AGE LABELS
nginx-deploy-78d8bf4fd7 3 3 3 80m app=nginx-deploy,pod-template-hash=78d8bf4fd7
# 查看pod
[root@k8s-master deployments]# kubectl get po --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-deploy-78d8bf4fd7-m2d8g 1/1 Running 0 3m29s app=nginx-deploy,pod-template-hash=78d8bf4fd7
nginx-deploy-78d8bf4fd7-qr9dd 1/1 Running 0 3m29s app=nginx-deploy,pod-template-hash=78d8bf4fd7
nginx-deploy-78d8bf4fd7-xxzv4 1/1 Running 0 80m app=nginx-deploy,pod-template-hash=78d8bf4fd7
滚动更新
# 编辑rs的nginx版本 - image: nginx:1.9.1
[root@k8s-master deployments]# kubectl edit deploy nginx-deploy
# 查看deployment
# UP-TO-DATE 最新版本的pod的数量
# AVAILABLE 当前可用的pod的数量
[root@k8s-master deployments]# kubectl get deploy nginx-deploy --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
nginx-deploy 3/3 1 3 90m app=nginx-deploy,test=123
[root@k8s-master deployments]# kubectl get deploy nginx-deploy --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
nginx-deploy 3/3 1 3 90m app=nginx-deploy,test=123
[root@k8s-master deployments]# kubectl get deploy nginx-deploy --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
nginx-deploy 3/3 1 3 90m app=nginx-deploy,test=123
[root@k8s-master deployments]# kubectl get deploy nginx-deploy --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
nginx-deploy 3/3 2 3 90m app=nginx-deploy,test=123
[root@k8s-master deployments]# kubectl get deploy nginx-deploy --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
nginx-deploy 3/3 3 3 90m app=nginx-deploy,test=123
[root@k8s-master deployments]# kubectl get deploy nginx-deploy --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
nginx-deploy 3/3 3 3 90m app=nginx-deploy,test=123
#多打印几次发现最新版本的pod的数量 前几次是1后面变为2 再到3表示全部更新完成
#READY数量一直是3没有变化
#通过更新Deployment的镜像版本,Kubernetes将自动启动滚动更新
[root@k8s-master deployments]# kubectl set image deployment/nginx-deploy nginx=nginx:1.7.9
deployment.apps/nginx-deploy image updated
#查看滚动更新的状态
[root@k8s-master deployments]# kubectl desribe deploy nginx-deploy
#打印了执行Kubernetes 部署(Deployment)的滚动更新 的过程
#以下显示了在更新过程中进行的缩放活动
# Scaled up replica set nginx-deploy-754898b577 to 1 运行一个新的rs
#Scaled down replica set nginx-deploy-78d8bf4fd7 to 2 将旧的rs 改为 2 就是减掉一个了
#Scaled up replica set nginx-deploy-754898b577 to 2 新的rs更细成两个
#Scaled down replica set nginx-deploy-78d8bf4fd7 to 1 将旧的rs 改为1个
#Scaled up replica set nginx-deploy-754898b577 to 3 最后把 新的更新成3个
#Scaled down replica set nginx-deploy-78d8bf4fd7 to 0 最后把旧的变为0个
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 19m deployment-controller Scaled up replica set nginx-deploy-78d8bf4fd7 to 3
Normal ScalingReplicaSet 7m56s deployment-controller Scaled up replica set nginx-deploy-754898b577 to 1
Normal ScalingReplicaSet 6m44s deployment-controller Scaled down replica set nginx-deploy-78d8bf4fd7 to 2
Normal ScalingReplicaSet 6m44s deployment-controller Scaled up replica set nginx-deploy-754898b577 to 2
Normal ScalingReplicaSet 6m43s deployment-controller Scaled down replica set nginx-deploy-78d8bf4fd7 to 1
Normal ScalingReplicaSet 6m43s deployment-controller Scaled up replica set nginx-deploy-754898b577 to 3
Normal ScalingReplicaSet 6m42s deployment-controller Scaled down replica set nginx-deploy-78d8bf4fd7 to 0
Normal ScalingReplicaSet 106s (x2 over 97m) deployment-controller Scaled up replica set nginx-deploy-78d8bf4fd7 to 1
Normal ScalingReplicaSet 104s deployment-controller Scaled down replica set nginx-deploy-754898b577 to 2
Normal ScalingReplicaSet 104s deployment-controller Scaled up replica set nginx-deploy-78d8bf4fd7 to 2
Normal ScalingReplicaSet 102s (x3 over 103s) deployment-controller (combined from similar events): Scaled down replica set nginx-deploy-754898b57
逐步替代: 滚动更新通过逐步替代旧版本的Pod来进行,而不是立即替换所有Pod。这有助于减小系统在更新期间的波动,降低潜在的服务中断。
多个滚动更新并行
假设当前有 5 个 nginx:1.7.9 版本,你想将版本更新为 1.9.1,当更新成功第三个以后,你马上又将期望更新的版本改为 1.9.2,那么此时会立马删除之前的三个,并且立马开启更新 1.9.2 的任务
更新失败
# 1、镜像更新到1.161
[root@k8s-master deployments]# kubectl set image deployment/nginx-deploy nginx=nginx:1.161
deployment.apps/nginx-deploy image updated
# 2、更新失败(镜像拉取失败)
[root@k8s-master deployments]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deploy-754898b577-7zhq4 1/1 Running 0 15h
nginx-deploy-754898b577-bcqsh 1/1 Running 0 15h
nginx-deploy-754898b577-f2r45 1/1 Running 0 15h
nginx-deploy-7fcf48c86f-xp6rk 0/1 ContainerCreating 0 6s
说明: Deployment 控制器自动停止有问题的上线过程,并停止对新的 ReplicaSet 扩容。 这行为取决于所指定的 rollingUpdate参数具体为 maxUnavailable默认情况下,Kubernetes 将此值设置为 25%。
# 3、查看Deployment详细信息:
[root@k8s-master deployments]# kubectl describe deployment nginx-deploy
# 4、检查 Deployment 修订历史
[root@k8s-master deployments]# kubectl rollout history deployment nginx-deploy
deployment支持两种更新策略:重建更新和滚动更新,可以通过strategy指定策略类型,支持两个属性:
1.重建更新.
编辑nginx-deploy,在spec节点下添加更新策略
spec:
strategy: # 指定新的Pod替换旧的Pod的策略, 支持两个属性:
type: Recreate # 重建更新 在创建出新的Pod之前会先杀掉所有已存在的Pod
2.滚动更新
编辑nginx-deploy,在spec节点下添加更新策略
spec:
strategy: # 指定新的Pod替换旧的Pod的策略, 支持两个属性:
type: RollingUpdate # 滚动更新策略 滚动更新,就是杀死一部分,就启动一部分,在更新过程中,存在两个版本Pod
rollingUpdate: #当type为RollingUpdate时生效,用于为RollingUpdate设置参数,支持两个属性:
maxSurge: 25% #用来指定在升级过程中不可用Pod的最大数量,默认为25%。
maxUnavailable: 25% #用来指定在升级过程中可以超过期望的Pod的最大数量,默认为25%。
1.3.3 回滚版本
deployment支持版本升级过程中的暂停、继续功能以及版本回退等诸多功能,下面具体来看.
kubectl rollout: 版本升级相关功能,支持下面的选项:
- status 显示当前升级状态
- history 显示 升级历史记录
- pause 暂停版本升级过程
- resume 继续已经暂停的版本升级过程
- restart 重启版本升级过程
- undo 回滚到上一级版本(可以使用–to-revision回滚到指定版本)
# 查看当前升级版本的状态
[root@k8s-master deployments]# kubectl rollout status deploy nginx-deploy
deployment "nginx-deploy" successfully rolled out
# 查看升级历史记录
[root@k8s-master deployments]# kubectl rollout history deploy nginx-deploy
deployment.apps/nginx-deploy
REVISION CHANGE-CAUSE
2 <none>
3 <none>
# 可以发现有三次版本记录,说明完成过两次升级
# 版本回滚
# 这里直接使用--to-revision=1回滚到了1版本, 如果省略这个选项,就是回退到上个版本,就是2版本
[root@k8s-master deployments]# kubectl rollout undo deployment nginx-deploy --to-revision=2
deployment.apps/nginx-deploy rolled back
# 查看发现,通过nginx镜像版本可以发现到了第一版 nginx:1.9.1
[root@k8s-master deployments]# kubectl get deploy -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-deploy 3/3 3 3 146m nginx nginx:1.9.1 app=nginx-deploy
# 查看rs,发现第一个rs中有3个pod运行
# 其实deployment之所以可是实现版本的回滚,就是通过记录下历史rs来实现的,
# 一旦想回滚到哪个版本,只需要将当前版本pod数量降为0,然后将回滚版本的pod提升为目标数量就可以了
[root@k8s-master deployments]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deploy-754898b577 3 3 3 57m
nginx-deploy-78d8bf4fd7 0 0 0 147m
#查看pod 都运行起来了
[root@k8s-master deployments]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deploy-754898b577-7zhq4 1/1 Running 0 15h
nginx-deploy-754898b577-bcqsh 1/1 Running 0 15h
nginx-deploy-754898b577-f2r45 1/1 Running 0 15h
# 回滚到之前的修订版本
kubectl rollout undo deployment nginx-deploy
1.3.3 扩容缩容
# 扩容5个副本
[root@k8s-master deployments]# kubectl scale deploy nginx-deploy --replicas=5
deployment.apps/nginx-deploy scaled
# 查看deployment 已经扩容为5
[root@k8s-master deployments]# kubectl get deploy nginx-deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 5/5 5 5 18h
# 查看pod
[root@k8s-master deployments]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deploy-754898b577-7zhq4 1/1 Running 0 15h
nginx-deploy-754898b577-94zvp 1/1 Running 0 62s
nginx-deploy-754898b577-bcqsh 1/1 Running 0 15h
nginx-deploy-754898b577-f2r45 1/1 Running 0 15h
nginx-deploy-754898b577-nbhds 1/1 Running 0 62s
#缩容3个副本
[root@k8s-master deployments]# kubectl scale deployment --replicas=3 nginx-deploy
deployment.apps/nginx-deploy scaled
#或者修改配置文件
# 编辑deployment的副本数量,修改spec:replicas: 3即可
[root@k8s-master01 ~]# kubectl edit deploy nginx-deploy
deployment.apps/nginx-deploy edited
# 查看deployment
[root@k8s-master deployments]# kubectl get deploy nginx-deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 3/3 3 3 18h
# 查看pod
[root@k8s-master deployments]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deploy-754898b577-7zhq4 1/1 Running 0 15h
nginx-deploy-754898b577-bcqsh 1/1 Running 0 15h
nginx-deploy-754898b577-f2r45 1/1 Running 0 15h