基于 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/6443UDP/8472TCP/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/8472TCP/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 领进门》 系列文章

文章作者: 若海; 原文链接: https://www.rehiy.com/post/309/; 转载需声明来自技术写真 - 若海

添加新评论