第十篇:Kubernetes资源调度Deployment(一)

104 阅读2分钟

注明:当前文档内容来源于51cto课堂‘宽哥’杜宽学习课程。

一、什么是Deployment

Deployment 一般用于部署公司的无状态服务,这个也是最常用的控制器,因为企业内部现在都是以微服务为主,而微服务实现无状态化也是最佳实践,可以利用Deployment的高级功能做到无缝迁移、自动扩容缩容、自动灾难恢复、一键回滚等功能。

Deployment部署过程

image.png

二、创建一个基础的Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3 #设置pod的副本个数
  selector:
    matchLabels:
      app: nginx
  template:
    metadata: 
      labels:
        app: nginx
    spec: 
      containers:
      - name: nginx
        image: nginx:1.15.12
        ports:
        - containerPort: 80

示列解析:

1.nginx-deployment: Deployment的名称

2.replica: 创建pod的副本数

3.selector: 定义Deployment如何找到要管理的pod,与template的label(标签)对应,apiversion为apps/v1 必须指定该字段

4.template字段包含一下字段

app: nginx使用label(标签)标记Pod;
spec: 表示Pod运行一个名字为nginx的容器
image: 运行此pod使用的镜像;
Port: 容器用于发送和接收流量的接口

三、kubectl 命令简用

# 创建此Deployment
kubctl create -f nginx-deployment.yaml

# 使用kubectl或者kubectl describe 查看此Deployment的状态
kubectl get deploy
输出解释:
Name: 集群中Deployment的名称。
READY:pod就绪个数和总副本数。
UP-TO-DATE: 显示已达到期望状态的被更新的副本数。
AVAILABLE:显示用户可以使用的应用程序副本数。
AGE: 显示应用程序运行时间。

# 查看此Deployment创建的pod 标签
kubectl get pods --show-labels

四、Deployment 更新

注意:仅当Deployment 的pod模版(.spec.template)更改时,才会触发Deployment更新,例如更改内存、cpu配置或者容器的image

更新过程如图所示

image.png

使用命令

kubectl set 命令 更新deployment 镜像

kubectl set image deployment nginx-deployment nginx=nginx:1.9.1

kubectl edit 命令 编辑运行中的deployment

kubectl edit deployment nginx-deployment

kubectl rollout status 查看更新过程

kubectl rollout status deployment nginx-deployment

五、回滚Deployment

kubectl rollout history 查看更新历史

kubectl rollout history deployment nginx-deployment

image.png

查看某次更新的具体信息

kubectl rollout history deployment nginx-deployment --revision=3

回滚到上一个稳定版本,使用kubectl rollout undo 即可

kubectl rollout undo deployment nginx-deployment

回滚到指定版本,使用--to-revision

kubectl rollout undo deployment nginx-deployment --to-revision=2