练习题-7
# 课后练习题-7
# 理论练习(开放性试题)
涵盖第 9 章的内容。
- 在低版本和高本版的 k8s 中,如何记录镜像变更信息?
答案
- 在低版本的 k8s 中,执行变更命令时,可以通过添加选项
--record
来记录变更信息。 - 在高版本的 k8s 中,执行变更命令之后,需要修改控制器的注释
kubernetes.io/change-cause=<变更原因>
来记录变更信息。
目前 k8s 不支持修改前置历史记录的变更信息,你必须在每次变更之后,立马修改注释。
没错,这次的理论就一题。
# 实操练习
涵盖第 8 章和第 9 章的内容。
- 创建一个 Deployment,要求如下:
- 名称为
deploy-seven
- 副本数为
2
- 配置滚动更新,Pod 的创建数量和删除数量都采用百分比
20%
- Pod 模板的镜像为
nginx:latest
,镜像下载策略为IfNotPresent
- 为 Pod 配置资源限制,CPU 使用上限为
400
个微核心,内存使用上限为800
MiB
- 名称为
- 修改这个 deployment 的副本数为
5
。 - 变更这个 deployment 的镜像为
nginx:1.9
,通过注释来记录变更信息,内容为"Update image to nginx:1.9"
。 - 列出这个 deployment 的历史镜像变更记录,然后查看记录 2 的详情。
- 变更这个 deployment 的镜像为
nginx:1.7.9
,通过注释来记录变更信息,内容为"Update image to nginx:1.7.9"
。 - 客户觉得还是第一版最好,请你将这个 deployment 的镜像回滚至记录 1。
答案分隔线
答案分隔线
答案分隔线
答案分隔线
答案分隔线
答案分隔线
答案分隔线
答案分隔线
答案分隔线
# 实操练习答案
# 1. 控制器deploy-seven
创建一个 Deployment,要求如下:
+ 控制器名称为deploy-seven
+ 副本数为2
+ 配置滚动更新,Pod 的创建数量和删除数量都采用百分比20%
+ Pod 模板的镜像为nginx:latest
,镜像下载策略为IfNotPresent
+ 容器名称为pod1
+ 为 Pod 配置资源限制,CPU 使用上限为400
个微核心,内存使用上限为800
MiB
快速生成一个 yaml 文件,然后使用 vim 对其进行编辑:
kubectl create deployment deploy-seven --image nginx:latest --dry-run=client -o yaml > deploy-seven.yaml
vim deploy-seven.yaml
1
2
3
2
3
修改之前:
# 旧
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: deploy-seven
name: deploy-seven
spec:
replicas: 1
selector:
matchLabels:
app: deploy-seven
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: deploy-seven
spec:
containers:
- image: nginx:latest
name: nginx
resources: {}
status: {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
修改之后:
# 新
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: deploy-seven
name: deploy-seven # 控制器名称
spec:
replicas: 2 # 副本数
selector:
matchLabels:
app: deploy-seven
strategy: # 滚动更新策略
rollingUpdate:
maxSurge: 20%
maxUnavailable: 20%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: deploy-seven
spec:
containers:
- image: nginx:latest # 镜像
imagePullPolicy: IfNotPresent # 镜像下载策略
name: pod1 # 容器名称
resources: # 资源限制
limits:
cpu: 400m
memory: 800Mi
status: {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
创建这个控制器:
kubectl apply -f deploy-seven.yaml
1

# 2. 修改这个 deployment 的副本数为5
。
kubectl scale deployment deploy-seven --replicas=5
1

# 3. 变更这个 deployment 的镜像为nginx:1.9
,通过注释来记录变更信息,内容为"Update image to nginx:1.9"
。
kubectl set image deployment deploy-seven pod1=nginx:1.9
kubectl annotate deployment deploy-seven kubernetes.io/change-cause="Update image to nginx:1.9"
1
2
2

# 4. 列出这个 deployment 的历史镜像变更记录,然后查看记录 2 的详情。
kubectl rollout history deployment deploy-seven
kubectl rollout history deployment deploy-seven --revision=2
1
2
2

# 5. 变更这个 deployment 的镜像为nginx:1.7.9
,通过注释来记录变更信息,内容为"Update image to nginx:1.7.9"
。
kubectl set image deployment deploy-seven pod1=nginx:1.7.9
kubectl annotate deployment deploy-seven kubernetes.io/change-cause="Update image to nginx:1.7.9"
kubectl rollout history deployment deploy-seven
1
2
3
4
2
3
4

# 6. 客户觉得还是第一版最好,请你将这个 deployment 的镜像回滚至记录 1。
kubectl rollout undo deployment deploy-seven --to-revision=1
1

编辑 (opens new window)