k8s入门之Deployment(五)

虚幻大学 xuhss 216℃ 0评论

? 优质资源分享 ?

学习路线指引(点击解锁) 知识定位 人群定位
? Python实战微信订餐小程序 ? 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
?Python量化交易实战? 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

Deployment控制器通常用来部署无状态的应用,这样可以在任意的节点上扩容或者删除,而不用考虑数据的问题,它可以管理pod对象。

一、多副本

1.使用命令行方式创建Deployment

在dev名称空间下创建3个副本的nginx pod

kubectl create deployment nginx --image=nginx --replicas=3 -n dev

监控创建进度

kubectl get deploy -n dev -w

d8416eaeb1c79248ac6a31364e2b4233 - k8s入门之Deployment(五)

可以看到副本可用数量从0变到3

2.查看Deployment的描述

kubectl describe deploy nginx -n dev

3094f236ec6c95f2b3b5aaf810e94a4b - k8s入门之Deployment(五)

可以看到NewReplicaSet的名称为nginx-6799fc88d8

3.查看Deployment管理的pod

kubectl get pod -n dev -owide --show-labels

87db7c8906eaaa535401f45c58e61262 - k8s入门之Deployment(五)

可以看到Name列是ReplicaSet的名称加上一串6位的随机字符串,每个pod都有自己独立的IP。由于只有2台worker节点,其中2个pod被调度到了同一台节点worker02,另一个pod被调度到了worker01。

4.删除Deployment

kubectl delete deploy nginx -n dev

删除Deployment,会把其管理的pod一起删除

fb1fbc5a5c9eaf5a3f2ab1d9d200c255 - k8s入门之Deployment(五)

5.使用yaml文件创建Deployment

(1)新建dp-nginx.yaml文件,并输入以下内容

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx
  namespace: dev
spec:
  replicas: 3
  selector:
    # Deployment会匹配与这里设置的相同标签内容的pod
    matchLabels:
      app: nginx
  # pod的模板描述
  template:
    metadata:
      #定义pod的标签
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx

(2)创建Deployment对象

kubectl apply -f dp-nginx.yaml

查看创建的结果

8884e531b623106d3e553982cba399af - k8s入门之Deployment(五)

二、扩缩容

1.通过命令行扩容

先通过命令自动监听pod的变化

kubectl get pod -n dev -owide -w

再开启一个新的bash会话,通过以下命令扩容(增加副本数量:由3个变成5个)

kubectl scale --replicas=5 deploy/nginx -n dev

在监听bash窗口可以看到扩容过程

0b089f6e66e12020af1fd601cd7cae00 - k8s入门之Deployment(五)

2.通过命令行缩容

先通过命令自动监听pod的变化

kubectl get pod -n dev -owide -w

再开启一个新的bash会话,通过命令缩容(减少副本数量:由5个变成2个)

kubectl scale --replicas=2 deploy/nginx -n dev

在监听bash窗口可以看到缩容过程

3f13be738f39ade82ea0cb49823139e4 - k8s入门之Deployment(五)

3.通过yaml文件扩缩容

kubectl edit deployment nginx -n dev

定位到replicase参数所在行,然后修改它的值

三、自愈&故障转移

1.自愈

手动删除某个pod,或者某个pod异常挂掉,k8s会自动创建一个新的pod。

先通过命令自动监听pod的变化

kubectl get pod -n dev -owide -w

再开启一个新的bash会话,手动删除一个pod

kubectl scale --replicas=2 deploy/nginx -n dev

在监听bash窗口可以看到创建过程

f0d7cfdea9e9e563b7c813f606c927ce - k8s入门之Deployment(五)

2.故障转移

对worker02关机,k8s需要5分钟(可配置)才能感知从而启动自愈功能。

通过命令自动监听pod的变化

kubectl get pod -n dev -owide -w

大概等了5分钟左右的时间,可以看到worker01上启动了2个新的pod。

b96ff24a48ed53aadfe28f4b722d1ea8 - k8s入门之Deployment(五)

这个时候如果重新启动worker02,部署在它上面的2个旧pod会立马删除。

ec22df633d50c8eb2b63943dc33abc42 - k8s入门之Deployment(五)

四、滚动更新

1.更改镜像版本

把nginx的镜像版本改为1.20

kubectl edit deploy nginx -n dev
# image: nginx:1.20

查看滚动更新状态

kubectl rollout status deploy nginx -n dev

75a3f90625ddb7e1619113be4f23f3e6 - k8s入门之Deployment(五)

监听pod的创建过程

kubectl get pod -n dev -owide -w

84348f2d1a73fc4e354b072e026a162e - k8s入门之Deployment(五)

查看新创建的pod描述,确实更新成了新的镜像版本

5b53714b2ac4712e538a060455b97ebd - k8s入门之Deployment(五)

2.回滚

(1)查看更新历史记录

kubectl rollout history deploy nginx -n dev

952cf1852dee8571d57085caa4269be1 - k8s入门之Deployment(五)

(2)查看某个指定版本的历史记录详情

kubectl rollout history deploy nginx -n dev --revision=2

3cc804e1675e51bdd29fc16aa93b9707 - k8s入门之Deployment(五)

(3)回滚到上次的版本

kubectl rollout undo deploy nginx -n dev

回滚完成之后,查看新pod的描述,发现nginx镜像的版本是最新的

318362b703c47ed6ce76e3545e74d86f - k8s入门之Deployment(五)

(4)回滚到指定的版本

kubectl rollout undo deploy nginx -n dev --to-revision=2

五、总结

类似 Deployment 这样的一个控制器,实际上都是由上半部分的控制器定义(包括期望状态),加上下半部分的被控制对象的模板组成的

38b597a7e53b9bf9c7ff018220a5724b - k8s入门之Deployment(五)

转载请注明:xuhss » k8s入门之Deployment(五)

喜欢 (0)

您必须 登录 才能发表评论!