自动部署k3s集群
大约 2 分钟
自动部署k3s集群
- 一行命令
- 自动配置集群
- 全程无需人工干预
1.集群规划
主机名 | IP地址 | 类型 |
---|---|---|
k3s-server | 192.168.56.10 | Control Plane 控制平面 |
k3s-agent1 | 192.168.56.11 | 工作节点 |
k3s-agent2 | 192.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
评论补充
这段脚本中变量有点错误,修改后可用的:
echo "==> k3s cluster settings:"
K3S_TOKEN=NEIwQ0IxMEUtNTA2MS00RE
K3S_URL=https://192.168.56.10:6443
FLANNEL_IFACE="enp0s8"
echo " TOKEN: ${K3S_TOKEN}"
echo " API_SERVER: ${K3S_URL}"
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=${K3S_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=${K3S_URL} \
K3S_TOKEN=${K3S_TOKEN} \
sh -s - --flannel-iface ${FLANNEL_IFACE}
fi