重磅出击: Rancher 2.4.x 迁移自定义 k8s 集群
本文永久链接: 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.listapt 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-xxxkubectl 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.ymlsed -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.ioNAME 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-namespacesNAMESPACE 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
为集群 IDkubectl get nodes.management.cattle.io --all-namespacesNAMESPACE 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-namespacesNAMESPACE 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 secretsNAME 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-namespacesNAMESPACE 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}; doif 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。
kubectl get multiclusterapps.management.cattle.io --all-namespaces
Pod(可选)安全策略
kubectl get podsecuritypolicytemplates.management.cattle.io
全局安全认证(可选)(authconfigs.management.cattle.io)
执行以下命令查看对应的认证提供商
kubectl get authconfigs.management.cattle.io --all-namespacesNAME 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 (可选)
# 排除本地 admin
USERS=$( kubectl get users.management.cattle.io --all-namespaces | \
grep -v user- | grep -v NAME | awk '{print $1}' )# 轮训所有用户,分别导出每个用户的 YAML 文件
for users in $USERS;
dokubectl get users.management.cattle.io $users --all-namespaces -oyaml > user-${users}.yaml;
done;
注意: 用户、角色、角色绑定,如果要导出,则需一起导出。
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 ; dokubectl -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 ; dokubectl -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 资源清单,文章前面部分仅指出了常用的一些资源。如果有使用其他资源,可按照上述方法进行导出再导入目标集群。
kubectl get crd| grep management.cattle.ioauthconfigs.management.cattle.io 2021-03-04T06:47:55Z
catalogs.management.cattle.io 2021-03-04T06:47:55Z
catalogtemplates.management.cattle.io 2021-03-04T06:47:55Z
catalogtemplateversions.management.cattle.io 2021-03-04T06:47:55Z
cisbenchmarkversions.management.cattle.io 2021-03-04T06:47:56Z
cisconfigs.management.cattle.io 2021-03-04T06:47:56Z
clusteralertgroups.management.cattle.io 2021-03-04T06:47:55Z
clusteralertrules.management.cattle.io 2021-03-04T06:47:55Z
clusteralerts.management.cattle.io 2021-03-04T06:47:55Z
clustercatalogs.management.cattle.io 2021-03-04T06:47:55Z
clusterloggings.management.cattle.io 2021-03-04T06:47:55Z
clustermonitorgraphs.management.cattle.io 2021-03-04T06:47:55Z
clusterregistrationtokens.management.cattle.io 2021-03-04T06:47:55Z
clusterroletemplatebindings.management.cattle.io 2021-03-04T06:47:55Z
clusters.management.cattle.io 2021-03-04T06:47:55Z
clusterscans.management.cattle.io 2021-03-04T06:47:55Z
clustertemplaterevisions.management.cattle.io 2021-03-04T06:47:56Z
clustertemplates.management.cattle.io 2021-03-04T06:47:56Z
composeconfigs.management.cattle.io 2021-03-04T06:47:55Z
dynamicschemas.management.cattle.io 2021-03-04T06:47:55Z
etcdbackups.management.cattle.io 2021-03-04T06:47:55Z
features.management.cattle.io 2021-03-04T06:47:55Z
globaldnses.management.cattle.io 2021-03-04T06:47:56Z
globaldnsproviders.management.cattle.io 2021-03-04T06:47:56Z
globalrolebindings.management.cattle.io 2021-03-04T06:47:55Z
globalroles.management.cattle.io 2021-03-04T06:47:55Z
groupmembers.management.cattle.io 2021-03-04T06:47:55Z
groups.management.cattle.io 2021-03-04T06:47:55Z
kontainerdrivers.management.cattle.io 2021-03-04T06:47:55Z
monitormetrics.management.cattle.io 2021-03-04T06:47:55Z
multiclusterapprevisions.management.cattle.io 2021-03-04T06:47:55Z
multiclusterapps.management.cattle.io 2021-03-04T06:47:55Z
nodedrivers.management.cattle.io 2021-03-04T06:47:55Z
nodepools.management.cattle.io 2021-03-04T06:47:55Z
nodes.management.cattle.io 2021-03-04T06:47:55Z
nodetemplates.management.cattle.io 2021-03-04T06:47:55Z
notificationtemplates.management.cattle.io 2021-03-04T06:47:55Z
notifiers.management.cattle.io 2021-03-04T06:47:55Z
podsecuritypolicytemplateprojectbindings.management.cattle.io 2021-03-04T06:47:55Z
podsecuritypolicytemplates.management.cattle.io 2021-03-04T06:47:55Z
preferences.management.cattle.io 2021-03-04T06:47:55Z
projectalertgroups.management.cattle.io 2021-03-04T06:47:55Z
projectalertrules.management.cattle.io 2021-03-04T06:47:55Z
projectalerts.management.cattle.io 2021-03-04T06:47:55Z
projectcatalogs.management.cattle.io 2021-03-04T06:47:55Z
projectloggings.management.cattle.io 2021-03-04T06:47:55Z
projectmonitorgraphs.management.cattle.io 2021-03-04T06:47:55Z
projectnetworkpolicies.management.cattle.io 2021-03-04T06:47:56Z
projectroletemplatebindings.management.cattle.io 2021-03-04T06:47:56Z
projects.management.cattle.io 2021-03-04T06:47:56Z
rkeaddons.management.cattle.io 2021-03-04T06:47:56Z
rkek8sserviceoptions.management.cattle.io 2021-03-04T06:47:56Z
rkek8ssystemimages.management.cattle.io 2021-03-04T06:47:56Z
roletemplates.management.cattle.io 2021-03-04T06:47:56Z
samltokens.management.cattle.io 2021-03-04T06:47:56Z
settings.management.cattle.io 2021-03-04T06:47:56Z
templatecontents.management.cattle.io 2021-03-04T06:47:56Z
templates.management.cattle.io 2021-03-04T06:47:56Z
templateversions.management.cattle.io 2021-03-04T06:47:56Z
tokens.management.cattle.io 2021-03-04T06:47:56Z
userattributes.management.cattle.io 2021-03-04T06:47:56Z
users.management.cattle.io 2021-03-04T06:47:56Z
七、异常回退
因为源 Rancher 环境保留了完整的配置信息,要想回退到源 Rancher 环境,只需将集群重新注册到源 Rancher 环境即可。
访问源 Rancher
https://demo.cnrancher.com/v3/clusters/<cluster_id>/clusterregistrationtokens
页面 ;定位到
insecureCommand
,复制insecureCommand
后面的命令,在需要迁移的 k8s 集群中执行。
重磅出击: Rancher 2.4.x 迁移自定义 k8s 集群相关推荐
- dubbo k8s 服务发现_将Dubbo微服务迁移到k8s集群环境中前的思考与落地
将Dubbo微服务迁移到k8s中的思考与落地 说到容器化,不得不提kubernetes这个集群编排系统,它是一个开源系统,用于容器化应用的自动部署.扩缩和管理. Kubernetes 将构成应用的容器 ...
- 强大多云混合多K8S集群管理平台Rancher入门实战
文章目录 概述 定义 为何使用 其他产品 安装 简述 规划 基础环境 Docker安装 Rancher安装 创建用户 创建集群 添加Node节点 配置kubectl 创建项目和名称空间 发布应用 偏好 ...
- 如何在Rancher 2.2 Preview2上部署和管理多K8s集群应用
Rancher 2.2 Preview2于近日全面发布,这一版本包含了许多K8S集群操作的强大特性.本文将详细介绍多集群应用这一特性,让您可以在短时间内更新集群,大大提升工作效率. 近日,全球领先的容 ...
- 如何在Rancher 2.2 Preview2上部署和管理多K8s集群应用 1
2019独角兽企业重金招聘Python工程师标准>>> Rancher 2.2 Preview2于近日全面发布,这一版本包含了许多K8S集群操作的强大特性.本文将详细介绍多集群应用这 ...
- Rancher RKE K8s 集群 etcd 恢复
背景 在 Rancher 中基于 RKE 创建的 K8s 集群,因为服务器磁盘故障,导致 3个 master 节点有2个节点的 etcd 数据文件损坏,导致整个集群不可用. etcd 三个节点集群时, ...
- rancher坏了或删除,继续使用k8s集群
docker run -d --privileged=true --restart=unless-stopped -p 80:80 -p 8443:443 -v /opt/service/ranche ...
- RKE部署Rancher v2.5.8 HA高可用集群 以及常见错误解决
此博客,是根据Rancher官网文档,使用RKE测试部署最新发布版 Rancher v2.5.8 高可用集群的总结文档.Rancher文档 | K8S文档 | Rancher | Rancher文档 ...
- 使用RKE部署Rancher v2.5.8 HA高可用集群
文章目录 一 了解 Rancher 1 关于Helm 2 关于RKE 3 关于K3S 4 Rancher 名词解释 4.1 仪表盘 4.2 项目 4.3 多集群应用 4.4 应用商店 4.5 Ranc ...
- k8s ubuntu cni_手把手教你使用RKE快速部署K8S集群并部署Rancher HA
作者:杨紫熹 原文链接: https://fs.tn/post/PmaL-uIiQ/ RKE全称为Rancher Kubernetes Engine,是一款经过CNCF认证的开源Kubernetes发 ...
- 如何通过rancher部署k8s集群
目录 1 安装前准备 2 安装rancher 3 配置Rancher 4 创建k8s集群 最近的工作中需要使用到K8S,而面临的第一个问题就是如何部署一个K8S集群环境.现有多种部署方式,如:kube ...
最新文章
- Swift3.0带来的变化汇总系列一——字符串与基本运算符中的变化
- 电大计算机基础知识试题是什么样的,计算机应用基础知识(电大试题)
- 分布式任务调度平台XXL-JOB本地配置可能遇到的问题和解决方案
- zabbix 3.2 mysql模板_Zabbix-3.0.3使用自带模板监控MySQL
- Java文件下载详解
- 学习编程的条件是什么?
- ASP.NET刷新页面的六种方法(转) 包括在跳转的时候使用提示
- Linux的tasklet函数详解
- 神经图灵机NTM —— 元学习
- 【全套完结】模拟电子技术基础——全套实验手册及仿真工艺实习【建议保存】
- 中孚计算机保密 卸载,智华计算机终端保密检查系统怎样卸载
- vs2015如何安装vsix扩展工具
- 用c语言写一个求和的程序,用C语言编写一个“等比数列求和”的程序?
- PHP生成腾讯云API签名
- Java反序列化漏洞:在受限环境中从漏洞发现到获取反向Shell
- 项目中对微信昵称特殊字符的处理
- 找出知晓秘密的所有专家
- 科技爱好者周刊(第 151 期):NFT 是什么,听说能赚钱
- 御坂网络(枚举基准,二分图)
- 8,verilog基本逻辑运算
热门文章
- 网站模板制作有什么技巧呢?
- java 手机端开发步骤_移动端页面开发流程
- 转载.NET技术-.NET各大网站-编程技术网址 - Road - 博客园
- poi 默认2位小数_Poi excel设置小数位数
- Git基础-生成SSH密钥+配置密钥到远程仓库中
- Visual SourceSafe Explorer界面出现乱码+字体翻转
- 卡内基梅隆大学计算机科学博士,美国卡内基梅隆大学博士需要几年
- Firebug 网络监视器使用教程英文
- python中梅花数_梅花易数中的“数字”
- 人力资源管理六大模块体系解读