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

概述

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

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

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

    Rancher API 创建导入集群

  2. 在参数填写页面中,修改以下参数:

    • dockerRootDir 默认为/var/lib/docker,如果 dockerroot 路径有修改,需要修改此配置路径;
    • enableClusterAlerting(可选) 根据需要选择是否默认开启集群告警;
    • enableClusterMonitoring(可选) 根据需要选择是否默认开启集群监控;
    • name(必填) 设置集群名称,名称具有唯一性,不能与现有集群名称相同;
  3. 配置好参数后单击Show Request

  4. 在弹出的窗口中,复制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

2. 创建集群

  1. 保存以上代码为脚本文件,最后执行脚本。

    ./rancher_import_cluster.sh <your-cluster-name>
  2. 脚本执行完成后,集群状态如下所示,其状态为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

📝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
./rancher_import_cluster.sh <your-cluster-name>

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

# 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

即可导入成功.

🎉🎉🎉

📝TODO:

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

系列文章

  • Rancher 系列文章

📚️参考文档

  • 使用脚本创建导入集群 | Rancher文档

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/5031.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第07章_单行函数

第07章_单行函数 &#x1f3e0;个人主页&#xff1a;shark-Gao &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是shark-Gao&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f389;目前状况&#xff1a;23届毕业生&#xff0c;目前在某…

进程地址空间+环境变量

目录 环境变量 进程地址空间 理解虚拟地址空间 进程地址空间区域划分 虚拟内存和物理内存建立联系 深刻理解虚拟地址空间 环境变量 当我们需要使用一个物品的时候&#xff0c;首先要先找到这个物品。同样的&#xff0c;当要运行一个程序&#xff08;指令&#xff09;时&a…

大公司为什么禁止SpringBoot项目用Tomcat?

前言 在SpringBoot框架中&#xff0c;我们使用最多的是Tomcat&#xff0c;这是SpringBoot默认的容器技术&#xff0c;而且是内嵌式的Tomcat。同时&#xff0c;SpringBoot也支持Undertow容器&#xff0c;我们可以很方便的用Undertow替换Tomcat&#xff0c;而Undertow的性能和内…

低功耗技术——流水线设计(加法器和乘法器)

文章目录前言一、流水线1、16bit加法器2、无符号4bit乘法器3、编写一个4bit乘法器模块&#xff0c;并例化该乘法器求解c12*a5*b二、降低FPGA功耗1、静态功耗2、动态功耗前言 2023.3.31 今天学习降低功耗的一些方法 一、流水线 电路最高工作频率&#xff1a;取决于最长的组合逻…

Windows下的详细Git安装

网址链接&#xff1a; Githttps://git-scm.com/ 下载后得到这个程序&#xff1a; 这里它给出的是使用Vim&#xff0c; 我改成的是VSCode: 第一种是让 Git 自己选择&#xff0c;名字是 master &#xff0c;但是未来也有可能会改为其他名字&#xff1b; 第二种是我们自行决定&a…

大文件上传时如何做到秒传?

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Github地址 大家好&#xff0c;我是大彬~ …

Selenium基础篇之Select下拉列表选择

文章目录前言一、页面准备二、场景三、设计1.引入库2.启动浏览器实例3.访问本地演示html文件4.定位到select标签5.选择橘子&#x1f34a;5.1 通过索引5.2 通过value值5.3 通过text值6.强制等待7.结束webdriver进程结果前言 大家好&#xff0c;我是空空star&#xff0c;本篇给大…

ChatGPT火出圈,80%的设计师无事可做

自从疫情过后&#xff0c;设计行业开始变得很凌乱。很多同行开始打价格战&#xff0c;设计岗位逐渐演变成了一种新型的流水线。在我国&#xff0c;不管什么行业&#xff0c;到最终都会演变成饱和状态。用金融理论来说&#xff1a;供不应求&#xff0c;就赚钱&#xff0c;供过于…

STM32学习(十二)

软件定时原理 使用纯软件&#xff08;CPU死等&#xff09;的方式实现定时&#xff08;延时&#xff09;功能。 不精准&#xff1a;函数调用压栈进栈需要耗费额外的时间&#xff1b;流水线使得程序执行时间不确定。CPU死等。 定时器定时原理 使用精准的时基&#xff0c;通过…

【大数据之Hadoop】二、Hadoop生产集群搭建之完全分布式集群

1 运行准备 (1)准备3台客户机&#xff08;关闭防火墙、设置静态IP和主机名称&#xff09; (2)安装JDK&#xff0c;配置环境变量 (3)安装Hadoop&#xff0c;配置环境变量 (4)配置集群 (5)单点启动 (6)配置ssh (7)群起并测试集群 2 编写集群分发脚本xsync 集群分发脚本 在/hom…

OpenGL | 渲染带透明通道的2D精灵

一、Alpha测试 Alpha 测试的基本原理为&#xff1a;当绘制一个片元时&#xff0c;首先检测其 Alpha 值&#xff0c;若 Alpha 值满足要求&#xff0c;就通过测试&#xff0c;绘制此片元&#xff1b;否则丢弃此片元&#xff0c;不进行绘制。 glEnable(GL_ALPHA_TEST)&#xff1b…

基于springboot实现私人健身与教练预约管理系统【源码+论文】

基于springboot实现私人健身与教练预约管理系统演示开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea M…

举一反三学python(2)—函数应用

Con_Info ["王伟(男),河南郑州, 137****8331","杨秀娟(女),陕西西安, 138****4117","刘子豪(男),河北廊坊, 136****2964","李发魁(男),河南洛阳, 139***3297","王小花(女),山西太原, 138****0042",] 要求对上述文本数据解析…

main主函数参数解析

默认的main函数参数 int main(int argc, char *argv[]) {// 主函数的代码逻辑return 0; }其中&#xff0c;int 是主函数的返回值类型&#xff0c;主函数执行完后会返回一个整数值给操作系统&#xff0c;通常返回值为 0 表示程序正常结束&#xff0c;非 0 的返回值表示程序运行…

【Spring6】资源操作:Resources

8、资源操作&#xff1a;Resources 8.1、Spring Resources概述 Java的标准java.net.URL类和各种URL前缀的标准处理程序无法满足所有对low-level资源的访问&#xff0c;比如&#xff1a;没有标准化的 URL 实现可用于访问需要从类路径或相对于 ServletContext 获取的资源。并且缺…

配置案例丨EtherCAT转Profinet网关连接凯福科技总线步进驱动器

西门子S7-1200/1500系列的PLC&#xff0c;采用PROFINET实时以太网通讯协议&#xff0c;需要连接带EtherCAT的通讯功能的伺服驱动器等设备&#xff0c;就必须进行通讯协议转换。小疆GW-PN-ECATM系列的网关提供了&#xff0c;快速可行的解决方案。GW-PN-ECATM支持两种实时以太网通…

关于SpringBoot项目的jar包使用命令执行无法读取到外部logback配置文件的问题解决

如题。 在SpringBoot配置了logback管理日志&#xff0c;application.yml配置的logback配置文件相关如下&#xff1a; logging:config: classpath:logback-spring.xml将项目打成jar包&#xff0c;在jar包同级目录下创建config文件夹&#xff0c;并复制了resources文件夹下的配置…

Ubuntu22.04部署Kubernetes集群(亲测可用)

本文将使用kubeadm在Ubuntu22.04上部署k8s集群&#xff0c;kubeadm 是官方社区推出的一个用于快速部署kubernetes 集群的工具&#xff0c;用于快速部署Kubernetes 集群。 虚拟机准备 下载ubuntu22.04镜像&#xff0c;使用vmware部署三台ubuntu22.04虚拟机并配置静态ip和主机名…

第一个Vue程序

第一个Vue程序 <body> <!--view层 变成了一个模板--> <div id"app">{{message}} </div><!--导入vue.js--> <script src"https://cdn.jsdelivr.net/npm/vue2.5.16/dist/vue.min.js"></script> <script>va…

蓝桥杯3月刷题集训-A 【枚举模拟】Day3

蓝桥杯3月刷题集训-A 【枚举&模拟】Day3 文章目录蓝桥杯3月刷题集训-A 【枚举&模拟】Day3一、扫雷二、含2天数一、扫雷 我们首先读取输入中的方格图&#xff0c;将其保存在一个二维数组 grid 中。然后&#xff0c;遍历方格图中的每一个方格&#xff0c;对于每个空白方格…