6

基于Rancher应用商店实现K8s服务一键升级的方案介绍

 1 year ago
source link: https://www.51cto.com/article/713104.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

基于Rancher应用商店实现K8s服务一键升级的方案介绍-51CTO.COM

基于Rancher应用商店实现K8s服务一键升级的方案介绍
作者:移动Labs 2022-07-04 11:28:14
Rancher是一个开源的企业级多集群K8s管理平台,实现了K8s集群在混合云+本地数据中心的集中部署与管理,为采用容器的团队提供了完整的软件堆栈,解决了跨任何基础设施架构管理多个K8s集群的运维和安全挑战。

作者 | 郭杨勇,单位:智慧家庭运营中心成都业务支持中心

Labs 导读

随着云计算逐步向云原生靠拢,越来越多的传统企业应用进行了容器化的改造,且纷纷移植到了K8s集群中。通过云原生的 DevOps 应用开发模式,可以做到应用的敏捷开发,提升业务应用的迭代速度,高效响应用户需求。不同于传统的云计算平台,云原生的应用无法直接通过ssh等方式直接对云主机进行命名行操作,与传统的jenkins、gitlab-ci等持续交付中间件的对接都需要进行一定的改造。

Part 01 概述

K8s是业界对Kubernetes的一般简称,是云原生基金会(CNCF)的核心拳头产品,包含了用于管理和编排云原生容器的一套开源软件系统,它提供了云原生容器化部署、规划、更新、监控和维护的全套功能,基于K8s搭建的云原生平台,能很好的做到基于项目、命名空间的账号权限和资源配置的隔离。根据CNCF的最新统计,目前全球的后端开发者已有31%,超过560万人在使用K8s,K8s已成为云原生改造的首选解决方案。

Rancher是一个开源的企业级多集群K8s管理平台,实现了K8s集群在混合云+本地数据中心的集中部署与管理,为采用容器的团队提供了完整的软件堆栈,解决了跨任何基础设施架构管理多个K8s集群的运维和安全挑战。Rancher除了提供统一的K8s集群管理页面外,还提供了非常完善的API,方便用户与持续交付平台进行对接。Rancher管理页面同K8s开源社区的另一个重要工具-Helm相结合就可以实现K8s应用的一键自动升级,Helm 是管理 Kubernetes 的应用管理工具(https://v2.helm.sh),相当于centos的yum,python中pip,node中的npm。

Part 02 实现方法

以下将以Rancher2.6.3为例,逐步介绍如何通过Rancher的API来实现K8s应用的一键升级。首先,在进行API对接前,要做好基于应用商店的初始化操作。初始化操作包括:

1、将编排好的Helm配置文件包推送到统一的Helm应用商店中,并且通过“应用商店=》添加应用商店”将Helm应用商店配置添加到Rancher的商店设置中。

图片

2、在添加了应用商店配置后,就可以通过“应用商店=》启动”,查看或刷新应用列表,并且选择需要启动的应用,在指定命名空间后进行安装。

图片

其次,需要通过Rancher管理页面查看和确认应用列表更新、应用升级、应用回滚相关的API接口URL,同时创建API接口调用所需要的认证token。详细操作包括:

1、通过Rancher的功能菜单=》API&Keys,创建API Key并指定API key的作用范围。

图片
图片

2、通过Rancher管理页面的“应用商店=》管理=》API查看=》refresh”,查看并确认应用商店列表刷新的API。

图片
图片

商店列表刷新的API相对简单,具体格式如下:

curl -H"Authorization:Bearer {API_KEY}" \
-X POST \
-k --connect-timeout 20 -m 30 --retry-delay 2 --retry 3 \
{Rancher_Domain}/v3/projectCatalogs/{Project_ID}:{APP_Store}?action=refresh

可变字段中API_KEY就是第一步中创建的API key,Rancher_Domain是Rancher页面的域名,Project_ID为应用商店所作用项目的ID,APP_Store为需要刷新的应用商店的名称。

3、通过“应用商店=》应用列表=》API查看=》upgrade/rollback”,查看并确认应用相关的API接口信息。

图片
图片

应用更新的API就要复杂一点,不过也只需要修改几个重要的可变字段即可,具体格式如下:

curl -H "Authorization:Bearer {API_KEY}" \
-d "{"externalId":"catalog://?catalog='{APP_Store}'&template='{APP_Name}'&version='{APP_Version}'", "forceUpgrade":true, "valuesYaml":""}'"\
-X POST -k --connect-timeout 20 -m 30 --retry-delay 2 --retry 3 \
{Rancher_Domain}/v3/project/local:{Project_ID}/apps/{Project_ID}

可变字段中API_KEY为第一步中创建的API key,Rancher_Domain是Rancher页面的域名,Project_ID为应用商店所作用项目的ID,APP_Store为需要刷新的应用商店的名称,APP_Name为需要升级的应用名称,APP_Version为升级的目标版本号。

最后,就可以根据应用相关的API URL和API Key,编写应用列表刷新、应用升级/回滚的脚本。脚本包括了:

- 应用列表刷新脚本

curl -H"Authorization:Bearer token-pggq6:zlr95srxvb88vqdtctrt8h2d5k79k94h964x2vxvmhf7zk754ltskz" \
-X POST \
-k --connect-timeout 20 -m 30 --retry-delay 2 --retry 3 \
https://rancher.5gvr.komect.com/v3/projectCatalogs/p-6rt82:vr-chartmuseum?action=refresh

- 应用升级脚本

curl -H "Authorization:Bearer token-pggq6:zlr95srxvb88vqdtctrt8h2d5k79k94h964x2vxvmhf7zk754ltskz" \
-d "{"externalId":"catalog://?catalog='vr-chartmusem'&template='cmvr-ingress'&version='1.0.0.beta'", "forceUpgrade":true, "valuesYaml":""}'"\
-X POST -k --connect-timeout 20 -m 30 --retry-delay 2 --retry 3 \
https://rancher.5gvr.komect.com/v3/project/local:p-6rt82/apps/p-6rt82

到这里,就完成了Rancher自动刷新应用列表和应用升级所需API调用的脚本编写,只需要将相关脚本集成到Jenkins或Gitlab-ci等持续发布中间件的job中,就可以实现K8s应用的自动灰度升级,相对于传统的ssh脚本操作,要更加安全高效。

当然除了以上两个有关应用列表刷新和应用升级的API之外,有需要的时候也可以通过Rancher管理页面学习专门针对Deployment、Statefulset或者具体Pod的API接口,扩展更丰富的自动化运维功能。

[1]Demystifying Kubernetes in less than 100 slides  https://collabnix.com/demystifying-kubernetes-in-less-than-100-slides/

[2]CNCF Landscape Guide  https://landscape.cncf.io/guide#orchestration-management--scheduling-orchestration

[3]Rancher中文文档  https://docs.rancher.cn/​


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK