首页 > 其他分享 > k8s Deployment 金丝雀发布

k8s Deployment 金丝雀发布

时间:2023-06-19 17:35:53浏览次数:33  
标签:kubectl 96994cd5f 金丝雀 Deployment ServerIP demoapp deployment k8s 172.20

创建应用

depoly-demoapp-v10.yaml

apiVersion: v1
kind: Namespace
metadata:
    name: demoapp
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demoapp-deployment
  namespace: demoapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: demoapp
      controller: demoapp
  template:
    metadata:
      labels:
        app: demoapp
        controller: demoapp
    spec:
      containers:
      - name: demoapp
        image: ikubernetes/demoapp:v1.0
        ports:
        - containerPort: 80
          name: http
        resources:
          requests:
            memory: "256Mi"
            cpu: "50m"
          limits:
            memory: "256Mi"
            cpu: "50m"
---
apiVersion: v1
kind: Service
metadata:
  name: demoapp-svc
  namespace: demoapp
spec:
  selector:
    app: demoapp
    controller: demoapp
  ports:
  - name: http
    port: 80
    targetPort: 80

创建deployment资源

# kubectl apply -f depoly-demoapp-v10.yaml
namespace/demoapp created
deployment.apps/demoapp-deployment created
service/demoapp-svc created

查看deployment资源

# kubectl get deploy -n demoapp
NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
demoapp-deployment   3/3     3            3           51s

查看 Deployment 滚动更新状态 

# kubectl rollout status deploy/demoapp-deployment -n demoapp
deployment "demoapp-deployment" successfully rolled out

查看ReplicaSet 

# kubectl get rs -n demoapp
NAME                           DESIRED   CURRENT   READY   AGE
demoapp-deployment-96994cd5f   3         3         3       108s

查看pod 标签

# kubectl get pods -n demoapp --show-labels
NAME                                 READY   STATUS    RESTARTS   AGE     LABELS
demoapp-deployment-96994cd5f-gwfh4   1/1     Running   0          2m10s   app=demoapp,controller=demoapp,pod-template-hash=96994cd5f
demoapp-deployment-96994cd5f-mmhsb   1/1     Running   0          2m10s   app=demoapp,controller=demoapp,pod-template-hash=96994cd5f
demoapp-deployment-96994cd5f-qrjw8   1/1     Running   0          2m10s   app=demoapp,controller=demoapp,pod-template-hash=96994cd5f

查看Deployment 修订历史

# kubectl rollout history deployment/demoap-depolyment -n demoapp
deployment.apps/demoappv10 
REVISION  CHANGE-CAUSE
1         <none>

Deployment 添加注解

# kubectl annotate deployment/demoapp-deployment kubernetes.io/change-cause="kubectl apply -f depoly-demoapp-v10.yaml" -n demoapp
deployment.apps/demoapp-deployment annotated

确认Deployment 添加注解

# kubectl rollout history deployment/demoapp-deployment -n demoapp
deployment.apps/demoapp-deployment 
REVISION  CHANGE-CAUSE
1         kubectl apply -f depoly-demoapp-v10.yaml

查看svc

# kubectl get svc -n demoapp
NAME          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
demoapp-svc   ClusterIP   10.100.95.59   <none>        80/TCP    5m16s

访问服务

# curl `kubectl get svc/demoapp-svc -n demoapp -o jsonpath="{.spec.clusterIP}"`:80
iKubernetes demoapp v1.0 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-96994cd5f-mmhsb, ServerIP: 172.20.154.229!

金丝雀发布

设置参数

# kubectl patch deployments/demoapp-deployment -p '{"spec": {"strategy":{"rollingUpdate":{"maxSurge": 1, "maxUnavailable":0}}}}' -n demoapp
deployment.apps/demoapp-deployment patched

更新应用并暂停

# kubectl set image deployment/demoapp-deployment demoapp=ikubernetes/demoapp:v1.1 -n demoapp && kubectl rollout pause deployments/demoapp-deployment -n demoapp
deployment.apps/demoapp-deployment image updated
deployment.apps/demoapp-deployment paused

查看更新状态

# kubectl rollout status deploy demoapp-deployment -n demoapp
Waiting for deployment "demoapp-deployment" rollout to finish: 1 out of 3 new replicas have been updated...

查看rs控制器

# kubectl get rs -n demoapp
NAME                            DESIRED   CURRENT   READY   AGE
demoapp-deployment-6f798c7578   1         1         1       112s
demoapp-deployment-96994cd5f    3         3         3       35m

查看pod

# kubectl get pod -n demoapp
NAME                                  READY   STATUS    RESTARTS   AGE
demoapp-deployment-6f798c7578-6vk69   1/1     Running   0          6m13s
demoapp-deployment-96994cd5f-gwfh4    1/1     Running   0          39m
demoapp-deployment-96994cd5f-mmhsb    1/1     Running   0          39m
demoapp-deployment-96994cd5f-qrjw8    1/1     Running   0          39m

查看deployment日志

# kubectl describe deployments -n demoapp
Name:                   demoapp-deployment
Namespace:              demoapp
CreationTimestamp:      Mon, 19 Jun 2023 16:19:48 +0800
Labels:                 <none>
Annotations:            deployment.kubernetes.io/revision: 2
                        kubernetes.io/change-cause: kubectl apply -f depoly-demoapp-v10.yaml
Selector:               app=demoapp,controller=demoapp
Replicas:               3 desired | 1 updated | 4 total | 4 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  0 max unavailable, 1 max surge
Pod Template:
  Labels:  app=demoapp
           controller=demoapp
  Containers:
   demoapp:
    Image:      ikubernetes/demoapp:v1.1
    Port:       80/TCP
    Host Port:  0/TCP
    Limits:
      cpu:     50m
      memory:  256Mi
    Requests:
      cpu:        50m
      memory:     256Mi
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status   Reason
  ----           ------   ------
  Available      True     MinimumReplicasAvailable
  Progressing    Unknown  DeploymentPaused
OldReplicaSets:  demoapp-deployment-96994cd5f (3/3 replicas created)
NewReplicaSet:   demoapp-deployment-6f798c7578 (1/1 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  36m    deployment-controller  Scaled up replica set demoapp-deployment-96994cd5f to 3
  Normal  ScalingReplicaSet  2m37s  deployment-controller  Scaled up replica set demoapp-deployment-6f798c7578 to 1

访问服务

# while sleep 1;do curl `kubectl get svc/demoapp-svc -n demoapp -o jsonpath="{.spec.clusterIP}"`:80;done
iKubernetes demoapp v1.0 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-96994cd5f-qrjw8, ServerIP: 172.20.89.158!
iKubernetes demoapp v1.0 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-96994cd5f-gwfh4, ServerIP: 172.20.44.194!
iKubernetes demoapp v1.1 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-6f798c7578-6vk69, ServerIP: 172.20.154.220!
iKubernetes demoapp v1.0 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-96994cd5f-mmhsb, ServerIP: 172.20.154.229!
iKubernetes demoapp v1.0 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-96994cd5f-qrjw8, ServerIP: 172.20.89.158!
iKubernetes demoapp v1.0 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-96994cd5f-gwfh4, ServerIP: 172.20.44.194!
iKubernetes demoapp v1.1 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-6f798c7578-6vk69, ServerIP: 172.20.154.220!
iKubernetes demoapp v1.0 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-96994cd5f-mmhsb, ServerIP: 172.20.154.229!
iKubernetes demoapp v1.0 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-96994cd5f-qrjw8, ServerIP: 172.20.89.158!
iKubernetes demoapp v1.0 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-96994cd5f-gwfh4, ServerIP: 172.20.44.194!
iKubernetes demoapp v1.1 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-6f798c7578-6vk69, ServerIP: 172.20.154.220!
相关的Pod列表也能够显示出旧版本ReplicaSet的所有Pod副本仍在正常运行,而同时新版本ReplicaSet对象也有了一个Pod实例,相关Service对象能够在其就绪后将一定比例的客户端流量引入到该Pod之上。运行足够长的一段时间后,若确认新版本应用没有必须通过回滚才能解决的问题,随后即可使用kubectl rollout resume命令继续后续更新步骤,以完成滚动更新过程。
你不可以回滚处于暂停状态的 Deployment,除非先恢复其执行状态。

恢复deployment更新

# kubectl rollout resume deployments/demoapp-deployment -n demoapp
deployment.apps/demoapp-deployment resumed

查看 Deployment 滚动更新状态

# kubectl rollout status deploy/demoapp-deployment -n demoapp
deployment "demoapp-deployment" successfully rolled out

查看ReplicaSet 

# kubectl get rs -n demoapp
NAME                            DESIRED   CURRENT   READY   AGE
demoapp-deployment-6f798c7578   3         3         3       14m
demoapp-deployment-96994cd5f    0         0         0       48m

查看pod

# kubectl get pod -n demoapp
NAME                                  READY   STATUS    RESTARTS   AGE
demoapp-deployment-6f798c7578-6vk69   1/1     Running   0          15m
demoapp-deployment-6f798c7578-hfxjz   1/1     Running   0          2m51s
demoapp-deployment-6f798c7578-v2gb8   1/1     Running   0          2m48s

访问服务

# while sleep 1;do curl `kubectl get svc/demoapp-svc -n demoapp -o jsonpath="{.spec.clusterIP}"`:80;done
iKubernetes demoapp v1.1 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-6f798c7578-hfxjz, ServerIP: 172.20.89.156!
iKubernetes demoapp v1.1 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-6f798c7578-6vk69, ServerIP: 172.20.154.220!
iKubernetes demoapp v1.1 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-6f798c7578-v2gb8, ServerIP: 172.20.44.219!
iKubernetes demoapp v1.1 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-6f798c7578-hfxjz, ServerIP: 172.20.89.156!
iKubernetes demoapp v1.1 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-6f798c7578-6vk69, ServerIP: 172.20.154.220!
iKubernetes demoapp v1.1 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-6f798c7578-v2gb8, ServerIP: 172.20.44.219!
iKubernetes demoapp v1.1 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-6f798c7578-hfxjz, ServerIP: 172.20.89.156!

更新Deployment 修订历史

# kubectl annotate deployment/demoapp-deployment kubernetes.io/change-cause="kubectl set image deployment/demoapp-deployment demoapp=ikubernetes/demoapp:v1.1 -n demoapp" -n demoapp
deployment.apps/demoapp-deployment annotated

查看 Deployment 修订历史

# kubectl rollout history deploy/demoapp-deployment -n demoapp
deployment.apps/demoapp-deployment 
REVISION  CHANGE-CAUSE
1         kubectl apply -f depoly-demoapp-v10.yaml
2         kubectl set image deployment/demoapp-deployment demoapp=ikubernetes/demoapp:v1.1 -n demoapp

版本回滚

回滚到上一个版本

# kubectl rollout undo deployment/demoapp-deployment -n demoapp
deployment.apps/demoapp-deployment rolled back

访问服务

# while sleep 1;do curl `kubectl get svc/demoapp-svc -n demoapp -o jsonpath="{.spec.clusterIP}"`:80;done
iKubernetes demoapp v1.0 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-96994cd5f-ndntl, ServerIP: 172.20.89.162!
iKubernetes demoapp v1.0 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-96994cd5f-grvn7, ServerIP: 172.20.44.220!
iKubernetes demoapp v1.0 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-96994cd5f-tjn85, ServerIP: 172.20.154.217!
iKubernetes demoapp v1.0 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-96994cd5f-ndntl, ServerIP: 172.20.89.162!
iKubernetes demoapp v1.0 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-96994cd5f-grvn7, ServerIP: 172.20.44.220!
iKubernetes demoapp v1.0 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-96994cd5f-tjn85, ServerIP: 172.20.154.217!
iKubernetes demoapp v1.0 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-96994cd5f-ndntl, ServerIP: 172.20.89.162!
iKubernetes demoapp v1.0 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-96994cd5f-grvn7, ServerIP: 172.20.44.220!
iKubernetes demoapp v1.0 !! ClientIP: 172.20.151.128, ServerName: demoapp-deployment-96994cd5f-tjn85, ServerIP: 172.20.154.217!

参考文档

https://kubernetes.io/zh-cn/docs/concepts/cluster-administration/manage-deployment/#canary-deployments

标签:kubectl,96994cd5f,金丝雀,Deployment,ServerIP,demoapp,deployment,k8s,172.20
From: https://www.cnblogs.com/wangguishe/p/17491307.html

相关文章

  • (转)kubernetes(k8s) yaml 文件详解2
    原文:https://juejin.cn/post/7202145223014252602#heading-0一、K8S支持的文件格式kubernetes支持YAML和JSON文件格式管理资源对象。JSON格式:主要用于api接口之间消息的传递YAML格式:用于配置和管理,YAML是一种简洁的非标记性语言,内容格式人性化,较易读1、yaml和json的主要区......
  • k8s pod版本升级与回滚
    创建应用depoly-demoapp-v10.yamlapiVersion:v1kind:Namespacemetadata:name:demoapp---apiVersion:v1kind:Servicemetadata:labels:app:demoappv10name:demoappv10namespace:demoappspec:ports:-name:http-8080port:8080......
  • K8s Kubectl 技巧集锦
    kubectl是Kubernetes的一个命令行管理工具,可用于Kubernetes上的应用部署和日常管理。本文列举了9个常见的kubectl命令,并总结了一些使用技巧,希望可以帮助系统管理员简化管理工作。一、使用Kubectl查询、创建、编辑和删除资源对于刚开始使用命令行工具的开发者,最保险的方......
  • k8s~volumeMounts资源的限制与作用
    当配置了本地存储的限制之后,当超出了这个限制,将会出现如下错误,你的pod将会失败Podephemerallocalstorageusageexceedsthetotallimitofcontainers2Gi.原因与解决你可能在pod中设置了本地存储的大小限制,当它达到后,将会出现这个错误,如下配置kind:DeploymentapiVer......
  • k8s 深入篇———— 一些容器操作的原理[三]
    前言简单介绍一下一些容器的操作原理。正文dockerexec是怎么做到进入容器里的呢。比如说:这里有一个容器,我们可以exec进去:dockerexec-itb265/bin/sh我们为什么能看到和容器内部一样的场景呢?首先我们知道了为什么容器进程只能看到规定的namespace了,那么如果我们......
  • CentOS7.9 k8s集群环境搭建
    环境搭建本次环境搭建需要安装三台Centos服务器(一主二从),k8s采用1.25.4版本主机安装安装虚拟机过程中注意下面选项的设置:操作系统环境:CPU(2C)内存(4G)硬盘(50G)语言选择:English软件选择:基础设施服务器分区选择:自动分区网络配置:按照下面配置网路地址信息主机名设置:按照下面信......
  • k8s 深入篇———— docker 镜像是什么[二]
    前言简单介绍一下docker的镜像。正文前面讲到了容器的工作原理了(namespace限制了时间,cgroup限制了资源),知道docker历史的也知道,docker之所以能够称为容器大佬,是因为其只做了容器。也就是做到了一次打包,到处运行的这种思想得到了实现。那么容器的镜像涉及思路是怎么样的呢?......
  • k8s 梳理及使用总结
    ---1.Kubernetes概述1.最初Google开发了1个叫Borg的系统(现在命名为Omega),来调度近20多亿个容器从2014年第1个版本发布以来,迅速得到了开源社区的追捧,?前,k8s已经成为了发展最快、市场占有率最高的容器编排引擎产品。---2.特点轻量级,资源消耗小开源弹性伸缩负载均衡IPVS---3.重要......
  • k8s 深入篇———— docker 是什么[一]
    前言简单的整理一下一些基本概念。正文简单运行一个容器:创建一个容器:dockerrun-itbusybox/bin/bash然后看下进程:ps-ef做了一个障眼法,使用的是pidnamespace方式,让容器内部只能看到由容器创建的进程。linux还有一些其他的机制:比如,MountNamespace,用于让被隔......
  • arm系统部署k8s
    一、Docker安装1、下载资源docker安装包地址:https://download.docker.com/linux/static/stable/aarch64/这里下载的是docker-20.10.20.tgz。解压后,将docker目录下文件拷贝到/usr/bin$tar-xfdocker-19.10.20.tgz$mvdocker/*/usr/bin2、配置system服务创建docker.socket文件$......