0
点赞
收藏
分享

微信扫一扫

K8是系列---【什么是Deployment?】

什么是Deployment?

1.为什么会有Deployment?

  没有认识Deloyment之前,我们都是直接使用kubectl创建pod,这样创建的pod有个问题,如果我想实现高可用,总不能到每一台机器上都创建一遍吧?为了解决这个问题,Deployment应运而生,我们只用创建一个Depolyment,指定副本数量,K8s就会自动创建pod分散到不同的机器上。另外,使用Deployment创建的pod拥有自愈能力和扩缩容能力,哪怕你手动删除了一个pod,K8s也会快速帮你再创建一个相同的pod。

2.多副本常用命令

命令创建Deployment

kubectl create deployment my-dep --image=nginx --replicas=3
#查看Deployment
kubectl get deploy
#查看deployment的yaml
kubectl get deploy my-dep -oyaml

yaml创建Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: my-dep
name: my-dep
spec:
replicas: 3
selector:
matchLabels:
app: my-dep
template:
metadata:
labels:
app: my-dep
spec:
containers:
- image: nginx
name: nginx

3.扩缩容

方式一:使用命令,通过改变副本数来控制是扩容还是缩容

kubectl scale --replicas=5 deployment/my-dep

方式二:通过编辑配置文件

kubectl edit deployment/my-dep
#找到replicas,把数量修改一下,wq保存即可。

4.自愈能力

  假如我部署了一个Deployment,分别分散在node1,node2,node3上,此时,如果在node1上的节点由于内存泄漏或者人为误停了pod或者容器,这时候K8s就会感知到,K8s就会尝试重启,此时重启成功后pod的ip和节点都不变,还是原来的pod,这就是K8s的自愈能力。

5.故障转移能力

  假如我部署了一个Deployment,分别分散在node1,node2,node3上,此时,如果在node1上的节点宕机了,造成服务器不可用,这时候单靠自愈能力肯定恢复不了了,这时候K8s就会等5分钟(可以自己设置阈值,默认5分钟),把原来的pod删除掉,在新的节点启动一个新的pod。

6.滚动更新

  当更新应用的时候,假如原来有三个节点,那么,先启动新的pod,新的起来了,杀掉一个老的pod,再启动新的,杀掉老的pod,依次循环。

#查看deployment的yaml中的镜像
kubectl get deploy my-dep -oyaml|grep image

#查看pod的状态变更过程
kubectl get pod -w

#滚动更新
kubectl set image deploy/my-dep nginx=nginx:1.16.1 --record

7.历史版本回退

  假如当前版本有问题,K8s可以回退到之前的指定版本。

#查看deployment的历史版本
kubectl rollout history deployment/my-dep
#回退到指定版本
kubectl rollout undo deploy/my-dep --to-version=1

K8是系列---【什么是Deployment?】_重启

 

举报

相关推荐

0 条评论