重磅出击:Rancher 2.4.x 迁移自定义k8s集群
connygpt 2024-11-17 08:47 10 浏览
本文永久链接: https://www.xtplayer.cn/rancher/rancher2.x-migrate-custom-k8s-cluster/
一、注意事项
- 在做操作前,先检查所有 Rancher 环境(源 Rancher 环境和目标 Rancher 环境)中节点的时间是不是已同步(重要)。
- 对于 Rancher 低于 v2.3.x 并且自定义 k8s 集群版本低于 v1.16 的环境,因为 K8S 集群 API 版本变化,迁移过去后会提示 API 版本不匹配,以及其他权限问题。在迁移之前,需要升级源 Rancher 环境和目标 Rancher 环境到 v2.4.x 版本,并升级自定义 k8s 集群到 v1.16 以上版本,然后再进行迁移。
- 不支持降级迁移。
- 集群导入到目标 Rancher 环境后,在没有确认集群迁移完全正常之前,保留源 Rancher 环境,以便集群回退。
二、基础配置(可选)
- 对于 docker run 单容器运行的源 Rancher 环境,为了操作方便,建议在源 Rancher 容器中执行以下命令安装文本编辑工具 vim,并配置自动补全,离线环境可忽略此步骤。
sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
apt update && apt install -y vim bash-com* jq
echo 'source <(kubectl completion bash)' >> ~/.bashrc
echo 'source /etc/bash_completion' >> ~/.bashrc
bash
- 对于源 Rancher 环境是 HA 架构的,可直接在 local 集群中操作。
- 准备待迁移集群的直连 kubecfg 文件所谓直连,就是不经过 Rancher Agent 代理直接与业务 K8S 通信。通过 Rancher UI 获取到的 kubecfg 配置文件默认是通过 Rancher Agent 进行代理。当集群迁移到目标 Rancher 环境后,如果 Agent 无法连接 Rancher server,那么后面将无法对自定义 K8S 集群做任何编辑操作。所以需要准备可以直连 K8S 的配置文件,以备不时之需。
# 进入容器
docker exec -ti <Rancher 容器 ID> bash
# 待迁移集群 ID,可通过浏览器地址栏查询
CLUSTER_ID=c-xxx
kubectl get secret c-${CLUSTER_ID} -n cattle-system -o=jsonpath='{.data.cluster}' \
| base64 --decode | jq .metadata.state | awk '{print substr($0,2,length($0)-2)}' \
> ${CLUSTER_ID}-kube-config.yml
sed -i 's/\\n/\n/g' ${CLUSTER_ID}-kube-config.yml && \
sed -i 's/\\"/"/g' ${CLUSTER_ID}-kube-config.yml
三、导出源 Rancher 环境中的 CRD 资源( Rancher 容器中或者 local 集群中操作 )
clusters.management.cattle.io (必须)
- 在源 Rancher UI 上查询并确定待迁移的集群 ID,通过浏览器地址栏可查看集群 ID。
- 执行以下命令再次查看集群 ID。
kubectl get --all-namespaces clusters.management.cattle.io
NAME AGE
c-wskbw 43m
- 执行以下命令导出 clusters YAML 资源。
CLUSTER_ID='' # clusters id
kubectl get clusters.management.cattle.io $CLUSTER_ID -oyaml > ${CLUSTER_ID}-clusters.yaml
projects.management.cattle.io (必须)
- 执行以下命令查看环境中所有的项目,以及对应的集群 ID。第一列的 NAMESPACE 对应 集群 ID;第二列 NAME 对应 项目 ID;
kubectl get projects.management.cattle.io --all-namespaces
NAMESPACE NAME AGE
c-bwl9m p-l86x6 17m
c-bwl9m p-lvdjq 17m
- 以集群 ID 为命名空间,执行以下命令导出单个集群全部项目资源。
CLUSTER_ID=''
kubectl -n $CLUSTER_ID get projects.management.cattle.io -oyaml > ${CLUSTER_ID}-projects.yaml
nodes.management.cattle.io (必须)
- 执行以下命令查看集群对应的主机管理配置。NAMESPACE 为集群 ID
kubectl get nodes.management.cattle.io --all-namespaces
NAMESPACE NAME AGE
c-bwl9m m-59601d9748cf 14m
- 以集群 ID 为命名空间,执行以下命令导出单个集群所有节点的 YAML 文件。
CLUSTER_ID=''
kubectl -n $CLUSTER_ID get nodes.management.cattle.io -oyaml > $CLUSTER_ID-nodes.yaml
secrets (必须)
- 创建集群会生成以下密文
kubectl get secrets --all-namespaces
NAMESPACE NAME TYPE DATA AGE
c-bwl9m default-token-nl7mh kubernetes.io/service-account-token 3 4m28s
cattle-global-data default-token-qgwn9 kubernetes.io/service-account-token 3 39m
cattle-system c-c-bwl9m Opaque 1 4m14s
cattle-system tls-rancher kubernetes.io/tls 2 39m
default default-token-rwm29 kubernetes.io/service-account-token 3 39m
kube-public default-token-6k2vc kubernetes.io/service-account-token 3 39m
kube-system default-token-wg7rg kubernetes.io/service-account-token 3 39m
p-l86x6 default-token-bz2pg kubernetes.io/service-account-token 3 4m28s
p-lvdjq default-token-7tbkn kubernetes.io/service-account-token 3 4m28s
user-vf5xr default-token-ktvrm kubernetes.io/service-account-token 3 21m
- kube* 命名空间相关的可以忽略,service-account-token* 类型的可以忽略,tls-rancher 可以忽略。
- 提取 cattle-system 命名空间下 集群 ID 相关的密文。
kubectl -n cattle-system get secrets
NAME TYPE DATA AGE
c-c-bwl9m Opaque 1 8m15s
default-token-xhl6d kubernetes.io/service-account-token 3 43m
tls-rancher kubernetes.io/tls 2 43m
CLUSTER_ID=''
kubectl -n cattle-system get secrets c-${CLUSTER_ID} -oyaml > $CLUSTER_ID-secrets.yaml
apps.project.cattle.io (可选)
如果迁移的集群启用了 cluster-monitoring 等应用商店 APP,需要导出 YAML 再导入目标 Rancher 环境,不然 Rancher 无法管理对应资源。
- 查看所有集群项目下部署的应用商店 APP。
kubectl get apps.project.cattle.io --all-namespaces
NAMESPACE NAME AGE
p-tjfmp wp-p-tjfmp 265d
p-w49bx demoma-p-w49bx 6m2s
p-w49bx mongodb-replicaset 19d
p-wfdpj cluster-monitoring 27d
p-wfdpj monitoring-operator 27d
p-wfdpj rancher-logging 47d
p-zkhr5 cluster-alerting 122d
p-zkhr5 cluster-monitoring 38d
p-zkhr5 longhorn-system 81d
p-zkhr5 monitoring-operator 38d
p-zkhr5 nfs-provisioner 229d
p-zkhr5 rabbitmq 18d
p-zkhr5 rancher-logging 9d
p-zkhr5 systemapp-demo 203d
- 通过 集群 ID 获取 项目 ID,并提取所有项目对应的 APP 的 YAML 文件。
CLUSTER_ID=xxx
PROJECT_ID=$( kubectl get project -n $CLUSTER_ID | grep -v 'NAME' | awk '{print $1}' )
APPS_NS=$( kubectl get apps.project.cattle.io --all-namespaces | awk '{ print $1 }' | grep -v 'NAMESPACE' )
for project_id in ${PROJECT_ID};
do
if echo ${APPS_NS} | grep ${project_id};
kubectl get app --all-namespaces | grep -v NAMESPACE | awk '{ print "kubectl get apps -n " $1" "$2 " -oyaml > " $1"-"$2".yaml" }' | sh -
fi
done;
multiclusterapps.management.cattle.io (可选)
与 apps.project.cattle.io 类型, 如果有多集群应用商店应用,也需要导出 YAML。
|
Pod(可选)安全策略
|
全局安全认证(可选)(authconfigs.management.cattle.io)
- 执行以下命令查看对应的认证提供商
kubectl get authconfigs.management.cattle.io --all-namespaces
NAME AGE
activedirectory 259d
adfs 259d
azuread 259d
freeipa 259d
github 259d
googleoauth 172d
keycloak 259d
local 259d
okta 259d
openldap 259d
ping 259d
- 根据实际配置导出对应提供商 yaml 文件
AUTH_PROVIDER=''
kubectl get authconfigs.management.cattle.io --all-namespaces \
$AUTH_PROVIDER -oyaml > authconfigs-${AUTH_PROVIDER}.yaml
users.management.cattle.io (可选)
|
注意: 用户、角色、角色绑定,如果要导出,则需一起导出。
clusterrole.rbac.authorization.k8s.io (可选)
- 创建用户时,会自动创建一个 clusterrole,比如 u-${user_id}-view,这个可以不用导出。
- 如果有自定义集群角色,可通过 clusterrole 名称查询并导出。
clusterrolebindings.rbac.authorization.k8s.io (可选)
- 创建用户时,会自动创建一个 clusterrolebindings,比如 grb-${user_id}-view
- 在 Rancher UI 上为集群添加成员的时候,会自动创建 clusterrolebindings。在集群迁移完成后可选择手动为集群添加成员。如果为大量用户配置了集群成员权限,为了减少手动操作的工作量,可以选择把这些 clusterrolebindings 一并导出,然后导入目的 Rancher local 集群。
roles.rbac.authorization.k8s.io (可选)
- 在 Rancher UI 上为项目添加成员的时候,会以 项目 ID 为命名空间自动创建对应权限的角色。在集群迁移完成后可选择手动为项目添加成员,这些角色也会自动重新创建。如果为大量用户配置了项目成员权限,为了减少手动操作的工作量,可以选择把这些角色一并导出,然后导入目的 Rancher local 集群。
- 如果有自定义角色,可通过 role 名称查询并导出。
- 以项目 ID 和集群 ID 来过滤 role
kubectl get role.rbac.authorization.k8s.io -A|grep 6zjs5
c-q4mfl p-6zjs5-projectmember 2021-03-04T08:26:54Z
p-6zjs5 edit 2021-03-04T08:26:54Z
p-6zjs5 project-member 2021-03-04T08:26:54Z
- 以集群 ID 和项目 ID 为 NAMESPACE 导出全部 yaml 文件
# 指定需要迁移的集群 ID
CLUSTER_ID=''
PROJECT_ID=$( kubectl get project -n ${CLUSTER_ID} |grep -v NAME | awk '{print $1}' )
NAMESPACE=$( echo ${CLUSTER_ID} ${PROJECT_ID} cattle-global-data )
for ns in $NAMESPACE ;
do
kubectl -n $ns get roles.rbac.authorization.k8s.io -oyaml > roles-$ns.yaml
done;
rolebindings.rbac.authorization.k8s.io (可选)
与角色具有相同逻辑。
- 以项目 ID 和集群 ID 来过滤 rolebindings
kubectl get rolebindings.rbac.authorization.k8s.io -A | grep 6zjs5
c-q4mfl p-6zjs5-prtb-zqb6j-project-member Role/project-member 2m8s
c-q4mfl p-6zjs5-u-6pz5k3vokn-member-project-member Role/project-member 31m
c-q4mfl rolebinding-692hm Role/p-6zjs5-projectmember 2m8s
c-q4mfl rolebinding-fhrwt Role/p-6zjs5-projectmember 31m
p-6zjs5 prtb-zqb6j-edit Role/edit 2m8s
p-6zjs5 prtb-zqb6j-project-member Role/project-member 2m8s
p-6zjs5 u-6pz5k3vokn-member-edit Role/edit 31m
p-6zjs5 u-6pz5k3vokn-member-project-member Role/project-member 31m
- 以集群 ID 和项目 ID 为 NAMESPACE 导出全部 yaml 文件
CLUSTER_ID=''
PROJECT_ID=$( kubectl get project -n $CLUSTER_ID |grep -v NAME | awk '{print $1}' )
NAMESPACE=$( echo ${CLUSTER_ID} ${PROJECT_ID} cattle-global-data )
for ns in $NAMESPACE ;
do
kubectl -n $ns get rolebindings.rbac.authorization.k8s.io -oyaml > roles-$ns.yaml
done;
四、目标 Rancher 环境中导入CRD 资源
- 将上一步导出的 YAML 文件依次导入到目标 Rancher 环境,除密文(secrets)外其他 YAML 可使用 kubeclt apply -f xxx.yaml 去导入。
- 因为密文(secrets)文件太大,需要通过 kubectl replace --force -f xxx 导入。
五、目标 Rancher UI 操作
创建 clusterregistrationtokens
在 YAML 文件导入目标 Rancher 环境后,访问https://demo.xxxxx.com/v3/clusters/<cluster_id>/clusterregistrationtokens 可以看到并没有注册命令,这个时候需要手动去创建。
- 访问 https://demo.xxxx.com/v3/clusters/<cluster_id>/clusterregistrationtokens 页面,点击右上角的 Create;
- 选择迁移的 集群 ID
- 点击Show Request,然后再点击 Send Request。如果显示状态码为201即执行成功;
- 执行完成后,在 clusterregistrationtokens 页面应该是可以看到如下的链接,复制自签名 ssl 证书 对应那条命令备用。
执行 Agent 导入命令
回到源 Rancher 环境,这个时候 k8s 集群还是可以正常访问,前面的操作只是将必要的 CRD 资源迁移到目标 Rancher 环境。
进入 需迁移集群 详情页面,然后点击 执行 kubectl 命令行 按钮,接着执行上一步骤中拷贝的 clusterregistrationtokens 命令。
六、CRD 资源清单
以下是 Rancher v2.4.13 的 CRD 资源清单,文章前面部分仅指出了常用的一些资源。如果有使用其他资源,可按照上述方法进行导出再导入目标集群。
|
七、异常回退
因为源 Rancher 环境保留了完整的配置信息,要想回退到源 Rancher 环境,只需将集群重新注册到源 Rancher 环境即可。
- 访问源 Rancher https://demo.cnrancher.com/v3/clusters/<cluster_id>/clusterregistrationtokens 页面 ;
- 定位到 insecureCommand,复制 insecureCommand 后面的命令,在需要迁移的 k8s 集群中执行。
相关推荐
- 3分钟让你的项目支持AI问答模块,完全开源!
-
hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开源的Next-Admin的最新更新。最近对这个项目做了一些优化,并集成了大家比较关注...
- 干货|程序员的副业挂,12个平台分享
-
1、D2adminD2Admin是一个完全开源免费的企业中后台产品前端集成方案,使用最新的前端技术栈,小于60kb的本地首屏js加载,已经做好大部分项目前期准备工作,并且带有大量示例代码,助...
- Github标星超200K,这10个可视化面板你知道几个
-
在Github上有很多开源免费的后台控制面板可以选择,但是哪些才是最好、最受欢迎的可视化控制面板呢?今天就和大家推荐Github上10个好看又流行的可视化面板:1.AdminLTEAdminLTE是...
- 开箱即用的炫酷中后台前端开源框架第二篇
-
#头条创作挑战赛#1、SoybeanAdmin(1)介绍:SoybeanAdmin是一个基于Vue3、Vite3、TypeScript、NaiveUI、Pinia和UnoCSS的清新优...
- 搭建React+AntDeign的开发环境和框架
-
搭建React+AntDeign的开发环境和框架随着前端技术的不断发展,React和AntDesign已经成为越来越多Web应用程序的首选开发框架。React是一个用于构建用户界面的JavaScrip...
- 基于.NET 5实现的开源通用权限管理平台
-
??大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!??今天小编推荐一款基于.NE...
- StreamPark - 大数据流计算引擎
-
使用Docker完成StreamPark的部署??1.基于h2和docker-compose进行StreamPark部署wgethttps://raw.githubusercontent.com/a...
- 教你使用UmiJS框架开发React
-
1、什么是Umi.js?umi,中文可发音为乌米,是一个可插拔的企业级react应用框架。你可以将它简单地理解为一个专注性能的类next.js前端框架,并通过约定、自动生成和解析代码等方式来辅助...
- 简单在线流程图工具在用例设计中的运用
-
敏捷模式下,测试团队的用例逐渐简化以适应快速的发版节奏,大家很早就开始运用思维导图工具比如xmind来编写测试方法、测试点。如今不少已经不少利用开源的思维导图组件(如百度脑图...)来构建测试测试...
- 【开源分享】神奇的大数据实时平台框架,让Flink&Spark开发更简单
-
这是一个神奇的框架,让Flink|Spark开发更简单,一站式大数据实时平台!他就是StreamX!什么是StreamX大数据技术如今发展的如火如荼,已经呈现百花齐放欣欣向荣的景象,实时处理流域...
- 聊聊规则引擎的调研及实现全过程
-
摘要本期主要以规则引擎业务实现为例,陈述在陌生业务前如何进行业务深入、调研、技术选型、设计及实现全过程分析,如果你对规则引擎不感冒、也可以从中了解一些抽象实现过程。诉求从硬件采集到的数据提供的形式多种...
- 【开源推荐】Diboot 2.0.5 发布,自动化开发助理
-
一、前言Diboot2.0.5版本已于近日发布,在此次发布中,我们新增了file-starter组件,完善了iam-starter组件,对core核心进行了相关优化,让devtools也支持对IAM...
- 微软推出Copilot Actions,使用人工智能自动执行重复性任务
-
IT之家11月19日消息,微软在今天举办的Ignite大会上宣布了一系列新功能,旨在进一步提升Microsoft365Copilot的智能化水平。其中最引人注目的是Copilot...
- Electron 使用Selenium和WebDriver
-
本节我们来学习如何在Electron下使用Selenium和WebDriver。SeleniumSelenium是ThoughtWorks提供的一个强大的基于浏览器的开源自动化测试工具...
- Quick 'n Easy Web Builder 11.1.0设计和构建功能齐全的网页的工具
-
一个实用而有效的应用程序,能够让您轻松构建、创建和设计个人的HTML网站。Quick'nEasyWebBuilder是一款全面且轻巧的软件,为用户提供了一种简单的方式来创建、编辑...
- 一周热门
- 最近发表
- 标签列表
-
- kubectlsetimage (56)
- mysqlinsertoverwrite (53)
- addcolumn (54)
- helmpackage (54)
- varchar最长多少 (61)
- 类型断言 (53)
- protoc安装 (56)
- jdk20安装教程 (60)
- rpm2cpio (52)
- 控制台打印 (63)
- 401unauthorized (51)
- vuexstore (68)
- druiddatasource (60)
- 企业微信开发文档 (51)
- rendertexture (51)
- speedphp (52)
- gitcommit-am (68)
- bashecho (64)
- str_to_date函数 (58)
- yum下载包及依赖到本地 (72)
- jstree中文api文档 (59)
- mvnw文件 (58)
- rancher安装 (63)
- nginx开机自启 (53)
- .netcore教程 (53)