目录

K8S部署策略

K8S学习笔记

1. 背景

我们总是将最终版本的应用程序部署到生产环境。 有多种方法可以保证发布生产的稳定和安全。 以下部分是 k8s 部署策略。

2. 策略

有 4 种方法可以进行生产发布。 1)滚动更新。 2)重新创建。 3) 蓝色/绿色。 4)金丝雀。 以下是详细信息。

  • 重新创建更新

    这是一种非常笨拙的更新方式。 销毁V1应用程序然后创建V2应用程序。 在一段时间内会遇到服务中断问题。

  • 滚动更新。

    这是最常用的。

    • 使用 RC 执行自动滚动更新

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      
      apiVersion: v1
      kind: ReplicationController
      metadata:
      name: kubia-v1
      spec:
      replicas: 3
      template:
      metadata:
      name: kubia
      labels:
        app: kubia
      spec:
      containers:
          - image: luksa/kubia:v1
            name: nodejs
      ---
      apiVersion: v1
      kind: Service
      metadata:
      name: kubia
      spec:
      type: NodePort
      selector:
        app: kubia
      ports:
      - port: 80
        targetPort: 8080
        nodePort: 30007
      

      要运行此应用程序,将创建 ReplicationController 和 NodePort 服务,以便能够从外部访问该应用程序。 然后再打开另一个终端来监控服务。

      然后使用 kubectl 执行滚动更新,将创建应用程序的版本 2。 执行以下命令:

      1
      
      kubectl 滚动更新 kubia-v1 kubia-v2 --image=luksa/kubia:v2
      
    • 使用部署以声明方式更新应用程序

      部署是一种高级资源,用于部署应用程序并以声明方式更新它们,而不是通过 RC 或 RS 来完成,这两者都被认为是较低级别的概念。

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      
      apiVersion: apps/v1
      kind: Deployment
      metadata:
      name: kubia-v1
      spec:
      replicas: 3
      selector:
      matchLabels:
      app: kubia
      template:
      metadata:
      name: kubia
      labels:
        app: kubia
      spec:
      containers:
          - image: luksa/kubia:v1
            name: nodejs
      ---
      apiVersion: v1
      kind: Service
      metadata:
      name: kubia
      spec:
      type: NodePort
      selector:
        app: kubia
      ports:
      - port: 80
      

      同样要运行此应用程序,完成后,将 v1 部署容器更改为 v2,然后使用新版本进行部署。

      1
      
      kubectl apply -f kubia-deploy-v2.yaml
      

      之后,您可以注意到将保留V1 RS。 所以版本从V2回滚到V1是非常容易的。

      使用此命令回滚部署。

      1
      
      kubectl 推出撤消部署 kubia
      
      1
      
      kubectl 推出历史部署 kubia
      
      1
      
      kubectl 推出撤消部署 kubia --to-revision=1
      
  • 蓝绿

    实际上这个部署需要V1和V2应用程序已经存在。 客户端通过标签连接Deployment。

    • 金丝雀部署