Kubernetes练习---控制器
程序员文章站
2024-03-22 22:39:16
...
可以同时布置多个相同属性的容器
一、ReplicaSet控制器
ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行。 然而,Deployment 是一个更高级的概念,它管理 ReplicaSet,并向 Pod 提供声明式的更新以及许多其他有用的功能。 因此,我们建议使用 Deployment 而不是直接使用 ReplicaSet,除非您需要自定义更新业务流程或根本不需要更新。
ReplicationController用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod来替代;而如果异常多出来的容器也会自动回收。
(1)基本部署两个nginx
[aaa@qq.com manifest]$ vim rs.yaml
[aaa@qq.com manifest]$ kubectl apply -f rs.yaml
[aaa@qq.com manifest]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
rs-example-bdmbn 1/1 Running 0 60s
rs-example-xw289 1/1 Running 0 60s
[aaa@qq.com manifest]$ kubectl get rs
(2)拉伸-直接将yaml文件中副本的个数修改就可
[aaa@qq.com manifest]$ vim rs.yaml
replicas: 4
[aaa@qq.com manifest]$ kubectl apply -f rs.yaml #不需要删除,更新即可
(3).测试更改某个pod的标签
[aaa@qq.com manifest]$ kubectl get pod --show-labels #查看标签
[aaa@qq.com manifest]$ kubectl label pod rs-example-8ghjb app=myapp --overwrite
pod/rs-example-8ghjb labeled #更改标签,还是4个但其中一个更改了标签
[aaa@qq.com manifest]$ vim rs.yaml
replicas: 4
[aaa@qq.com manifest]$ kubectl apply -f rs.yaml
replicaset.apps/rs-example configured
[aaa@qq.com manifest]$ kubectl get pod #停了两个,更改标签的已经不算在内,脱离rs控制器
二、Deployment测试
官方提供例子:
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.17/#deployment-v1-apps
(1)基本部署两个nginx:1.14.2
[aaa@qq.com manifest]$ vim deployment.yaml
[aaa@qq.com manifest]$ kubectl apply -f deployment.yaml
[aaa@qq.com manifest]$ kubectl get pod #成功创建两个容器
NAME READY STATUS RESTARTS AGE
nginx-deployment-6b474476c4-5rswj 1/1 Running 0 114s
nginx-deployment-6b474476c4-qs6wp 1/1 Running 0 114s
(2)拉伸-直接将yaml文件中副本的个数修改就可
[aaa@qq.com manifest]$ vim deployment.yaml
replicas: 4
[aaa@qq.com manifest]$ kubectl apply -f deployment.yaml
[aaa@qq.com manifest]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-6b474476c4-5rswj 1/1 Running 0 6m20s
nginx-deployment-6b474476c4-77jh6 1/1 Running 0 79s
nginx-deployment-6b474476c4-9rk56 1/1 Running 0 79s
nginx-deployment-6b474476c4-qs6wp 1/1 Running 0 6m20s
(3).测试滚动更新
在资源清单中更新版本,保留rs删除其对应的pod,在新的rs上创建pod。会滚动更新并便于回滚,回滚时直接回滚为原先的rs并创建新的pod。
三、DaemonSet
每个node里只有一个pod
[aaa@qq.com manifest]$ vim daemonset.yaml
[aaa@qq.com manifest]$ kubectl apply -f daemonset.yaml
daemonset.apps/daemonset-example created
[aaa@qq.com manifest]$ kubectl apply -f daemonset.yaml
daemonset.apps/daemonset-example unchanged
测试删除一个pod,控制器会重新拉取一个镜像
[aaa@qq.com manifest]$ kubectl delete pod daemonset-example-k4vdg
pod "daemonset-example-k4vdg" deleted
[aaa@qq.com manifest]$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
daemonset-example-dx5nt 1/1 Running 0 24s 10.244.2.56 server4 <none> <none>
daemonset-example-tvm87 1/1 Running 0 6m1s 10.244.1.44 server2 <none> <none>
四、job控制器
[aaa@qq.com manifest]$ kubectl logs pi-dbbzp
五、Cronjob测试
[aaa@qq.com manifest]$ kubectl get pod -w
NAME READY STATUS RESTARTS AGE
cron-job-example-1587765900-pvttw 0/1 Completed 0 31s
[aaa@qq.com manifest]$ kubectl logs cron-job-example-1587765900-pvttw
Fri Apr 24 22:05:12 UTC 2020
hello from k8s cluster