当前位置:首页 >综合 >使用 k3sup 一分钟快速搭建 K3s 集群 使用然后自动安装和配置 K3s

使用 k3sup 一分钟快速搭建 K3s 集群 使用然后自动安装和配置 K3s

2024-06-30 17:43:16 [百科] 来源:避面尹邢网

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

作者:张晓辉Addo 云计算 云原生 k3sup 通过 SSH 连接到目标服务器,使用然后自动安装和配置 K3s。分钟这意味着我们可以在任何可以通过 SSH 访问的快速机器上安装和运行 Kubernetes,包括本地机器、搭建云服务器或树莓派等设备。集群

背景

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

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

使用 k3sup 一分钟快速搭建 K3s 集群 使用然后自动安装和配置 K3s

export MASTER_IP=${ MASTER_IP:-$(ip addr show eth0 | grep 'inet ' | awk '{ print $2}' | cut -d/ -f1)}export INSTALL_K3S_VERSION=v1.23.8+k3s1curl -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。不免还是有些繁琐。

使用 k3sup 一分钟快速搭建 K3s 集群 使用然后自动安装和配置 K3s

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

使用 k3sup 一分钟快速搭建 K3s 集群 使用然后自动安装和配置 K3s

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 | shsudo 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.11k3sup install --ip $MASTER_IP \ --user addo \ --k3s-channel v1.24  \ --local-path /tmp/config

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

Running: k3sup install2023/10/26 09:04:35 192.168.1.11Public 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/configkubectl config use-context defaultkubectl get node -o wide

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

export KUBECONFIG=/tmp/configkubectl get node -o wideNAME     STATUS   ROLES                  AGE   VERSION         INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIMEmaster   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.12k3sup join --ip $AGENT_IP --user addo --server-ip $MASTER_IP --k3s-channel v1.24
Running: k3sup joinAgent: 192.168.1.11 Server: 192.168.1.12Received 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     VERSIONnode-1   Ready    <none>                 43s   v1.24.17+k3s1master   Ready    control-plane,master   2m58s   v1.24.17+k3s1

完整脚本

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

# Define IP addressesexport HOSTS="192.168.1.11 192.168.1.12"

搭建集群

#!/bin/bash# Read the list of IP addresses from the environment variableIP_ADDRESSES=($HOSTS)# Define the k3s versionK3S_VERSION="v1.24"# Check if there is at least one IP addressif [ ${ #IP_ADDRESSES[@]} -eq 0 ]; then    echo "No IP addresses found. Please ensure the HOSTS environment variable is correctly set."    exit 1fi# Install the master nodeMASTER_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 nodesfor 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    fidoneecho "k3s cluster installation complete."

卸载集群

#!/bin/bash# Read the list of IP addresses from the environment variableIP_ADDRESSES=($HOSTS)# Check if there is at least one IP addressif [ ${ #IP_ADDRESSES[@]} -eq 0 ]; then    echo "No IP addresses found. Please ensure the HOSTS environment variable is correctly set."    exit 1fi# Clean up the master nodeMASTER_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 nodesfor 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    fidoneecho "k3s cluster cleanup complete."

参考资料

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

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

责任编辑:武晓燕 来源: 云原生指北 SSH连接K3s

(责任编辑:知识)

    推荐文章
    热点阅读