基于 k3s 快速部署 kubernetes 集群
本文适用于 Alpine/CentOS/Debian/Ubuntu
等内核版本大于4的操作系统,部分特别声明的步骤在其他操作系统可以忽略。
文中部署环境基于局域网,若需要跨云跨地域,可使用Wireguard打通所有节点,修改MY_ETH_DEV
为wg网卡名完成组网。
1、启用cgroup支持(仅部分系统执行)
Alpine Linux
默认安装不支持 cgroup
,所以需要修改启动项。
if [ -f /etc/update-extlinux.conf ]; then
if ! grep -q cgroup /etc/update-extlinux.conf; then
mods="cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory"
sed -i "s/rootfstype=ext4/rootfstype=ext4 $mods/" /etc/update-extlinux.conf
update-extlinux
reboot
fi
fi
2、预设临时环境变量(所有节点均执行)
必须分别在 3、4、5
步骤前执行,以保证参数一致性。另外请注意修改脚本中环境变量的值,否则可能无法启动服务。
# k3s主服务器内网地址
export MY_SERVER_IP=172.21.0.11
# k3s认证令牌,任意字符串
export MY_TOKEN=943uoeitg4sh43589j38uj8irr439943oit
# 内部网卡设备号,`ifconfig` 查看
export MY_ETH_DEV=eth0
# 自动获取本机IP,若无法获取请手动指定
export MY_NODE_IP=`ip -o -4 addr list | grep $MY_ETH_DEV | awk '{print $4}' | cut -d/ -f1`
2.1、国内机器额外设置
由于网络问题,国内可能无法下载 k3s
二进制文件,需要继续执行下面的命令,通过代理预下载。
# 下载二进制文件
wget -O /usr/local/bin/k3s https://ghproxy.com/https://github.com/k3s-io/k3s/releases/download/v1.28.2%2Bk3s1/k3s
chmod +x /usr/local/bin/k3s
# 在稍后的安装过程中跳过下载
export INSTALL_K3S_SKIP_DOWNLOAD=true
3、部署首个k3s主节点(仅首个主节点执行)
主机或云厂商防火墙需放行 TCP/6443
,UDP/8472
,TCP/10250
。
wget -qO- https://get.k3s.io | sh -s - server \
--cluster-init \
--token $MY_TOKEN \
--node-ip $MY_NODE_IP \
--advertise-address $MY_NODE_IP \
--flannel-iface $MY_ETH_DEV \
--disable-cloud-controller
单网卡、单IP 的机器可以忽略如下参数
--node-ip
--flannel-iface
可根据集群需求,选择性禁用如下内置组件
--disable-cloud-controller
禁用云控制器管理器--disable coredns
禁用内部DNS(用于支持服务发现)--disable servicelb
禁用负载均衡(可使用MetalLB
替代)--disable traefik
禁用反向代理(可使用ingress-nginx
替代)--disable local-storage
禁用本地存储卷(不影响hostPath
卷)--disable metrics-server
禁用指标监控(服务端口为TCP/10250
)
4、部署更多k3s主节点(仅HA主节点执行)
HA主节点安装参数必须和首个主节点保持一致,且主节点总数建议为奇数个,防止主节点故障时选举失败。
wget -qO- https://get.k3s.io | sh -s - server \
--server https://$MY_SERVER_IP:6443 \
--token $MY_TOKEN \
--node-ip $MY_NODE_IP \
--advertise-address $MY_NODE_IP \
--flannel-iface $MY_ETH_DEV \
--disable-cloud-controller
5、部署k3s子节点(仅子节点执行)
推荐部署3个以上,主机或云厂商防火墙需放行 UDP/8472
,TCP/10250
。
wget -qO- https://get.k3s.io | sh -s - agent \
--server https://$MY_SERVER_IP:6443 \
--token $MY_TOKEN \
--node-ip $MY_NODE_IP \
--flannel-iface $MY_ETH_DEV
单网卡、单IP 的机器可以忽略如下参数
--node-ip
--flannel-iface
附录一:常用查看类命令
# 查看所有节点
kubectl get node
kubectl top node
# 查看所有应用
kubectl get pod -A -o wide
# 查看所有服务
kubectl get service -A
kubectl get ingress -A
# 查看节点运行的容器
crictl ps
附录二:完全卸载(请注意备份数据)
# 卸载主节点
if [ -x /usr/local/bin/k3s-uninstall.sh ]; then
/usr/local/bin/k3s-uninstall.sh
fi
# 卸载子节点
if [ -x /usr/local/bin/k3s-agent-uninstall.sh ]; then
/usr/local/bin/k3s-agent-uninstall.sh
fi
# 重启后清理
rm -rf ~/.kube
rm -rf /etc/rancher
rm -rf /var/lib/cni
rm -rf /var/lib/rancher
rm -rf /var/lib/kubelet
rm -rf /var/log/containers
rm -rf /var/log/k3s*
rm -rf /var/log/pods
实战应用
根据本站Tag查阅 《Kubernetes 领进门》 系列文章