Files
kuboard-press/t/cka/daily/006.md
2020-12-24 13:57:19 +08:00

202 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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
```
也可以用以下yamlcka-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/>