安装版本:K3s (v1.21.7+k3s1)
参考站内 K3s 实践高可用架构图。
官方文档参考顺序(官方文档记录的顺序有点乱)
1 2 3 4 5 6
| 0. 查看对应版本: https://www.suse.com/suse-rancher/support-matrix/all-supported-versions/rancher-v2-6-3/ 1. 基础架构: https://rancher.com/docs/rancher/v2.6/en/installation/resources/k8s-tutorials/infrastructure-tutorials/infra-for-ha-with-external-db/ 2. 负载均衡: https://rancher.com/docs/rancher/v2.6/en/installation/resources/k8s-tutorials/infrastructure-tutorials/nginx/ 3. 部署 K3s: https://rancher.com/docs/rancher/v2.6/en/installation/resources/k8s-tutorials/ha-with-external-db/ 4. 安装 Helm 和 Rancher: https://rancher.com/docs/rancher/v2.6/en/installation/install-rancher-on-k8s/ 5. 添加 TLS: https://rancher.com/docs/rancher/v2.6/en/installation/resources/tls-secrets/
|
关于 Datastore 的选择
K3s 的 server 节点既是 master 也是 node,所以官方案例中只要两个 server 节点就可以做到高可用,但前提是使用非 etcd 数据源作为 datastore。
K3s 既支持外部数据源,官方也内置了 etcd 和 SQLite3,此部分可参考 https://docs.rancher.cn/docs/k3s/installation/ha-embedded/_index/
如果使用官方内置 etcd,可将配置替换如下:
master1
1 2 3 4
|
export K3S_CLUSTER_INIT=true
|
master2/3...
1 2 3 4 5
|
export K3S_TOKEN=XXX export K3S_URL="https://xxx:6443"
|
主 Server
编辑 /etc/profile,在最末尾添加数据库连接(自行替换数据库连接参数,参考:https://rancher.com/docs/k3s/latest/en/installation/install-options/)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| export K3S_DATASTORE_ENDPOINT="mysql://root:root@tcp(192.168.56.103:3306)/k3s_xiaowu"
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml export INSTALL_K3S_VERSION=v1.21.7+k3s1
export INSTALL_K3S_EXEC="server \ --tls-san rancher.k3s.cn \ --kube-proxy-arg proxy-mode=ipvs \ --kube-proxy-arg ipvs-scheduler=lc \ --kube-proxy-arg ipvs-min-sync-period=5s \ --kube-proxy-arg ipvs-sync-period=30s \ --kube-proxy-arg masquerade-all=true \ --kube-proxy-arg metrics-bind-address=0.0.0.0 \ --kubelet-arg max-pods=110 \ --kubelet-arg=image-gc-high-threshold=90 \ --kubelet-arg=image-gc-low-threshold=80 \ --kube-apiserver-arg service-node-port-range=30000-40000"
|
执行:
1 2 3 4 5
| source /etc/profile
curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
|
配置镜像加速(小记:第一个 >> 是追加,> 是覆盖):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| cat > /etc/rancher/k3s/registries.yaml <<EOF mirrors: "x.x.x.x:5000": endpoint: - "http://x.x.x.x:5000" "docker.io": endpoint: - "https://0vlzmqf0.mirror.aliyuncs.com" configs: "x.x.x.x:5000": auth: username: x password: x EOF
|
重启服务:
1 2 3
| systemctl restart k3s
systemctl restart k3s-agent
|
查看主 server 节点 token,需要留给之后的副 server 节点和 agent 节点使用:
1
| cat /var/lib/rancher/k3s/server/node-token
|
副 Server
编辑 /etc/profile:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| export K3S_TOKEN="添加上面 server 节点的 node-token"
export K3S_DATASTORE_ENDPOINT="mysql://root:root@tcp(192.168.56.103:3306)/k3s_xiaowu"
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml export INSTALL_K3S_VERSION=v1.21.7+k3s1
export INSTALL_K3S_EXEC="server \ --tls-san rancher.k3s.cn \ --kube-proxy-arg proxy-mode=ipvs \ --kube-proxy-arg ipvs-scheduler=rr \ --kube-proxy-arg ipvs-min-sync-period=5s \ --kube-proxy-arg ipvs-sync-period=30s \ --kube-proxy-arg masquerade-all=true \ --kube-proxy-arg metrics-bind-address=0.0.0.0 \ --kubelet-arg max-pods=110 \ --kube-apiserver-arg service-node-port-range=30000-40000"
|
执行:
1 2
| source /etc/profile curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
|
配置镜像加速(同主 server)
Agent 执行(之后再加 agent 节点也像这样执行)
编辑 /etc/profile:
1 2 3 4 5 6 7 8 9 10 11 12 13
| export K3S_TOKEN="添加上面 server 节点的 node-token"
export K3S_URL="主节点 URL:6443 或者配置的 loadbalance 地址(对应着 tls-san)" export INSTALL_K3S_VERSION=v1.21.7+k3s1
export INSTALL_K3S_EXEC="agent \ --kube-proxy-arg proxy-mode=ipvs \ --kube-proxy-arg masquerade-all=true \ --kube-proxy-arg metrics-bind-address=0.0.0.0 \ --kubelet-arg max-pods=110"
|
执行:
1 2
| source /etc/profile curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
|
创建配置目录并配置镜像加速:
1 2
| mkdir -p /etc/rancher/k3s touch /etc/rancher/k3s/registries.yaml
|
配置镜像加速(同主 server)
检查
为 agent 节点添加标签(加上 worker ROLES),默认标签展示 none:
1
| kubectl label node k3s-agent1 node-role.kubernetes.io/worker=worker
|
在任一 server 节点执行:
1 2
| kubectl get nodes kubectl get pods --all-namespaces
|
负载均衡 kubectl(此示例是结合 Nginx 配置负载 kubectl)
安装 Nginx 并配置 stream
1 2 3 4 5 6 7 8 9 10 11 12 13
| stream { upstream k3s { least_conn; server 10.0.2.17:6443 max_fails=3 fail_timeout=5s; server 10.0.2.16:6443 max_fails=3 fail_timeout=5s; server 10.0.2.15:6443 max_fails=3 fail_timeout=5s; } server { listen 6443; proxy_pass k3s; } }
|
配置 kubectl
- 将
/etc/rancher/k3s/k3s.yaml 文件放置在位于集群外部的计算机上,路径为 ~/.kube/config,然后将该 server 字段的值替换为 K3s 服务器的 IP 或名称(此示例填写的 <nginx 服务器所属 IP>:6443) - 安装 kubectl,参考站内
kubectl 的安装 - 编辑
~/.kube/config
1 2 3 4 5 6 7
| apiVersion: v1 clusters: - cluster: certificate-authority-data: [CERTIFICATE-DATA] server: rancher.k3s.cn:6443 name: default ...
|
进入 Helm 的安装篇
进入 kubectl 的安装篇