k8s-deployment

root
233
文章
0
评论
2020年10月23日16:33:03 评论 3475字阅读11分35秒

k8s-deployment

1.Deployment【无状态应用】

1.部署无状态应用

  • 有状态的应用会发生数据交互

2.管理Pod和ReplicaSet【控制副本数量】

  • RS的作用:
    • 控制副本数量
    • 管理滚动更新,缩容扩容【利用两个RS实现滚动升级】
    • 发布版本管理

也就是说deployment想对Pod进行更新,回滚之类的都离不开RS,首先新起一个RS把Pod一个一个进行更新

3.具有上线部署,副本设定,滚动升级,回滚,暂停和继续Deployment等功能

4.提供声明式更新,例如只更新一个新的Image

Deployment概述

Deployment是kubernetes中最常用的资源对象,为ReplicaSet和Pod的创建提供了一种声明式的定义方法,在Deployment对象中描述一个期望的状态,Deployment控制器就会按照一定的控制速率把实际状态改成期望状态,通过定义一个Deployment控制器会创建一个新的ReplicaSet控制器,通过ReplicaSet创建pod,删除Deployment控制器,也会删除Deployment控制器下对应的ReplicaSet控制器和pod资源.

使用Deployment而不直接创建ReplicaSet是因为Deployment对象拥有许多ReplicaSet没有的特性,例如滚动升级和回滚。

扩展:声明式定义是指直接修改资源清单yaml文件,然后通过kubectl apply -f 资源清单yaml文件,就可以更改资源

Deployment控制器更新镜像:

Deployment控制器是建立在rs之上的一个控制器,可以管理多个rs,每次更新镜像版本,都会生成一个新的rs,把旧的rs替换掉,多个rs同时存在,但是只有一个rs运行。 rs v1控制三个pod,删除一个pod,在rs v2上重新建立一个,依次类推,直到全部都是由rs v2控制,如果rs v2有问题,还可以回滚,Deployment是建构在rs之上的,多个rs组成一个Deployment,但是只有一个rs处于活跃状态. Deployment工作原理:如何管理rs和Pod? Deployment可以使用声明式定义,直接在命令行通过纯命令的方式完成对应资源版本的内容的修改,也就是通过打补丁的方式进行修改;Deployment能提供滚动式自定义自控制的更新;对Deployment来讲,我们在实现更新时还可以实现控制更新节奏和更新逻辑。

  • 互动:什么叫做更新节奏和更新逻辑呢?

比如说Deployment控制5个pod副本,pod的期望值是5个,但是升级的时候需要额外多几个pod,那我们控制器可以控制在5个pod副本之外还能再增加几个pod副本;比方说能多一个,但是不能少,那么升级的时候就是先增加一个,再删除一个,增加一个删除一个,始终保持pod副本数是5个;还有一种情况,最多允许多一个,最少允许少一个,也就是最多6个,最少4个,第一次加一个,删除两个,第二次加两个,删除两个,依次类推,可以自己控制更新方式,这种滚动更新需要加readinessProbe和livenessProbe探测,确保pod中容器里的应用都正常启动了才删除之前的pod。 启动第一步,刚更新第一批就暂停了也可以;假如目标是5个,允许一个也不能少,允许最多可以10个,那一次加5个即可;这就是我们可以自己控制节奏来控制更新的方法。

deployment编写技巧

快速生成deployment的yaml格式文件

kubectl create deploy nginx --image=nginx --dry-run -o yaml > nginx-ds.yaml

创建deployment

[root@master01 ~]# kubectl create deployment web --image=nginx:1.17
deployment.apps/web created
[root@master01 ~]# kubectl get deployment,pods
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx   1/1     1            1           27h
deployment.apps/web     1/1     1            1           58s

NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-549f5fcb58-wzg2d   1/1     Running   0          6h41m
pod/web-669588cb76-hwvbw     1/1     Running   0          58s

发布

[root@master01 ~]# kubectl expose deployment web --port=80 --target-port=80 --type=NodePort --name=web
service/web exposed

升级

deployment控制RS,进行升级,RS一个一个进行升级

kubectl set image deployment/web nginx=nginx:1.15

kubectl rollout status deployment/web

回滚

查看历史版本:

  • kubectl rollout history deployment/web

kubectl rollout undo deployment/web

回滚到指定版本:

  • kubectl rollout undo deployment/web --revision=2

扩容/缩容

方法一:

  • kubectl scale deployment nginx-deployment --replicas=10

方法二:

  • 修改yaml文件,副本数量

方法三:

  • kubectl edit 控制器名称  pod名称
  • 手动修改

 

deploy一般模板

apiVersion: apps/v1
kind: Deployment 
metadata:
  name: portal
  namespace: ms 
spec:
  replicas: 1
  selector:
    matchLabels:
      project: ms
      app: portal
  template:
    metadata:
      labels:
        project: ms 
        app: portal
    spec:
      containers:
      - name: portal
        image:  xianchao/portal:v1
        imagePullPolicy: Always
        ports:
          - protocol: TCP
            containerPort: 8080 
        resources:  #资源配额
          limits:  #资源限制,最多可用的cpu和内存
            cpu: 1
            memory: 1Gi
         requests: #最少需要多少资源才可以运行Pod
            cpu: 0.5
            memory: 1Gi
        readinessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 60
          periodSeconds: 10
        livenessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 60
          periodSeconds: 10

自定义滚动更新策略

maxSurge和maxUnavailable用来控制滚动更新的更新策略

取值范围

数值

  1. maxUnavailable: [0, 副本数]
  2. maxSurge: [0, 副本数]

注意:两者不能同时为0。

比例

  1. maxUnavailable: [0%, 100%] 向下取整,比如10个副本,5%的话==0.5个,但计算按照0个;
  2. maxSurge: [0%, 100%] 向上取整,比如10个副本,5%的话==0.5个,但计算按照1个;

注意:两者不能同时为0。

建议配置

  1. maxUnavailable == 0
  2. maxSurge == 1

这是我们生产环境提供给用户的默认配置。即“一上一下,先上后下”最平滑原则:

1个新版本pod ready(结合readiness)后,才销毁旧版本pod。此配置适用场景是平滑更新、保证服务平稳,但也有缺点,就是“太慢”了。

总结:

maxUnavailable:和期望的副本数比,不可用副本数最大比例(或最大值),这个值越小,越能保证服务稳定,更新越平滑;

maxSurge:和期望的副本数比,超过期望副本数最大比例(或最大值),这个值调的越大,副本更新速度越快。

自定义策略:

修改更新策略:maxUnavailable=1,maxSurge=1

[root@master1 ~]# kubectl patch deployment myapp-v1 -p
 '{"spec":{"strategy":{"rollingUpdate": {"maxSurge":1,"maxUnavailable":1}}}}' -n blue-green

 

 

 

下载信息 deploy.yaml k8s 1.21.3
下载地址
继续阅读
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2020年10月23日16:33:03
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
k8s-Service Account Kubernetes

k8s-Service Account

k8s-Service Account的授权管理 Service Account也是一种账号,是给运行在Pod里的进程提供了必要的身份证明。需要在Pod定义中指明引用的Service Account,...
k8s-RBAC Kubernetes

k8s-RBAC

k8s-RBAC认证授权策略 RBAC介绍 在Kubernetes中,所有资源对象都是通过API进行操作,他们保存在etcd里。而对etcd的操作我们需要通过访问 kube-apiserver 来实现...
k8s-Secret Kubernetes

k8s-Secret

配置管理中心Secret Secret是什么? Configmap一般是用来存放明文数据的,如配置文件,对于一些敏感数据,如密码、私钥等数据时,要用secret类型 Secret解决了密码、token...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: