Vagrant 自动部署k3s集群 https://www.yuque.com/wukong-zorrm/xmk0v0/iaw0c8knokwhrqtw

1.集群规划

主机名IP地址类型
k3s-server192.168.56.10Control Plane 控制平面
k3s-agent1192.168.56.11工作节点
k3s-agent2192.168.56.12工作节点

2.Vagrantfile 配置文件

vm_list = [
  { # hash map
    "name" => "k3s-server",
    "cpu" => "2",
    "mem" => "2048",
    "ip_addr" => "192.168.56.10"
  },
  {
    "name" => "k3s-agent1",
    "cpu" => "1",
    "mem" => "1024",
    "ip_addr" => "192.168.56.11"
  },
  {
    "name" => "k3s-agent2",
    "cpu" => "1",
    "mem" => "1024",
    "ip_addr" => "192.168.56.12"
  }
]

Vagrant.configure(2) do |config|

   config.vm.box = "ubuntu/jammy64"

   vm_list.each do |item|
        config.vm.define item["name"] do |node|
            node.vm.provider "virtualbox" do |vbox|
              vbox.name = item["name"];  #虚拟机名称
              vbox.memory = item["mem"]; #内存
              vbox.cpus = item["cpu"];   #CPU
            end
            # 设置hostname
            node.vm.hostname = item["name"]
            # 设置IP
            node.vm.network "private_network", ip: item["ip_addr"]

            # 执行shell脚本
            node.vm.provision "shell" do |script|
              script.path = "k3s-install.sh"   #脚本路径
              script.args = [ item["name"] ]   #传递参数
            end
        end
    end

end

3.安装脚本

在安装脚本中,我们通过传入的参数,也就是虚拟机的名字,来执行不同的命令。

环境变量

自动创建K3s集群,需要配置下面两个环境变量:

K3S_TOKEN:预先约定好token,工作节点自动加入

K3S_URL:主节点API server的访问地址

由于预先分配了IP,所以可以确定API server的访问地址。

Flannel网络

K3s内置了flannel作为默认的网络插件(CNI)。

flannel默认是选择第一个网卡进行网络通信,由于Vagrant虚拟机的第一个网卡是NAT模式,虚拟机之间无法互相访问。因此,在安装k3s时,需要使用--flannel-iface将第二个网卡enp0s8设置为默认网络。

echo "==> k3s cluster settings:"
K3S_TOKEN=NEIwQ0IxMEUtNTA2MS00RE
K3S_URL=https://192.168.56.10:6443
FLANNEL_IFACE="enp0s8"
echo "    TOKEN: ${TOKEN}"
echo "    API_SERVER:${API_SERVER}"
echo "    FLANNEL_IFACE:${FLANNEL_IFACE}"

echo "==> disable firewall"
ufw disable

if [ $1 == "k3s-server" ]; then
    echo "==> install $1"
    curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
         INSTALL_K3S_MIRROR=cn \
         K3S_TOKEN=${TOKEN} \
         sh -s - server --flannel-iface ${FLANNEL_IFACE}
else
    echo "==> install $1"
    curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
         INSTALL_K3S_MIRROR=cn \
         K3S_URL=https://${API_SERVER}:6443 \
         K3S_TOKEN=${TOKEN} \
         sh -s - --flannel-iface ${FLANNEL_IFACE}
fi