原文链接:Practice Enough With These 150 Questions for the CKAD Exam。

Medium 上的一篇文章记录了 150 个 Kubernetes 的练习,自己练习了一遍,在原文基础上加了一些自己实践过程中的的提示,希望对需要熟悉 K8S 操作的同学有所帮助。本篇介绍 Pod 设计相关的 练习。

三.Pod 设计篇

这是原文中的第三部分,主要关于 Pod 操作的,主要有下面一些内容:

  • 关于 标签 Label、选择器 selector 和 注解 Annotations 的使用
  • 了解 Deployment 如何进行滚动升级和回滚
  • 理解 Job 和 CronJobs

36. 查看 Pod,展示标签信息

$ kubectl get pods --show-labels
NAME                         READY   STATUS      RESTARTS   AGE   LABELS
busybox                      0/3     Completed   0          17h   run=busybox

37. 创建五个 Nginx 的 Pod,两个带 env=prod 标签,三个带 env=dev 标签

$ kubectl run nginx-dev1 --image=nginx --restart=Never --labels=env=dev
kubectl run nginx-dev2 --image=nginx --restart=Never --labels=env=dev
kubectl run nginx-dev3 --image=nginx --restart=Never --labels=env=dev
kubectl run nginx-prod1 --image=nginx --restart=Never --labels=env=prod
kubectl run nginx-prod2 --image=nginx --restart=Never --labels=env=prod
pod/nginx-dev1 created
pod/nginx-dev2 created
pod/nginx-dev3 created
pod/nginx-prod1 created
pod/nginx-prod2 created

38. 检查上面 Pod 的创建情况

$ kubectl get pods --show-labels
NAME                         READY   STATUS      RESTARTS   AGE   LABELS
nginx-dev1                   1/1     Running     0          87s   env=dev
nginx-dev2                   1/1     Running     0          87s   env=dev
nginx-dev3                   1/1     Running     0          87s   env=dev
nginx-prod1                  1/1     Running     0          87s   env=prod
nginx-prod2                  1/1     Running     0          87s   env=prod

39. 查看带有标签 env=dev 的 Pod

$ kubectl get pods -l env=dev
NAME         READY   STATUS    RESTARTS   AGE
nginx-dev1   1/1     Running   0          3m6s
nginx-dev2   1/1     Running   0          3m6s
nginx-dev3   1/1     Running   0          3m6s

40. 查看带有标签 env=dev 的 Pod 并展示其标签

$ kubectl get pods -l env=dev --show-labels
NAME         READY   STATUS    RESTARTS   AGE     LABELS
nginx-dev1   1/1     Running   0          3m42s   env=dev
nginx-dev2   1/1     Running   0          3m42s   env=dev
nginx-dev3   1/1     Running   0          3m42s   env=dev

41. 查看带有标签 env=prod 的 Pod

$ kubectl get pods -l env=prod
NAME          READY   STATUS    RESTARTS   AGE
nginx-prod1   1/1     Running   0          6m21s
nginx-prod2   1/1     Running   0          6m21s

42. 查看带有标签 env=prod 的 Pod 并展示其标签

$ kubectl get pods -l env=prod --show-labels
NAME          READY   STATUS    RESTARTS   AGE     LABELS
nginx-prod1   1/1     Running   0          6m53s   env=prod
nginx-prod2   1/1     Running   0          6m53s   env=prod

43. 查看 Pod,并显示器其 env 标签

这时没有对应标签的 Pod 展示标签值为空

$ kubectl get pods -L env
NAME                         READY   STATUS      RESTARTS   AGE    ENVmy-app-v1-c9b7f9985-xnwkt    1/1     Running     0          11d
my-app-v2-77fc8c9499-9nxv2   1/1     Running     0          11d
nginx                        1/1     Running     0          18h
nginx-dev1                   1/1     Running     0          7m7s   dev
nginx-dev2                   1/1     Running     0          7m7s   dev
nginx-dev3                   1/1     Running     0          7m7s   dev
nginx-prod1                  1/1     Running     0          7m7s   prod
nginx-prod2                  1/1     Running     0          7m7s   prod

44. 查看标签为 env 且值为 prod 或者 dev 的 Pod

$ kubectl get pods -l 'env in (dev,prod)'
NAME          READY   STATUS    RESTARTS   AGE
nginx-dev1    1/1     Running   0          9m3s
nginx-dev2    1/1     Running   0          9m3s
nginx-dev3    1/1     Running   0          9m3s
nginx-prod1   1/1     Running   0          9m3s
nginx-prod2   1/1     Running   0          9m3s

45. 查看标签为 env 且值为 prod 或者 dev 的 Pod,并展示其标签

$ kubectl get pods -l 'env in (dev,prod)' --show-labels
NAME          READY   STATUS    RESTARTS   AGE     LABELS
nginx-dev1    1/1     Running   0          9m21s   env=dev
nginx-dev2    1/1     Running   0          9m21s   env=dev
nginx-dev3    1/1     Running   0          9m21s   env=dev
nginx-prod1   1/1     Running   0          9m21s   env=prod
nginx-prod2   1/1     Running   0          9m21s   env=prod

46. 修改某个 Pod 的标签为 env=uat,查看修改结果

$ kubectl label pod nginx-dev3 env=uat --overwrite
pod/nginx-dev3 labeled$ kubectl get pods --show-labels
NAME                         READY   STATUS      RESTARTS   AGE   LABELS
nginx-dev1                   1/1     Running     0          11m   env=dev
nginx-dev2                   1/1     Running     0          11m   env=dev
nginx-dev3                   1/1     Running     0          11m   env=uat
nginx-prod1                  1/1     Running     0          11m   env=prod
nginx-prod2                  1/1     Running     0          11m   env=prod

47. 删除 Pod 的标签并查看修改结果

$ kubectl label pod nginx-dev{1..3} env-
pod/nginx-dev1 labeled
pod/nginx-dev2 labeled
pod/nginx-dev3 labeled# ubuntu @ VM-0-4-ubuntu in ~ [9:33:08]
$ kubectl label pod nginx-prod{1..2} env-
pod/nginx-prod1 labeled
pod/nginx-prod2 labeled$ kubectl get po --show-labels
NAME                         READY   STATUS      RESTARTS   AGE   LABELS
nginx-dev1                   1/1     Running     0          13m   <none>
nginx-dev2                   1/1     Running     0          13m   <none>
nginx-dev3                   1/1     Running     0          13m   <none>
nginx-prod1                  1/1     Running     0          13m   <none>
nginx-prod2                  1/1     Running     0          13m   <none>

48. 给多个 Pod 添加 app=nginx 标签并查看结果

$ kubectl label pod nginx-dev{1..3} app=nginx
pod/nginx-dev1 labeled
pod/nginx-dev2 labeled
pod/nginx-dev3 labeled# ubuntu @ VM-0-4-ubuntu in ~ [9:34:29]
$ kubectl label pod nginx-prod{1..2} app=nginx
pod/nginx-prod1 labeled
pod/nginx-prod2 labeled# ubuntu @ VM-0-4-ubuntu in ~ [9:34:34]
$ kubectl get po --show-labels
NAME                         READY   STATUS      RESTARTS   AGE   LABELS
nginx-dev1                   1/1     Running     0          14m   app=nginx
nginx-dev2                   1/1     Running     0          14m   app=nginx
nginx-dev3                   1/1     Running     0          14m   app=nginx
nginx-prod1                  1/1     Running     0          14m   app=nginx
nginx-prod2                  1/1     Running     0          14m   app=nginx

49. 获取所有 node 节点并展示其信息

$ kubectl get nodes --show-labels
NAME            STATUS   ROLES    AGE   VERSION   LABELS
vm-0-2-ubuntu   Ready    <none>   19d   v1.18.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=vm-0-2-ubuntu,kubernetes.io/os=linux
vm-0-4-ubuntu   Ready    master   19d   v1.18.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=vm-0-4-ubuntu,kubernetes.io/os=linux,node-role.kubernetes.io/master=

50. 为 Node 打 nodeName=nginxNode 标签

$ kubectl label node vm-0-2-ubuntu nodeName=nginxnode
node/vm-0-2-ubuntu labeled

51. 创建 Pod,打标签 run=nginx,使用 nodeSelector 将 Pod 部署到带有 nodeName=nginxnode 的节点

  • 创建用的 yaml 文件
apiVersion: v1
kind: Pod
metadata:creationTimestamp: null# 达标欧倩labels:run: nginxname: nginx
spec:# 选择节点,nodeSelector:nodeName: nginxnodecontainers:- image: nginxname: nginxresources: {}dnsPolicy: ClusterFirstrestartPolicy: Never
status: {}
  • 创建 Pod
kubectl create -f pod.yaml

52. 查看 Pod 的 Node-Selector

$ kubectl describe po nginx | grep Node-Selectors
Node-Selectors:  nodeName=nginxnode

53.查看刚创建的 Nginx Pod 的标签

$ kubectl describe po nginx | grep Labels
Labels:       run=nginx

54. 为 Pod 添加注解 name=webapp

$ kubectl annotate pod nginx-dev{1..3} name=webapp
pod/nginx-dev1 annotated
pod/nginx-dev2 annotated
pod/nginx-dev3 annotated$ kubectl annotate pod nginx-prod{1..2} name=webapp
pod/nginx-prod1 annotated
pod/nginx-prod2 annotated

55. 查看 Pod 的注解

$ kubectl describe po nginx-dev{1..3} | grep -i annotations
Annotations:  name: webapp
Annotations:  name: webapp
Annotations:  name: webapp$ kubectl describe po nginx-prod{1..2} | grep -i annotations
Annotations: name: webapp
Annotations: name: webapp

56. 移除 Pod 的注解,查看结果

# ubuntu @ VM-0-4-ubuntu in ~ [9:52:15]
$ kubectl annotate pod nginx-dev{1..3} name-
pod/nginx-dev1 annotated
pod/nginx-dev2 annotated
pod/nginx-dev3 annotated# ubuntu @ VM-0-4-ubuntu in ~ [9:53:34]
$ kubectl annotate pod nginx-prod{1..2} name-
pod/nginx-prod1 annotated
pod/nginx-prod2 annotated$ kubectl describe po nginx-dev{1..3} | grep -i annotations

57. 删除所有 Pod

kubectl delete po --all

58. 创建有 5 个 Nginx 副本的名为 webapp 的 Deployment

  • yaml 文件
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: webappname: webapp
spec:replicas: 5selector:matchLabels:app: webappstrategy: {}template:metadata:creationTimestamp: nulllabels:app: webappspec:containers:- image: nginxname: nginxresources: {}
status: {}
  • 创建 Deployment
$ kubectl create -f webapp.yaml
deployment.apps/webapp created

59. 查看上面创建的 Deployment

$ kubectl get deploy webapp --show-labels
NAME     READY   UP-TO-DATE   AVAILABLE   AGE    LABELS
webapp   5/5     5            5           113s   app=webapp

60. 获取刚创建的 Deployment 的 yaml 文件

$ kubectl get deploy webapp -o yaml

61. 查看 Deployment 的所有 Pod

$ kubectl get deploy webapp --show-labels
NAME     READY   UP-TO-DATE   AVAILABLE   AGE     LABELS
webapp   5/5     5            5           3m13s   app=webapp# ubuntu @ VM-0-4-ubuntu in ~ [10:12:16]
$ kubectl get pods -l app=webapp
NAME                      READY   STATUS    RESTARTS   AGE
webapp-59d9889648-b74bs   1/1     Running   0          3m17s
webapp-59d9889648-dk2w6   1/1     Running   0          3m17s
webapp-59d9889648-mm5v8   1/1     Running   0          3m17s
webapp-59d9889648-q4w5d   1/1     Running   0          3m16s
webapp-59d9889648-wq9vc   1/1     Running   0          3m16s

62. 水平扩展 webapp Deployment 的 Pod 数量到 20 个

$ kubectl scale deploy webapp --replicas=20
deployment.apps/webapp scaled$ kubectl get po -l app=webapp
NAME                      READY   STATUS    RESTARTS   AGE
webapp-59d9889648-2bzwh   1/1     Running   0          49s
webapp-59d9889648-6mgxk   1/1     Running   0          49s
webapp-59d9889648-8mk7c   1/1     Running   0          49s
webapp-59d9889648-b74bs   1/1     Running   0          5m35s
webapp-59d9889648-c5kwq   1/1     Running   0          49s
webapp-59d9889648-d98t6   1/1     Running   0          49s
webapp-59d9889648-dk2w6   1/1     Running   0          5m35s
webapp-59d9889648-fkdnk   1/1     Running   0          49s
webapp-59d9889648-lvqgj   1/1     Running   0          49s
webapp-59d9889648-mm5v8   1/1     Running   0          5m35s
webapp-59d9889648-mvtxb   1/1     Running   0          49s
webapp-59d9889648-pkmt6   1/1     Running   0          49s
webapp-59d9889648-q4w5d   1/1     Running   0          5m34s
webapp-59d9889648-qq245   1/1     Running   0          49s
webapp-59d9889648-skrbq   1/1     Running   0          49s
webapp-59d9889648-vgpdt   1/1     Running   0          49s
webapp-59d9889648-vncbd   1/1     Running   0          49s
webapp-59d9889648-wp48w   1/1     Running   0          49s
webapp-59d9889648-wq9vc   1/1     Running   0          5m34s
webapp-59d9889648-xc8g6   1/1     Running   0          49s

63. 查看 Deployment 的部署状态

$ kubectl rollout status deploy webapp
deployment "webapp" successfully rolled out

64. 查看 webapp Deployment 的 replicaset

$ kubectl get rs -l app=webapp
NAME                DESIRED   CURRENT   READY   AGE
webapp-59d9889648   20        20        20      6m45s

65. 获取 webapp Deployment 下 Pod 和 ReplicaSet 的 yaml 文件

kubectl get rs -l app=webapp -o yaml
kubectl get po -l app=webapp -o yaml

66. 删除 webapp Deployment 并查看 Pod 的删除情况

kubectl delete deploy webapp
kubectl get po -l app=webapp -w

67. 创建 webapp Deployment,指定镜像版本和端口

  • yaml 文件
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: webappname: webapp
spec:replicas: 1selector:matchLabels:app: webappstrategy: {}template:metadata:creationTimestamp: nulllabels:app: webappspec:containers:- image: nginx:1.17.1name: nginxports:- containerPort: 80resources: {}
status: {}
  • 创建 Deployment
$ kubectl create -f webapp.yaml
deployment.apps/webapp created

68. 更新 Deployment 的镜像版本并查看

$ kubectl set image deploy/webapp nginx=nginx:1.17.4
deployment.apps/webapp image updated# ubuntu @ VM-0-4-ubuntu in ~ [10:34:56]
$ kubectl describe deploy webapp | grep ImageImage:        nginx:1.17.4

69. 检查更新历史并查看 Deployment、ReplicaSet、Pod 的信息

$ kubectl rollout history deploy webapp
deployment.apps/webapp
REVISION  CHANGE-CAUSE
1         <none>
2         <none>$ kubectl get deploy webapp --show-labels
NAME     READY   UP-TO-DATE   AVAILABLE   AGE    LABELS
webapp   1/1     1            1           103s   app=webapp$ kubectl get rs -l app=webapp
NAME                DESIRED   CURRENT   READY   AGE
webapp-67f449866c   0         0         0       108s
webapp-6894d66768   1         1         1       59s$ kubectl get po -l app=webapp
NAME                      READY   STATUS    RESTARTS   AGE
webapp-6894d66768-pvrvv   1/1     Running   0          63s

70. 撤销对 Deployment 镜像版本的更改,检查回滚结果

$ kubectl rollout undo deploy webapp
deployment.apps/webapp rolled back$ kubectl describe deploy webapp | grep ImageImage:        nginx:1.17.1

71. 设置镜像版本为 1.16.1 并检查升级记录

$ kubectl set image deploy/webapp nginx=nginx:1.16.1
deployment.apps/webapp image updated# ubuntu @ VM-0-4-ubuntu in ~ [10:38:10]
$ kubectl describe deploy webapp | grep ImageImage:        nginx:1.16.1# ubuntu @ VM-0-4-ubuntu in ~ [10:38:14]
$ kubectl rollout history deploy webapp
deployment.apps/webapp
REVISION  CHANGE-CAUSE
2         <none>
3         <none>
4         <none>

72. 将 Deployment 中镜像版本更新至之前的 1.17.1 版本

$ kubectl rollout undo deploy webapp --to-revision=3
deployment.apps/webapp rolled back$ kubectl describe deploy webapp | grep ImageImage:        nginx:1.17.1$ kubectl rollout status deploy webapp
deployment "webapp" successfully rolled out

73. 将 Deployment 中镜像版本更新至错误的版本 1.100 并检查相关信息

$ kubectl set image deploy/webapp nginx=nginx:1.100
deployment.apps/webapp image updated$ kubectl rollout status deploy webapp
Waiting for deployment "webapp" rollout to finish: 1 old replicas are pending termination...$ kubectl get pods
NAME                         READY   STATUS             RESTARTS   AGEwebapp-67f449866c-87cgc      1/1     Running            0          108s
webapp-6b684475c5-qs2wq      0/1     ImagePullBackOff   0          22s

74. 撤销之前的错误操作并确认 Deployment 、Pod 已恢复正常

$ kubectl rollout undo deploy webapp
deployment.apps/webapp rolled back# ubuntu @ VM-0-4-ubuntu in ~ [10:42:58]
$ kubectl rollout status deploy webapp
deployment "webapp" successfully rolled out# ubuntu @ VM-0-4-ubuntu in ~ [10:43:03]
$ kubectl get pods
NAME                         READY   STATUS    RESTARTS   AGE
kubia-59d857b444-sfvxc       1/1     Running   0          36m
kubia-59d857b444-v72jc       1/1     Running   0          36m
kubia-59d857b444-zflsz       1/1     Running   0          36m
my-app-v1-c9b7f9985-qrwx6    1/1     Running   0          36m
my-app-v2-77fc8c9499-9wjcp   1/1     Running   0          36m
webapp-67f449866c-87cgc      1/1     Running   0          3m39s

75. 查看指定版本的更新记录

$ kubectl rollout history deploy webapp --revision=7
deployment.apps/webapp with revision #7
Pod Template:Labels:    app=webapppod-template-hash=67f449866cContainers:nginx:Image: nginx:1.17.1Port:   80/TCPHost Port:    0/TCPEnvironment:   <none>Mounts: <none>

76. 暂停 Deployment 的部署

$ kubectl rollout pause deploy webapp
deployment.apps/webapp paused

77. 更新 Nginx 至最新版本,查看更新历史

因为已经暂停了,所以不会有任何的变化。

$ kubectl set image deploy/webapp nginx=nginx:latest$ kubectl rollout history deploy webapp
deployment.apps/webapp
REVISION  CHANGE-CAUSE
2         <none>
4         <none>
6         <none>
7         <none>

78. 恢复 Deployment 的部署

kubectl rollout resume deploy webapp

79. 检查滚动历史并确认其新版本

$ kubectl rollout history deploy webapp
deployment.apps/webapp
REVISION  CHANGE-CAUSE
2         <none>
4         <none>
6         <none>
7         <none>
8         <none># ubuntu @ VM-0-4-ubuntu in ~ [10:54:15]
$ kubectl rollout history deploy webapp --revision=8
deployment.apps/webapp with revision #8
Pod Template:Labels:    app=webapppod-template-hash=5f5bf685dbContainers:nginx:Image: nginx:latestPort:   80/TCPHost Port:    0/TCPEnvironment:   <none>Mounts: <none>Volumes:    <none>

80. 为 Deployment 设置自动伸缩,最小数值为 10,最大数为 20 以及CPU 使用率为 85%,验证 hpa 和 副本的创建

可以看到 Pod 数量从 1 变为 10。

$ kubectl autoscale deploy webapp --min=10 --max=20 --cpu-percent=85
horizontalpodautoscaler.autoscaling/webapp autoscaled# ubuntu @ VM-0-4-ubuntu in ~ [10:57:13]
$ kubectl get hpa
NAME     REFERENCE           TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
webapp   Deployment/webapp   <unknown>/85%   10        20        0          6s$ kubectl get pod -l app=webapp
NAME                      READY   STATUS    RESTARTS   AGE
webapp-5f5bf685db-dqh8t   1/1     Running   0          5m17s$ kubectl get pod -l app=webapp
NAME                      READY   STATUS    RESTARTS   AGE
webapp-5f5bf685db-2q5ld   1/1     Running   0          6s
webapp-5f5bf685db-545d4   1/1     Running   0          6s
webapp-5f5bf685db-6h9bl   1/1     Running   0          6s
webapp-5f5bf685db-7dzjm   1/1     Running   0          6s
webapp-5f5bf685db-8rl6x   1/1     Running   0          6s
webapp-5f5bf685db-dqh8t   1/1     Running   0          5m26s
webapp-5f5bf685db-fk2hm   1/1     Running   0          6s
webapp-5f5bf685db-hmvhx   1/1     Running   0          6s
webapp-5f5bf685db-j27lg   1/1     Running   0          6s
webapp-5f5bf685db-w88ns   1/1     Running   0          6s
  • hpa 指的是 Horizontal Pod Autoscaler。

81. 删除刚创建的 Deployment 和 hpa

$ kubectl delete deploy webapp
deployment.apps "webapp" deleted# ubuntu @ VM-0-4-ubuntu in ~ [11:02:08]
$ kubectl delete hpa webapp
horizontalpodautoscaler.autoscaling "webapp" deleted

82. 创建一个带有 node 镜像的 Job,并打印节点版本

kubectl create job nodeversion --image=node -- node -v$ kubectl get job -w
NAME          COMPLETIONS   DURATION   AGE
nodeversion   0/1           10s        10s$ kubectl get pod
NAME                         READY   STATUS              RESTARTS   AGE
nodeversion-b4rvl            0/1     ContainerCreating   0          37s

83. 查看上面创建的 Pod 的日志

$ kubectl logs nodeversion-b4rvl
v14.0.0

84. 基于 Job 打印 yaml 文件

kubectl create job hello-job --image=busybox --dry-run=client -o yaml -- echo "Hello I am from job"
  • yaml 文件
apiVersion: batch/v1
kind: Job
metadata:creationTimestamp: nullname: hello-job
spec:template:metadata:creationTimestamp: nullspec:containers:- command:- echo- Hello I am from jobimage: busyboxname: hello-jobresources: {}restartPolicy: Never
status: {}

85. 基于上面输出的信息创建 Job

kubectl create -f hello-job.yaml

86. 查看 Job 与 Pod,打印其日志

$ kubectl get job
NAME          COMPLETIONS   DURATION   AGE
hello-job     1/1           6s         40s$ kubectl get po
NAME                         READY   STATUS      RESTARTS   AGE
hello-job-z2kms              0/1     Completed   0          45s$ kubectl logs hello-job-z2kms
Hello I am from job

87. 删除刚创建 Job

$ kubectl delete job hello-job
job.batch "hello-job" deleted

88. 再次创建 Job,并将任务执行数设置为 10

apiVersion: batch/v1
kind: Job
metadata:creationTimestamp: nullname: hello-job
spec:# 将执行数设置为 10completions: 10template:metadata:creationTimestamp: nullspec:containers:- command:- echo- Hello I am from jobimage: busyboxname: hello-jobresources: {}restartPolicy: Never
status: {}

89. 查看新创建的 Job

$ kubectl get job -w
NAME          COMPLETIONS   DURATION   AGE
hello-job     0/10          5s         5s
hello-job     1/10          7s         7s
hello-job     2/10          13s        13s
hello-job     3/10          19s        19s
hello-job     4/10          25s        25s
hello-job     5/10          31s        31s
hello-job     6/10          38s        38s
hello-job     7/10          44s        44s
hello-job     8/10          50s        50s
hello-job     9/10          56s        56s
hello-job     10/10         62s        62s$ kubectl get po
NAME                         READY   STATUS      RESTARTS   AGE
hello-job-6mmp9              0/1     Completed   0          68s
hello-job-8s28x              0/1     Completed   0          43s
hello-job-dwvpf              0/1     Completed   0          49s
hello-job-gf5wz              0/1     Completed   0          37s
hello-job-hcb96              0/1     Completed   0          80s
hello-job-nqmvk              0/1     Completed   0          31s
hello-job-pczkz              0/1     Completed   0          74s
hello-job-pkf2d              0/1     Completed   0          87s
hello-job-tsj5n              0/1     Completed   0          62s
hello-job-z5cnx              0/1     Completed   0          56skubectl delete job hello-job

90. 再次创建 Job 并设置并行执行数为 10

  • yaml 文件
apiVersion: batch/v1
kind: Job
metadata:creationTimestamp: nullname: hello-job
spec:# 设置并行数parallelism: 10template:metadata:creationTimestamp: nullspec:containers:- command:- echo- Hello I am from jobimage: busyboxname: hello-jobresources: {}restartPolicy: Never
status: {}
  • 创建 Job
$ kubectl create -f hello-job.yaml
job.batch/hello-job created

91. 查看 job 的执行与 pod 情况,完成后删除 job

$ kubectl get job -w
NAME          COMPLETIONS   DURATION   AGE
hello-job     0/1 of 10     1s         1s
hello-job     1/1 of 10     8s         8s
hello-job     2/1 of 10     8s         8s
hello-job     3/1 of 10     12s        12s
hello-job     4/1 of 10     16s        16s
hello-job     5/1 of 10     19s        19s
hello-job     6/1 of 10     23s        23s
hello-job     7/1 of 10     28s        28s
hello-job     8/1 of 10     31s        31s
hello-job     9/1 of 10     35s        35s
hello-job     10/1 of 10    39s        39s$ kubectl get po
NAME                         READY   STATUS      RESTARTS   AGE
hello-job-2jsql              0/1     Completed   0          54s
hello-job-7j5z5              0/1     Completed   0          54s
hello-job-89xcz              0/1     Completed   0          54s
hello-job-cjqgh              0/1     Completed   0          54s
hello-job-dm4gd              0/1     Completed   0          54s
hello-job-fn9gc              0/1     Completed   0          54s
hello-job-qssm4              0/1     Completed   0          54s
hello-job-rf926              0/1     Completed   0          54s
hello-job-vww26              0/1     Completed   0          54s
hello-job-z4fc7              0/1     Completed   0          54skubectl delete job hello-job

92. 创建一个 CronJob,每分钟打印日期和 Hello from kubernetes cluster

$ kubectl create cronjob date-job --image=busybox --schedule="*/1 * * * *" -- bin/sh -c "date; echo Hello from kubernetes cluster"
cronjob.batch/date-job created

93. 获取 CronJob 的 yaml

kubectl get cj date-job -o yaml

94. 查看 CronJob 组件信息和打印日志

$ kubectl get cj
NAME       SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
date-job   */1 * * * *   False     0        27s             116s$ kubectl get job
NAME                  COMPLETIONS   DURATION   AGE
date-job-1587871560   1/1           6s         12s$ kubectl get po
NAME                         READY   STATUS      RESTARTS   AGE
date-job-1587871560-ndj9v    0/1     Completed   0          90s$ kubectl logs date-job-1587871560-ndj9v
Sun Apr 26 03:26:14 UTC 2020
Hello from kubernetes cluster

95. 删除 CronJob,并确认与其关联的 Job 和 Pod 是否已删除

kubectl delete cj date-job// 确认关联的 Pod 和 job 是否已经删除
kubectl get po
kubectl get job

以上就是 Pod Design 部分的练习,最后一篇介绍余下的 50 多个练习。

Kubernetes 150 个操作练习 (中)相关推荐

  1. sql azure 语法_Azure Kubernetes服务(AKS)中SQL Server

    sql azure 语法 In this article, we will review how to create a Kubernetes cluster in Azure Kubernetes ...

  2. python中csv文件操作_python中操作csv文件

    python中操作csv文件 读取csv improt csv f = csv.reader(open("文件路径","r")) for i in f: pri ...

  3. python中frame中的元素怎么识别_python3.6+selenium实现操作Frame中的页面元素

    有时网页中会嵌套一个或者多个Frame,此时我们直接去找嵌套在Frame里面的元素会抛出异常,所以在操作的时候我们需要将页面焦点切换到Frame里面,下面我们就以一个实例演示一下! 首先先创建三个ht ...

  4. 在操作系统理论中,什么是饿死

    在操作系统理论中,什么是饿死 饥饿 饿死 饥饿   在操作系统理论中,饥饿指的是一个进程长期得不到运行,而处于长期等待的状态. 饿死   在操作系统理论中,饿死指的是一个进程一直及以后也不会得到运行, ...

  5. python操作redis中的list

    list 操作 redis中的List在在内存中按照一个name对应一个List来存储 方法: lpush(name,values)# 在name对应的list中添加元素,每个新的元素都添加到列表的最 ...

  6. jQuery操作iframe中js函数的方法小结

    1.jquery操作iframe中的元素(2种方式) ? 1 2 var tha = $(window.frames["core_content"].document).find( ...

  7. html5 js选择器,使用HTML5的JS选择器操作页面中的元素

    文件命名为:querySelector.html,可在Chrome浏览器中预览效果. 1 2 3 4 5 使用HTML5的JS选择器操作页面中的元素 6 7 8 9 10 兴趣爱好: 11 12   ...

  8. laravel操作$request中值删除、增加、替换等方式的代码实例

    说明:操作$request中值的删除.增加.替换. 适用范围:laravel5.8以上 删除request中的值 $data = $request->except(['字段1','字段2','字 ...

  9. java操作集合中 concurrentModifyException 异常的原因分析

    java操作集合中 concurrentModifyException 异常的原因分析 参考文章: (1)java操作集合中 concurrentModifyException 异常的原因分析 (2) ...

最新文章

  1. XML专题:使用NSXMLParser解析xml文件
  2. uni-app中的页面间使用$on与$emit
  3. 一行 Python 代码轻松构建树状热力图
  4. html里下拉标记,HTML: select 标签
  5. 【记事】今年的中秋节
  6. 移动端ios中click点击失效
  7. SQL NOTE-VARIABLE
  8. 插件 微信 自动 抢红包
  9. matlab拉格朗日插值法程序框图,MATLAB实现拉格朗日插值法
  10. Java-事务的传播特性和隔离级别
  11. 数据库表设计 基本思路
  12. alsa buffer原理_ALSA driver--HW Buffer
  13. Google Earth Engine(GEE)——估计未来人口密度(越南2100年人口预测)
  14. dos下masm的out of memory 怎么解决,求大佬指教
  15. python连续输入直到回车退出_详解Python实现按任意键继续/退出的功能
  16. 盘点PDF加密的六种方法
  17. 猿辅导2019 编程两道
  18. cesium实时获取卫星的动态信息,包括经纬度和名称(onTick)
  19. Wi-Fi智能插座拆解:如何实现远程开关
  20. 严版数据结构(第一章)

热门文章

  1. 玩怪物猎人P3发现一个BUG可以金钱无数(非老金)
  2. 中国FPGA芯片技术解析
  3. 用 nodejs 做反向代理服务器
  4. vsc 的c环境配置
  5. Java之每日经典一题:(1)珠穆朗玛峰
  6. MYSQL SELECT INTO临时表
  7. 编写程序计算圆的面积和周长。
  8. 使用计算机搭建防火墙,电脑防火墙在哪里设置?电脑防火墙设置方法介绍
  9. 美团团队---客户端自动化测试研究
  10. 怎么判断一个整数是2的倍数