创建和管理多个Pod--Deployment
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建和管理多个Pod--Deployment相关的知识,希望对你有一定的参考价值。
创建和管理多个Pod--Deployment
- 说明
Deployment 为 Pod 和 ReplicaSet 提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController 来方便的管理应用。
你只需要在 Deployment 中描述想要的目标状态是什么,Deployment controller 就会帮你将 Pod 和ReplicaSet 的实际状态改变到你的目标状态。你可以定义一个全新的 Deployment 来创建 ReplicaSet 或者删除已有的 Deployment 并创建一个新的来替换。 - 复制控制器(Replication Controller,RC)
RC是K8s集群中最早的保证Pod高可用的API对象。通过监控运行中的Pod来保证集群中运行指定数目的Pod副本。指定的数目可以是多个也可以是1个;少于指定数目,RC就会启动运行新的Pod副本;多于指定数目,RC就会杀死多余的Pod副本。即使在指定数目为1的情况下,通过RC运行Pod也比直接运行Pod更明智,因为RC也可以发挥它高可用的能力,保证永远有1个Pod在运行。RC是K8s较早期的技术概念,只适用于长期伺服型的业务类型,比如控制小机器人提供高可用的Web服务。 - 副本集(Replica Set,RS)
RS是新一代RC,提供同样的高可用能力,区别主要在于RS后来居上,能支持更多种类的匹配模式。副本集对象一般不单独使用,而是作为Deployment的理想状态参数使用。 - Deployment典型的应用场景包括
(1)定义Deployment来创建Pod和ReplicaSet
(2)滚动升级和回滚应用;如果当前状态不稳定,回滚到之前的Deployment revision。每次回滚都会更新Deployment的revision。
(3)扩容和缩容,扩容Deployment以满足更高的负载。
(4)暂停和继续Deployment,暂停Deployment来应用PodTemplateSpec的多个修复,然后恢复上线。 - 实战Deployment
##定义一个简单的nginx应用 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx-test namespace: test spec: replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
##创建deploy(部署) kubectl create -f nginx-deployment deployment.extensions "nginx-test" created
##查看deploy(部署) kubectl get deploy --namespace=test NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx-test 3 3 3 3 12m
##查看rs(副本集) kubectl get rs --namespace=test NAME DESIRED CURRENT READY AGE nginx-test-75675f5897 3 3 3 11m
##查看pods(容器组) kubectl get po --namespace=test NAME READY STATUS RESTARTS AGE nginx-test-75675f5897-9fcrs 1/1 Running 0 13m nginx-test-75675f5897-gnc8z 1/1 Running 0 13m nginx-test-75675f5897-qbsvm 1/1 Running 0 13m
- 实战扩容
##扩容 将容器组的个数扩容至5个 "replicas": 5
#语法格式 kubectl scale deployment + [deploy的name] + --replicas [count] + --namespace=命名空间
#命令 kubectl scale deployment nginx-test --replicas 5 --namespace=test deployment.extensions "nginx-test" scaled
##说明 如果集群支持 horizontal pod autoscaling 的话,还可以为Deployment设置自动扩展: kubectl autoscale deployment nginx-test --min=10 --max=15 --cpu-percent=80 --namespace=test
#查看deploy(部署) kubectl get deploy --namespace=test NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx-test 5 5 5 5 17m
#查看rs(副本集) kubectl get rs --namespace=test NAME DESIRED CURRENT READY AGE nginx-test-75675f5897 5 5 5 18m
#查看pods(容器组) kubectl get po --namespace=test NAME READY STATUS RESTARTS AGE nginx-test-75675f5897-9fcrs 1/1 Running 0 19m nginx-test-75675f5897-gnc8z 1/1 Running 0 19m nginx-test-75675f5897-hjvjw 1/1 Running 0 3m nginx-test-75675f5897-hszs8 1/1 Running 0 3m nginx-test-75675f5897-qbsvm 1/1 Running 0 19m
- 实战缩容
##缩容 将容器组的个数缩容至2个 "replicas": 2
#命令 kubectl scale deployment nginx-test --replicas 2 --namespace=test deployment.extensions "nginx-test" scaled
#查看deploy(部署) kubectl get deploy --namespace=test NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx-test 2 2 2 2 25m
#查看rs(副本集) kubectl get rs --namespace=test NAME DESIRED CURRENT READY AGE nginx-test-75675f5897 2 2 2 25m
#查看pods(容器组) kubectl get po --namespace=test NAME READY STATUS RESTARTS AGE nginx-test-75675f5897-gnc8z 1/1 Running 0 26m nginx-test-75675f5897-qbsvm 1/1 Running 0 26m
- 实战滚动升级
将image: nginx:1.7.9升级为nginx:1.9.1 #语法格式 kubectl scale deployment/[deploy的name] + [升级镜像] + --namespace=命名空间
#命令 kubectl set image deployment/nginx-test nginx=nginx:1.9.1 --namespace=test deployment.apps "nginx-test" image updated
#查看rs(副本集) kubectl get rs --namespace=test NAME DESIRED CURRENT READY AGE nginx-test-75675f5897 0 0 0 48m nginx-test-c4747d96c 2 2 2 19m
#查看pods(容器组) kubectl get po --namespace=test NAME READY STATUS RESTARTS AGE nginx-test-c4747d96c-cqnqs 1/1 Running 0 21m nginx-test-c4747d96c-fpjrk 1/1 Running 0 21m
#查看nginx版本 kubectl describe po nginx-test-c4747d96c-cqnqs --namespace=test 可看到版本信息: Image: nginx:1.9.1
- 实战回滚应用
#命令 kubectl rollout undo deployment/nginx-test --namespace=test deployment.apps "nginx-test"
#查看rs(副本集) kubectl get rs --namespace=test NAME DESIRED CURRENT READY AGE nginx-test-75675f5897 2 2 2 28m nginx-test-c4747d96c 0 0 0 3m
#查看pods(容器组) kubectl get po --namespace=test NAME READY STATUS RESTARTS AGE nginx-test-75675f5897-rqnhb 1/1 Running 0 1m nginx-test-75675f5897-zhwgn 1/1 Running 0 1m
#查看nginx版本 kubectl describe po nginx-test-75675f5897-rqnhb --namespace=test 可看到版本信息: Image: nginx:1.7.9
- 说明
以上操作都是在linux终端上进行的,命令有些繁琐的,我们实际上可以直接登入web界面的kubernetes进行deployment的创建和更改的,如下图所示:
以上是关于创建和管理多个Pod--Deployment的主要内容,如果未能解决你的问题,请参考以下文章
Kubernetes 数据持久化之Persistent 数据卷类型
k8s部署nginx(Pod、Deployment、Service)
Day388.Selector&Pipe&fileLock文件锁&Path&Files&AsynchronousFileChannel异步通道 -NIO(代码片
GitGit 分支管理 ( 解决分支合并冲突 | 创建并切换分支 git switch -c feature1 | 修改 feature1 分支并提交 | 修改 master 主版本并提交 )(代码片
GitGit 分支管理 ( 解决分支合并冲突 | 创建并切换分支 git switch -c feature1 | 修改 feature1 分支并提交 | 修改 master 主版本并提交 )(代码片