202 lines
5.6 KiB
Markdown
202 lines
5.6 KiB
Markdown
---
|
||
vssueId: 170
|
||
# layout: StepLayout
|
||
sharingTitle: CKA备考打卡 - 每日一题 - Day 6
|
||
description: CKA备考打卡 - 每日一题 - Day 6
|
||
meta:
|
||
- name: keywords
|
||
content: Kubernetes,K8S,CKA,Certified Kubernetes Administrator
|
||
---
|
||
|
||
# CKA每日一题 --- Day 6
|
||
|
||
<AdSenseTitle/>
|
||
|
||
::: tip 考题
|
||
|
||
通过命令行,创建1个deployment,副本数为3,镜像为 `nginx:latest`。然后滚动升 级到 `nginx:1.9.1`,再回滚到原来的版本
|
||
|
||
要求:Deployment的名称为cka-1125,贴出用到的相关命令。
|
||
|
||
最好附带创建的Deployment完整yaml,以及和升级回滚有关的命令。
|
||
|
||
:::
|
||
|
||
<b-button v-b-toggle.collapse-join-error variant="danger" size="sm" style="margin-top: 1rem;" v-on:click="$sendGaEvent('cka-daily', 'cka-daily', 'CKA每日一题006')">答案及解析</b-button>
|
||
<b-collapse id="collapse-join-error" class="mt-2">
|
||
<b-card style="background-color: rgb(254, 240, 240); border: solid 1px #F56C6C;">
|
||
|
||
|
||
|
||
## 答案
|
||
|
||
先创建deployment,可以用命令创建:
|
||
|
||
```
|
||
kubectl run cka-1125 --image=nginx --replicas=3
|
||
```
|
||
|
||
也可以用以下yaml:cka-1125.yaml创建
|
||
|
||
```
|
||
apiVersion: apps/v1
|
||
kind: Deployment
|
||
metadata:
|
||
labels:
|
||
app: cka-1125
|
||
name: cka-1125
|
||
spec:
|
||
replicas: 3
|
||
selector:
|
||
matchLabels:
|
||
app: cka-1125
|
||
template:
|
||
metadata:
|
||
labels:
|
||
app: cka-1125
|
||
spec:
|
||
containers:
|
||
- image: nginx
|
||
name: cka-1125
|
||
```
|
||
|
||
创建:
|
||
|
||
```
|
||
kubectl apply -f cka-1125.yaml
|
||
```
|
||
|
||
升级:
|
||
|
||
```
|
||
kubectl set image deploy/cka-1125 cka-1125=nginx:1.9.1 --record
|
||
deployment.extensions/cka-1125 image updated
|
||
```
|
||
|
||
回滚:
|
||
|
||
```
|
||
# 回滚到上一个版本
|
||
kubectl rollout undo deploy/cka-1125
|
||
# 回滚到指定版本
|
||
kubectl rollout undo deploy/cka-1125 --to-revision=2
|
||
```
|
||
|
||
## 解析
|
||
|
||
**官方中set image命令:**
|
||
[https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#set](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#set)
|
||
|
||
### set image命令
|
||
|
||
set image命令格式如下:
|
||
|
||
```
|
||
kubectl set image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N [--record]
|
||
```
|
||
|
||
--record指定,在annotation中记录当前的kubectl命令。如果设置为false,则不记录命令。如果设置为true,则记录命令。默认为false。
|
||
|
||
```
|
||
[root@liabio test]# kubectl set image deploy/cka-1125 cka-1125=nginx:1.9.1 --record
|
||
deployment.extensions/cka-1125 image updated
|
||
[root@liabio test]#
|
||
[root@liabio test]# kubectl rollout history deploy/cka-1125
|
||
deployment.extensions/cka-1125
|
||
REVISION CHANGE-CAUSE
|
||
3 <none>
|
||
4 kubectl set image deploy/cka-1125 cka-1125=nginx:1.9.1 --record=true
|
||
```
|
||
|
||
像上面这样,CHANGE-CAUSE中会有升级命令。
|
||
|
||
`set image`命令可以对:`pod (po), replicationcontroller (rc), deployment (deploy), daemonset (ds), replicaset (rs),statefulset(sts)`进行操作。
|
||
|
||
### roll命令
|
||
|
||
**roll命令官方文档:**
|
||
[https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#rollout](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#rollout)
|
||
|
||
可以管理`deployments、daemonsets、statefulsets`资源的回滚:
|
||
|
||
查询升级历史:
|
||
|
||
```
|
||
[root@liabio test]# kubectl rollout history deploy/cka-1125
|
||
deployment.extensions/cka-1125
|
||
REVISION CHANGE-CAUSE
|
||
1 <none>
|
||
2 <none>
|
||
```
|
||
|
||
查看指定版本的详细信息:
|
||
|
||
```
|
||
kubectl rollout history deploy/cka-1125 --revision=3 -o=yaml
|
||
```
|
||
|
||
回滚到上一个版本:
|
||
|
||
```
|
||
[root@liabio test]# kubectl rollout undo deploy/cka-1125
|
||
deployment.extensions/cka-1125 rolled back
|
||
```
|
||
|
||
或者回滚到指定版本:
|
||
|
||
```
|
||
[root@liabio test]# kubectl rollout undo deploy/cka-1125 --to-revision=3
|
||
deployment.extensions/cka-1125 rolled back
|
||
```
|
||
|
||
### 其他roll子命令
|
||
|
||
restart:资源将重新启动;
|
||
status:展示回滚状态;
|
||
resume:恢复被暂停的资源。控制器不会控制被暂停的资源。通过恢复资源,可以让控制器再次控制。resume仅对deployment支持。
|
||
pause:控制器不会控制被暂停的资源。使用`kubectl rollout resume`来恢复暂停的资源。当前,只有deployment支持被暂停。
|
||
|
||
### 滚动更新策略
|
||
|
||
**滚动更新文档:**
|
||
[https://kubernetes.io/docs/concepts/workloads/controllers/deployment/](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/)
|
||
|
||
中文文档: [滚动更新](/learning/k8s-intermediate/workload/wl-deployment/update.html)
|
||
|
||
```
|
||
minReadySeconds: 5
|
||
strategy:
|
||
type: RollingUpdate
|
||
rollingUpdate:
|
||
maxSurge: 1
|
||
maxUnavailable: 1
|
||
```
|
||
|
||
**minReadySeconds**
|
||
Kubernetes在等待设置的时间后才进行升级
|
||
如果没有设置该值,Kubernetes会假设该容器启动起来后就提供服务了
|
||
如果没有设置该值,在某些极端情况下可能会造成服务服务正常运行
|
||
|
||
**maxSurge**
|
||
|
||
控制滚动更新过程中副本总数超过DESIRED的上限。maxSurge可以是具体的整数,也可以是百分比,向上取整。maxSurge默认值为25%。
|
||
|
||
例如DESIRED为10,那么副本总数的最大值为roundUp(10 + 10*25%)=13,所以CURRENT为13。
|
||
|
||
**maxUnavaible**
|
||
控制滚动更新过程中,不可用副本占DESIRED的最大比例。maxUnavailable可以是具体的整数,也可以是百分之百,向下取整。默认值为25%。
|
||
|
||
例如DESIRED为10,那么可用的副本数至少要为 `10-roundDown(10*25%)=8`所以AVAILABLE为8。
|
||
|
||
**maxSurge越大,初始创建的新副本数量就越多;maxUnavailable越大,初始销毁的旧副本数目就越多。**
|
||
|
||
|
||
|
||
</b-card>
|
||
</b-collapse>
|
||
|
||
> CKA 考试每日一题系列,全部内容由 [我的小碗汤](https://mp.weixin.qq.com/s/5tYgb_eSzHz_TMsi0U32gw) 创作,本站仅做转载
|
||
|
||
|
||
<JoinCKACommunity/>
|