Rancher 系列文章 -Rancher v2.6 使用脚本实现导入集群

简介: Rancher 系列文章 -Rancher v2.6 使用脚本实现导入集群

概述

最近在玩 Rancher, 先从最基本的功能玩起, 目前有几个已经搭建好的 K8S 集群, 需要批量导入, 发现 官网已经有批量导入的文档 了. 根据 Rancher v2.6 进行验证微调后总结经验.

1. Rancher UI 获取创建集群参数

  1. 访问Rancher_URL/v3/clusters/,单击右上角“Create”,创建导入集群:

  2. 在参数填写页面中,修改以下参数:
  • dockerRootDir 默认为/var/lib/docker, 如果 dockerroot 路径有修改,需要修改此配置路径;
  • enableClusterAlerting(可选) 根据需要选择是否默认开启集群告警;
  • enableClusterMonitoring(可选) 根据需要选择是否默认开启集群监控;
  • name(必填) 设置集群名称,名称具有唯一性,不能与现有集群名称相同;
  1. 配置好参数后单击Show Request
  2. 在弹出的窗口中,复制 API RequestHTTP Request:{} 中的内容,此内容即为创建的集群的 API 参数;
#!/bin/bash
api_url='https://rancher-demo.example.com'
api_token='token-dbkgj:7pqf5rrjmlxxxxxxxxxxxxxxxxxxxxxxxtrnfljwtxh'
cluster_name=$1
create_cluster_data()
{
  cat <<EOF
{
 "agentEnvVars": [],
 "aksConfig": null,
 "aliyunEngineConfig": null,
 "amazonElasticContainerServiceConfig": null,
 "answers": null,
 "azureKubernetesServiceConfig": null,
 "clusterTemplateRevisionId": "",
 "defaultClusterRoleForProjectMembers": "",
 "defaultPodSecurityPolicyTemplateId": "",
 "dockerRootDir": "/var/lib/docker",
 "eksConfig": null,
 "enableClusterAlerting": false,
 "enableClusterMonitoring": false,
 "gkeConfig": null,
 "googleKubernetesEngineConfig": null,
 "huaweiEngineConfig": null,
 "k3sConfig": null,
 "localClusterAuthEndpoint": null,
 "name": "$cluster_name",
 "rancherKubernetesEngineConfig": null,
 "rke2Config": null,
 "scheduledClusterScan": null,
 "windowsPreferedCluster": false
}
EOF
}
curl -k -X POST \
    -H "Authorization: Bearer ${api_token}" \
    -H "Content-Type: application/json" \
    -d "$(create_cluster_data)" $api_url/v3/clusters
BASH

2. 创建集群

  1. 保存以上代码为脚本文件,最后执行脚本。
./rancher_import_cluster.sh <your-cluster-name>
BASH
  1. 脚本执行完成后,集群状态如下所示,其状态为Provisioning;

3. 创建注册命令

这一步可能不需要, 创建集群时就会自动生成 clusterregistrationtokens

这里又生成了一遍, 会导致有多条 clusterregistrationtokens

4. 获取主机注册命令

复制并保存以下内容为脚本文件,修改前三行api_urltokencluster_name,然后执行脚本。

#!/bin/bash
api_url='https://rancher-demo.example.com'
api_token='token-dbkgj:7pqf5rrjmlbgtssssssssssssssssssssssssssssnfljwtxh'
cluster_name=$1
cluster_ID=$(curl -s -k -H "Authorization: Bearer ${api_token}" $api_url/v3/clusters | jq -r ".data[] | select(.name == \"$cluster_name\") | .id" )
# nodeCommand
#curl -s -k -H "Authorization: Bearer ${api_token}" $api_url/v3/clusters/${cluster_ID}/clusterregistrationtokens | jq -r .data[].nodeCommand
# command
#curl -s -k -H "Authorization: Bearer ${api_token}" $api_url/v3/clusters/${cluster_ID}/clusterregistrationtokens | jq -r .data[].command
# insecureCommand
curl -s -k -H "Authorization: Bearer ${api_token}" $api_url/v3/clusters/${cluster_ID}/clusterregistrationtokens | jq -r .data[].insecureCommand
BASH

📝Notes:

这里看需要, 有 3 种命令:

  1. nodeCommand: 直接通过 docker 来执行的;
  2. command: 通过kubectl 来执行的;
  3. insecureCommand: 私有 CA 证书, 通过 curl 结合 kubectl 来执行的.

这里我使用了第三种

AllInOne

#!/bin/bash
api_url='https://rancher-demo.example.com'
api_token='token-dbkgj:7pqf5rrjxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxljwtxh'
cluster_name=$1
create_cluster_data()
{
  cat <<EOF
{
 "agentEnvVars": [],
 "aksConfig": null,
 "aliyunEngineConfig": null,
 "amazonElasticContainerServiceConfig": null,
 "answers": null,
 "azureKubernetesServiceConfig": null,
 "clusterTemplateRevisionId": "",
 "defaultClusterRoleForProjectMembers": "",
 "defaultPodSecurityPolicyTemplateId": "",
 "dockerRootDir": "/var/lib/docker",
 "eksConfig": null,
 "enableClusterAlerting": false,
 "enableClusterMonitoring": false,
 "gkeConfig": null,
 "googleKubernetesEngineConfig": null,
 "huaweiEngineConfig": null,
 "k3sConfig": null,
 "localClusterAuthEndpoint": null,
 "name": "$cluster_name",
 "rancherKubernetesEngineConfig": null,
 "rke2Config": null,
 "scheduledClusterScan": null,
 "windowsPreferedCluster": false
}
EOF
}
curl -k -X POST \
    -H "Authorization: Bearer ${api_token}" \
    -H "Content-Type: application/json" \
    -d "$(create_cluster_data)" $api_url/v3/clusters >/dev/null
if [$? -eq 0]; then
    cluster_ID=$(curl -s -k -H "Authorization: Bearer ${api_token}" $api_url/v3/clusters | jq -r ".data[] | select(.name == \"$cluster_name\") | .id" )
    # insecureCommand
    curl -s -k -H "Authorization: Bearer ${api_token}" $api_url/v3/clusters/${cluster_ID}/clusterregistrationtokens | jq -r .data[].insecureCommand
    echo "Please execute the above command in the imported cluster to complete the process."
else
    echo "Import cluster in rancher failed"
fi
BASH
./rancher_import_cluster.sh <your-cluster-name>
BASH

执行后会输出一条命令, 在被导入集群上执行如下命令:

# curl --insecure -sfL https://rancher-demo.example.com/v3/import/lzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqm6v4lp576c6mg_c-vwv5l.yaml | kubectl apply -f -
clusterrole.rbac.authorization.k8s.io/proxy-clusterrole-kubeapiserver created
clusterrolebinding.rbac.authorization.k8s.io/proxy-role-binding-kubernetes-master created
namespace/cattle-system created
serviceaccount/cattle created
clusterrolebinding.rbac.authorization.k8s.io/cattle-admin-binding created
secret/cattle-credentials-ec53bfa created
clusterrole.rbac.authorization.k8s.io/cattle-admin created
deployment.apps/cattle-cluster-agent created
service/cattle-cluster-agent created
SHELL

即可导入成功.

🎉🎉🎉

📝TODO:

后面再把登录到对应集群的 master 机器, 并执行命令纳入脚本.

系列文章

📚️参考文档

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
5月前
|
监控 Ubuntu Docker
Sentry 监控 Docker 方式部署
Sentry 监控 Docker 方式部署
136 0
|
2月前
|
Kubernetes Docker 容器
Rancher创建集群并进行简单的部署
Rancher创建集群并进行简单的部署
21 1
|
5月前
|
Kubernetes 虚拟化 开发者
Win环境中 Minikube 创建 Kubernetes 集群
Minikube 提供了一个方便的方式,在本地计算机上快速搭建一个小型的 Kubernetes 集群。这个集群是一个单节点的 Kubernetes 集群,包括主节点(control plane)和工作节点(node),运行在虚拟机中。
45 1
|
6月前
|
Kubernetes Ubuntu 应用服务中间件
使用Vagrant创建和管理本地Kubernetes(K8s)集群的步骤是什么
VirtualBox: 用于虚拟机管理。 Vagrant: 用于创建和配置虚拟机环境。 kubectl: Kubernetes命令行工具,用于管理Kubernetes集群。
114 0
|
6月前
|
Kubernetes 应用服务中间件 nginx
如何在本地使用Docker搭建和运行Kubernetes集群
获取Service的访问地址 运行以下命令来获取Service的访问地址:
188 0
|
10月前
|
Kubernetes 负载均衡 网络协议
简单操作:10分钟实现在kubernetes(k8s)里面部署服务器集群并访问项目(docker三)
简单操作:10分钟实现在kubernetes(k8s)里面部署服务器集群并访问项目(docker三)
|
12月前
|
Kubernetes Linux 程序员
【kubernetes】分享一个卸载由 kubeadm 创建的k8s集群的脚本
【kubernetes】分享一个卸载由 kubeadm 创建的k8s集群的脚本
123 0
|
Kubernetes Unix Linux
Kubernetes部署文档 使用cri-docker部署K8s集群
Kubernetes部署文档 使用cri-docker部署K8s集群
|
Kubernetes 数据可视化 网络协议
K8S(V1.10.1)高可用集群超详细版本(包含Dashboard、Rancher)
K8S(V1.10.1)高可用集群超详细版本(包含Dashboard、Rancher)
K8S(V1.10.1)高可用集群超详细版本(包含Dashboard、Rancher)
|
存储 消息中间件 监控
Sentry 监控 - 私有 Docker Compose 部署与故障排除详解
Sentry 监控 - 私有 Docker Compose 部署与故障排除详解
1915 0
Sentry 监控 - 私有 Docker Compose 部署与故障排除详解