您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

使用 k3sup 一分钟快速搭建 K3s 集群

时间:2023-10-27 14:01:35  来源:微信公众号  作者:云原生指北

背景

在平时的工作中,为了方便在纯净的环境中进行测试,我经常需要在本地或者公有云环境中频繁地搭建和销毁集群。有时是在 我的 HomeLab 环境中,虽然 CPU 不强但胜在内存够大;后来有了微软 MVP 赠送的 Azure 额度之后,我也会经常在 Azure 的虚拟机 中搭建,因为没有拉取镜像的网络问题。

在两个环境中我通过 Terraform 实现了虚拟机的快速创建和销毁,然后在虚拟机上创建 K3s 集群。K3s 集群足够轻量级,并支持对组件的定制。结合 Alfred Snippets[1],我只需要 ssh 到虚拟机上并键入 k3si 就可以快速输入定制好的命令,然后再获取虚拟机上的 kubeconfig 文件并替换其中的 api-server 地址(这些也通过 snippet)解决:

export MASTER_IP=${MASTER_IP:-$(ip addr show eth0 | grep '.NET ' | awk '{print $2}' | cut -d/ -f1)}
export INSTALL_K3S_VERSION=v1.23.8+k3s1
curl -sfL https://get.k3s.io | sh -s - --disable traefik --disable local-storage --disable metrics-server --advertise-address=$MASTER_IP --disable servicelb --write-kubeconfig-mode 644 --write-kubeconfig ~/.kube/config

单节点的集群操作起来还算便捷,但需要多节点的集群时也还要 ssh 到所有主机上进行操作,当然少不了复制 master 节点的 token。不免还是有些繁琐。

后来就发现了更快捷的工具,由 Alex Ellis 创建的 k3sup[2](发音 ‘ketchup’)。

k3sup 简介

k3sup 是一个轻量级工具,用于快速搭建 K3s 集群。

k3sup 的特点是易于使用,只需单个命令即可在不同的平台上安装 K3s。它使用户可以快速创建 Kubernetes 集群,并可以轻松地将新节点加入到现有集群中。

k3sup 通过 SSH 连接到目标服务器,然后自动安装和配置 K3s。这意味着我们可以在任何可以通过 SSH 访问的机器上安装和运行 Kubernetes,包括本地机器、云服务器或树莓派等设备。

简单理解就是使用 k3sup 完成了 ssh 到主机、安装 K3s server、复制 token、ssh 到 agent 主机、安装 K3s agent ... 等一系列的操作。

接下来我们看下如何使用 k3sup。

安装 k3sup

k3sup 是一个命令行工具,使用前要下载安装 CLI。

linux:

curl -sLS https://get.k3sup.dev | sh
sudo install k3sup /usr/local/bin/

macOS:

brew install k3sup

使用

k3sup 支持如下命令:

  • completion:为指定的 shell 生成自动完成脚本
  • help:帮助
  • install:通过 SSH 在服务器上安装 K3s
  • join:在远程主机上安装 K3s 代理并将其加入到现有集群
  • ready:使用 kubectl 检查集群是否已就绪。
  • update:打印更新说明
  • version:打印版本

创建集群会用到 install 和 join 两个命令。

install 命令

install 命令用于在服务器上安装 K3s,使用下面的命令即可在远程主机上安装 k3s。

其中 --ip 指向远程主机的地址,--user 为登录远程主机的用户名,--k3s-channel 这是要安装的版本,--local-path 集群 kubeconf 的本地保存地址。更多的选项可以通过 k3sup help install 来查看。

k3sup 默认使用 ssh key ~/.ssh/id_rsa 来访问主机,可通过 --ssh-key 选项指定。

export MASTER_IP=192.168.1.11
k3sup install --ip $MASTER_IP 
 --user addo 
 --k3s-channel v1.24  
 --local-path /tmp/config

执行命令会打印安装过程中的日志。

Running: k3sup install
2023/10/26 09:04:35 192.168.1.11
Public IP: 192.168.1.11
[INFO]  Finding release for channel v1.24
[INFO]  Using v1.24.17+k3s1 as release
...
Saving file to: /tmp/config

# Test your cluster with:
export KUBECONFIG=/tmp/config
kubectl config use-context default
kubectl get node -o wide

执行命令,查看节点的信息。

export KUBECONFIG=/tmp/config
kubectl get node -o wide
NAME     STATUS   ROLES                  AGE   VERSION         INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
master   Ready    control-plane,master   1m   v1.24.17+k3s1   10.0.2.4      <none>        Ubuntu 20.04.6 LTS   5.15.0-1047-azure   containerd://1.7.3-k3s1

如果是安装单节点集群,install 命令就足够了。假如是多节点集群,就还需要用到 join 命令。

join 命令

使用 join 命令可以初始化 agent 节点,并将其加入到当前的集群中,需要使用 --server-ip 指定 server 节点的 IP 地址,同样需要 --k3s-channel 指定安装的版本,强烈建议安装于 server 节点同样的版本。

export AGENT_IP=192.168.1.12
k3sup join --ip $AGENT_IP --user addo --server-ip $MASTER_IP --k3s-channel v1.24
 
Running: k3sup join
Agent: 192.168.1.11 Server: 192.168.1.12
Received node-token from 192.168.1.11.. ok.
[INFO]  Finding release for channel v1.24
[INFO]  Using v1.24.17+k3s1 as release
...

查看节点:

kubectl get no 
NAME     STATUS   ROLES                  AGE     VERSION
node-1   Ready    <none>                 43s   v1.24.17+k3s1
master   Ready    control-plane,master   2m58s   v1.24.17+k3s1

完整脚本

ChatGPT 生成了脚本一键创建集群,有兴趣的小伙伴可以试试创建个双节点的集群需要多久。我试了下,耗时 32s 左右。

# Define IP addresses
export HOSTS="192.168.1.11 192.168.1.12"

搭建集群

#!/bin/bash

# Read the list of IP addresses from the environment variable
IP_ADDRESSES=($HOSTS)
# Define the k3s version
K3S_VERSION="v1.24"

# Check if there is at least one IP address
if [ ${#IP_ADDRESSES[@]} -eq 0 ]; then
    echo "No IP addresses found. Please ensure the HOSTS environment variable is correctly set."
    exit 1
fi

# Install the master node
MASTER_IP=${IP_ADDRESSES[0]}
echo "Installing master node: $MASTER_IP"
k3sup install --ip $MASTER_IP --user addo --k3s-channel $K3S_VERSION 
    --k3s-extra-args '--write-kubeconfig-mode 644 --write-kubeconfig ~/.kube/config --disable traefik --disable metrics-server --disable local-storage --disable servicelb' 
    --local-path /tmp/config

# Install the other agent nodes
for i in "${!IP_ADDRESSES[@]}"; do
    if [ $i -ne 0 ]; then
        AGENT_IP=${IP_ADDRESSES[$i]}
        echo "Installing agent node: $AGENT_IP"
        k3sup join --ip $AGENT_IP --server-ip $MASTER_IP --user addo --k3s-channel $K3S_VERSION
    fi
done

echo "k3s cluster installation complete."

卸载集群

#!/bin/bash

# Read the list of IP addresses from the environment variable
IP_ADDRESSES=($HOSTS)

# Check if there is at least one IP address
if [ ${#IP_ADDRESSES[@]} -eq 0 ]; then
    echo "No IP addresses found. Please ensure the HOSTS environment variable is correctly set."
    exit 1
fi

# Clean up the master node
MASTER_IP=${IP_ADDRESSES[0]}
echo "Cleaning up master node: $MASTER_IP"
ssh -i ~/.ssh/id_rsa $MASTER_IP k3s-uninstall.sh

# Clean up the other agent nodes
for i in "${!IP_ADDRESSES[@]}"; do
    if [ $i -ne 0 ]; then
        AGENT_IP=${IP_ADDRESSES[$i]}
        echo "Cleaning up agent node: $AGENT_IP"
        ssh -i ~/.ssh/id_rsa $AGENT_IP k3s-agent-uninstall.sh
    fi
done

echo "k3s cluster cleanup complete."

参考资料

[1] Alfred Snippets: https://www.alfredApp.com/help/features/snippets/

[2] k3sup: https://Github.com/alexellis/k3sup



Tags:K3s   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
使用 k3sup 一分钟快速搭建 K3s 集群
背景在平时的工作中,为了方便在纯净的环境中进行测试,我经常需要在本地或者公有云环境中频繁地搭建和销毁集群。有时是在 我的 HomeLab 环境中,虽然 CPU 不强但胜在内存够大;后...【详细内容】
2023-10-27  Search: K3s  点击:(190)  评论:(0)  加入收藏
k3s和k8s对比分析:k8s太重了,试试k3s吧
如果你觉得k8s太重了,试试k3s吧。k3s是一个轻量级的Kubernetes发行版,它可以在低资源的环境中运行,比如边缘计算或者物联网设备。k3s包含了Kubernetes的核心功能,但是移除了一些...【详细内容】
2023-05-12  Search: K3s  点击:(542)  评论:(0)  加入收藏
只需5分钟!即可在mac上运行k3s
k3s是由Rancher Labs于今年年初发布的一款开源、极轻量的Kubernetes发行版,完美适用于在资源有限的环境中运行Kubernetes。由于其轻量的特性,因此它是开发人员在笔记本上进行...【详细内容】
2019-10-12  Search: K3s  点击:(810)  评论:(0)  加入收藏
从零完成k3s Kubeconfig配置
K3s是由Rancher Labs于今年年初发布的一款开源、极轻量的Kubernetes发行版,完美适用于在资源有限的环境中运行Kubernetes。K3s一经发布就得到了业界的高度关注和认可,发布半年...【详细内容】
2019-08-28  Search: K3s  点击:(873)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(5)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(12)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(8)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(10)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(8)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(6)  评论:(0)  加入收藏
站内最新
站内热门
站内头条