作者 | 郭杨勇,单位:智慧家庭运营中心成都业务支持中心
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/