首页 > 其他分享 >k8s学习--Traffic Shifting 流量接入

k8s学习--Traffic Shifting 流量接入

时间:2024-06-15 20:57:35浏览次数:21  
标签:metallb kubectl rollouts -- demo yaml Shifting argo Traffic

文章目录


应用

环境

虚拟机

Ip主机名cpu内存硬盘
192.168.10.11master012cpu双核4G100G
192.168.10.12worker012cpu双核4G100G
192.168.10.13worker022cpu双核4G100G

版本 centos7.9
已部署k8s-1.27

一、Argo rollouts安装

均在master节点操作

1. 在Kubernetes集群中安装argo rollouts

kubectl create namespace argo-rollouts
wget https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml
kubectl -n argo-rollouts apply -f install.yaml 
kubectl -n argo-rollouts get all

在这里插入图片描述

2.安装argo rollouts的kubectl plugin

还可以安装一个 kubectl 插件,对于命令行管理和可视化发布非常方便。使用 curl 安装 Argo Rollouts kubectl 插件

curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64
chmod +x kubectl-argo-rollouts-linux-amd64
mv kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts

执行下面的命令来验证插件是否安装成功

kubectl argo rollouts version

在这里插入图片描述

3. Argo-Rollouts Dashboard

Argo Rollouts Kubectl 插件可以提供一个本地 Dashboard,来可视化你的 Rollouts。
要启动这个 Dashboard,需要在包含 Rollouts 资源对象的命名空间中运行 kubectl argo rollouts dashboard 命令,然后访问localhost:3100 即可。

kubectl argo rollouts dashboard &

windows浏览器访问:192.168.10.11:3100
在这里插入图片描述
过程比较漫长,可以先做下面部分
在这里插入图片描述
点击 Rollout 可以进行详细页面,在详细页面可以看到Rollout 的配置信息,还可以直接在 UI 界面上执行一些常用的操作,比如重启、重启、中断等。
在这里插入图片描述

二、负载均衡器metallb部署

1. 修改kube-proxy代理模式

kubectl get configmaps -n kube-system

在这里插入图片描述

kubectl edit configmap kube-proxy -n kube-system

修改两处
strictARP 由原来的flase修改为true
mode 添加ipvs
在这里插入图片描述

kubectl rollout restart daemonset kube-proxy -n kube-system

2. metallb部署

服务器连接不了时,可在vpn连接后,Windows浏览器中访问

https://raw.githubusercontent.com/metallb/metallb/v0.14.5/config/manifests/metallb-native.yaml

看到内容后复制创建文件

vim metallb-native.yaml

使用创建的文件metallb-native.yaml进行部署

kubectl apply -f metallb-native.yaml
 kubectl -n metallb-system get pod

在这里插入图片描述
等待一会,可通过查看描述信息跟踪pod的运行状态,长时间无法完成下载时,各节点重启docker
查看描述信息

kubectl describe pod pod名称

3.IP地址池准备

vim ippool.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: ippool
  namespace: metallb-system
spec:
  addresses:
  - 192.168.10.240-192.168.10.250
kubectl apply -f ippool.yaml

查看地址池信息:

kubectl -n metallb-system get ipaddresspool

在这里插入图片描述

4.开启二层通告

vim L2.yaml
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: example
  namespace: metallb-system
kubectl apply -f L2.yaml

三、Traffic Shifting 流量接入

1.服务代理ingress nginx部署

Windows浏览器打开文件:

https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/baremetal/deploy.yaml

复制网页文件内容,创建deploy.yaml文件

vim deploy.yaml

复制文件内容
修改此行 type: NodePort
为 type: LoadBalancer
修改前
在这里插入图片描述
修改后
在这里插入图片描述

执行yaml文件并查看

kubectl apply -f deploy.yaml
kubectl -n ingress-nginx get pod,svc

在这里插入图片描述

2.获取应用YAML部署描述文件

mkdir /root/tsdir
cd /root/tsdir

windows浏览器打开文件

https://raw.githubusercontent.com/argoproj/argo-rollouts/master/docs/getting-started/nginx/rollout.yaml

复制网页内容,创建rollout.yaml文件
为了方便测试把setWeight: 5修改为setWeight: 50

vim rollout.yaml

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: rollouts-demo
spec:
  replicas: 1
  strategy:
    canary:
      canaryService: rollouts-demo-canary
      stableService: rollouts-demo-stable
      trafficRouting:
        nginx:
          stableIngress: rollouts-demo-stable
      steps:
      - setWeight: 50
      - pause: {}
  revisionHistoryLimit: 2
  selector:
    matchLabels:
      app: rollouts-demo
  template:
    metadata:
      labels:
        app: rollouts-demo
    spec:
      containers:
      - name: rollouts-demo
        image: argoproj/rollouts-demo:blue
        ports:
        - name: http
          containerPort: 8080
          protocol: TCP
        resources:
          requests:
            memory: 32Mi
            cpu: 5m

上面的资源清单中,我们定义了一个 rollouts-demo 的 Rollout 资源,它的 canaryService 和 stableService 分别引用了两个 Service 资源, stableIngress 引用了一个 Ingress 资源,steps 定义了金丝雀发布的步骤,这里我们定义了两个步骤,第一个步骤将权重设置为 50%,第二个步骤是暂停,这样就可以在第一个步骤中将 50% 的流量发送到金丝雀上,然后手动发布,最后在升级的剩余时间内逐渐自动增大流量。
其中 canary.trafficRouting.nginx.stableIngress 中引用的 Ingress 需要有一个 host 规则,该规则具有针对 canary.stableService 下引用的服务的后端。

windows浏览器打开文件
复制网页内容到word文件中,将文件中的#行删除后复制到linux系统services.yaml文件
因为带注释会有问题

https://raw.githubusercontent.com/argoproj/argo-rollouts/master/docs/getting-started/nginx/services.yaml

vim services.yaml

apiVersion: v1
kind: Service
metadata:
  name: rollouts-demo-canary
spec:
  ports:
  - port: 80
    targetPort: http
    protocol: TCP
    name: http
  selector:
    app: rollouts-demo

---
apiVersion: v1
kind: Service
metadata:
  name: rollouts-demo-stable
spec:
  ports:
  - port: 80
    targetPort: http
    protocol: TCP
    name: http
  selector:
    app: rollouts-demo

从配置文件可以看出Rollout里用canaryService和stableService分别定义了该应用灰度的Service Name(rollouts-demo-canary)和当前版本的Service Name(rollouts-demo-stable)。而且rollouts-demo-canary 和 rollouts-demo-stable的service的内容是一样的。
最后还需要定义一个 Ingress 对象:

windows浏览器打开文件
复制网页内容到word文件中,将文件中的#行删除后复制到linux系统ingress.yaml文件

https://raw.githubusercontent.com/argoproj/argo-rollouts/master/docs/getting-started/nginx/ingress.yaml

vim ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: rollouts-demo-stable
spec:
  ingressClassName: nginx
  rules:
  - host: www.test.com		# 对外发布的域名
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: rollouts-demo-stable
            port:
              number: 80

3.部署应用

kubectl apply -f rollout.yaml
 kubectl apply -f services.yaml
  kubectl apply -f ingress.yaml

查看

kubectl get rollout

在这里插入图片描述
kubectl get pod
在这里插入图片描述

kubectl get service

在这里插入图片描述

kubectl get ingress

在这里插入图片描述
我们可以注意到新增了一个名为 rollouts-demo-rollouts-demo-stable-canary 的 Ingress 对象。这个对象是 canary ingress,它是 nginx.stableIngress 下引用的用户管理 Ingress 的克隆。 nginx ingress 控制器使用它来实现金丝雀流量分割。生成的入口的名称是使用 --canary 制定的。

观察rollouts-demo-rollouts-demo-stable-canary的内容如下:

kubectl get ingress rollouts-demo-rollouts-demo-stable-canary -o yaml

在这里插入图片描述

4.访问应用

客户端主机修改/etc/hosts文件
192.168.10.240 www.test.com

通过域名访问,可以看到如下界面。
在这里插入图片描述

4.更新应用

现在通过以下命令来进行应用更新操作。

kubectl argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow

在这里插入图片描述

kubectl argo rollouts get rollout rollouts-demo

在这里插入图片描述
然后可以看到rollouts-demo-rollouts-demo-stable-canary的ingress的annotations中新增了两个参数,如下:

kubectl get ingress rollouts-demo-rollouts-demo-stable-canary -o yaml

在这里插入图片描述
我们发现它比原始 Ingress 有以下变化:
• 注解中添加了两个额外的 NGINX 特定金丝雀注解。
• Ingress 规则将有一条将后端指向金丝雀服务的规则。

随着 Rollout 逐步进行,canary-weight 注解将调整以匹配步骤的当前 setWeight。NGINX Ingress 控制器检查原始 Ingress、金丝雀 Ingress 和金丝雀权重注解,以确定在两个入口之间分配的流量百分比。

然后可以通过验证结果来判断是否继续还是终止。

如果继续使用如下命令,可以执行 promote 命令来将Rollout 推进到下一个步骤,这样就完成了金丝雀发布:

kubectl argo rollouts promote rollouts-demo

在这里插入图片描述

kubectl argo rollouts get rollout rollouts-demo

在这里插入图片描述
如果终止使用如下命令:

kubectl-argo-rollouts undo rollouts-demo --to-revision=1

在这里插入图片描述

kubectl argo rollouts get rollout rollouts-demo

在这里插入图片描述

 kubectl argo rollouts abort rollouts-demo

在这里插入图片描述

kubectl argo rollouts get rollout rollouts-demo

在这里插入图片描述
但是我们可以看到Status是Degraded状态而并非Healthy状态,我们有必须要将其变成Healthy状态。最简单的办法就是执行如下命令重新发布一下版本:

kubectl argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow
kubectl argo rollouts get rollout rollouts-demo

在这里插入图片描述

标签:metallb,kubectl,rollouts,--,demo,yaml,Shifting,argo,Traffic
From: https://blog.csdn.net/lwxvgdv/article/details/139614333

相关文章

  • 能量项链(C++)
    题目描述在喵星星球上,每个喵星人都随身佩带着一串能量项链。在项链上有N颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是喵星人吸收能量的一种......
  • 软件测试——三、软件测试的分类
    按测试阶段划分:单元测试、集成测试、系统测试、验收测试单元测试:针对程序源代码进行测试集成测试:又称接口测试,针对模块之间访问地址进行测试系统测试:对整个系统进行测试,包括功能、兼容、文档等测试验收测试:主要分为内测、公测,使用不同人群来发掘项目缺陷按测试方法:黑盒......
  • django中orm的使用
    Orm是django连接mysql数据库的工具,用户可以通过orm实现对数据库的增删改查。1.启动mysql创建数据库在cmd中输入mysql-uroot-p后再输入密码运行mysql然后创建数据库:createdatabase数据库名DEFAULTCHARSETutf8COLLATEutf8_general_ci;2让django链接数据库在setting......
  • Python 潮流周刊#56:NumPy 2.0 里更快速的字符串函数(摘要)
    本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。本期周刊分享了12篇文章,12个开源项目,赠书5本,全文2100字。(PS.全新的赠......
  • linux内存管理(八)- 反向映射RMAP
    这里有一篇博客讲的不错。linux内存管理笔记(三十八)----反向映射_linux反向映射-CSDN博客页表是把虚拟地址映射到物理页面,但是如何根据一个物理页找到所有映射它的pte呢?答案是用反向映射ReverseMapping(RMAP)。这在页面回收中很有用。回收页面需要将到物理页的映射断开(改一下pte......
  • Charles抓包工具
    一.Charles介绍、安装、汉化跨平台的抓包工具:Windows、linux、mac它是基于http、https协议的道代理服务器官网:https://www.charlesproxy.com/latest-release/download.do特点:半免费可以破解和汉化,仅供学习优点:1.支持按照域名查看、按接口列表的方式2.弱网测试非常友好,直接......
  • 奥赛一本通 旅行问题
    //旅行问题.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。//#include<iostream>#include<deque>#include<cstring>usingnamespacestd;/*http://ybt.ssoier.cn:8088/problem_show.php?pid=1600原题来自:POI2004John打算驾驶一辆汽车周游一个环......
  • [转]考试 PL-500 学习指南:Microsoft Power Automate RPA 开发人员
    考试PL-500学习指南:MicrosoftPowerAutomateRPA开发人员|MicrosoftLearn技能概览设计自动化(25-30%)开发自动化(45-50%)部署和管理自动化(20-25%)设计自动化(25-30%)使用PowerAutomate特性和功能设计自动化利用PowerAutomate生态系统区......
  • 一文了解Spark引擎的优势及应用场景
    Spark引擎诞生的背景Spark的发展历程可以追溯到2009年,由加州大学伯克利分校的AMPLab研究团队发起。成为Apache软件基金会的孵化项目后,于2012年发布了第一个稳定版本。以下是Spark的主要发展里程碑:初始版本发布:2010年开发的MateiZaharia的研究项目成为Spark的前身。在2010年......
  • hadoop伪分布式安装
    配置ssh要点:要求免密码登陆cd~/.sshssh-keygen-trsacat./id_rsa.pub>>./authorized_keysHadoop伪分布式安装#java1.8!importantJAVA必须安装1.8,不要安装高版本,会不兼容wgethttps://repo.huaweicloud.com/java/jdk/8u201-b09/jdk-8u201-linux-x64.tar.gzsudom......