准备
3台预装 Alpine 3.13 的虚拟/物理机节点,网络互通
TIPS: VirtualBox 可以给虚拟机添加两块网卡,第一块 eth0 设置 host-only 网络方便虚拟机和虚拟机&虚拟机和宿主机互通(不启用 DHCP),第二块 eth1 设置 NAT 网络用于访问外网(启用 DHCP)
配置静态 IP
默认情况下,节点 IP 由 DHCP 动态分配,IP 可能会变更带来不必要的麻烦,编辑 /etc/network/interfaces 设置为静态 IP
node-1
...
iface eth0 inet static
address 10.0.0.101/24
...
node-2
...
iface eth0 inet static
address 10.0.0.102/24
...
node-3
...
iface eth0 inet static
address 10.0.0.103/24
...
保存修改后重启网络
rc-service networking restart
(可选)添加静态hosts记录
cat >>/etc/hosts <<EOF
10.0.0.101 node-1
10.0.0.102 node-2
10.0.0.103 node-3
EOF
(可选)设置 hostname方便识别主机
echo node-1 >/etc/hostname
hostname -F /etc/hostname
(可选)使用阿里云dns避免dns污染
cat >/etc/resolv.conf <<EOF
nameserver 223.5.5.5
nameserver 223.6.6.6
EOF
预下载安装 k3s 需要的资源
apk add curl
mkdir k3s-download
( \
cd k3s-download; \
export HTTPS_PROXY=socks5h://<YOUR-PROXY-SERVER>; \
curl -L https://api.github.com/repos/k3s-io/k3s/releases/latest \
| sed -E -n 's/.*"browser_download_url": "([^"]+\/(k3s|k3s-airgap-images-amd64\.tar\.gz))".*/\1/p' \
| xargs -I {} curl -LO -C- {}; \
curl -Lo install.sh https://get.k3s.io; \
)
ls k3s-download
# 包含3个文件:k3s, k3s-airgap-images-amd64.tar.gz, install.sh
可以只在一个节点下载,其余节点用 scp 拷贝 k3s-download 文件夹
安装 k3s
拷贝 k3s cli 到 /usr/local/bin,并设置可执行属性
install k3s-download/k3s /usr/local/bin/k3s
拷贝 k3s 依赖的镜像包到特定的 images 目录
mkdir -p /var/lib/rancher/k3s/agent/images
cp k3s-download/k3s-airgap-images-amd64.tar.gz /var/lib/rancher/k3s/agent/images
启动 k8s 集群
生成随机 token
head -c12 /dev/urandom | base64
记住这个 token 用于替换后续的 <YOUR-TOKEN>
在 node-1 启动第一个 k3s server
INSTALL_K3S_SKIP_DOWNLOAD=true \
K3S_TOKEN=<YOUR-TOKEN> \
sh k3s-download/install.sh server --flannel-backend=host-gw --flannel-iface=eth0 --node-ip 10.0.0.101 --cluster-init
在 node-2 启动第二个 k3s server
INSTALL_K3S_SKIP_DOWNLOAD=true \
K3S_TOKEN=<YOUR-TOKEN> \
sh k3s-download/install.sh server --flannel-backend=host-gw --flannel-iface=eth0 --node-ip 10.0.0.102 --server https://10.0.0.101:6443
在 node-3 启动第三个 k3s server
INSTALL_K3S_SKIP_DOWNLOAD=true \
K3S_TOKEN=<YOUR-TOKEN> \
sh k3s-download/install.sh server --flannel-backend=host-gw --flannel-iface=eth0 --node-ip 10.0.0.103 --server https://10.0.0.101:6443
等待 k8s 节点就绪(Ready 状态)
kubectl get nodes
# NAME STATUS ROLES AGE VERSION
# node-1 Ready control-plane,etcd,master 20m v1.21.0+k3s1
# node-2 Ready control-plane,etcd,master 18m v1.21.0+k3s1
# node-3 Ready control-plane,etcd,master 18m v1.21.0+k3s1
查看 k8s pods 信息
kubectl get pods -A
# NAMESPACE NAME READY STATUS RESTARTS AGE
# kube-system coredns-7448499f4d-td44d 1/1 Running 0 18m
# kube-system helm-install-traefik-crd-scj8d 0/1 Completed 0 18m
# kube-system helm-install-traefik-f6zq7 0/1 Completed 1 18m
# kube-system local-path-provisioner-5ff76fc89d-4nlgj 1/1 Running 0 18m
# kube-system metrics-server-86cbb8457f-fckks 1/1 Running 0 18m
# kube-system svclb-traefik-4jz29 2/2 Running 0 16m
# kube-system svclb-traefik-kmcpj 2/2 Running 0 18m
# kube-system svclb-traefik-zb7jg 2/2 Running 0 16m
# kube-system traefik-97b44b794-l7dvf 1/1 Running 0 18m
设置 https 代理
2021年如果不使用外网代理,拖取外网镜像会非常遭罪,可以通过环境变量为 k3s 设置 https 代理
cat >>/etc/rancher/k3s/k3s.env <<EOF
HTTPS_PROXY=http://<YOUR-PROXY-SERVER>
NO_PROXY=10.0.0.0/24,10.42.0.0/16,10.43.0.0/16
EOF
# 需要重启 k3s server 让设置生效
rc-service k3s restart
备注:10.0.0.0/24 为 node 的网段,10.42.0.0/16 为 pod ip 的网段,10.43.0.0/16 为 service cluster ip 的网段。
卸载 k3s
k3s-uninstall.sh