搬砖小抄

Rancher v2.7 高可用集群搭建笔记

字数统计: 1.6k阅读时长: 7 min
2023/03/09 Share

Rancher可以帮助我们管理k8s集群,如果Rancher不可用,被管理的集群仍然可以正常使用。

但是,管理k8s集群没有管理软件怎么行,因此Rancher的高可用是有必要的。

官方的建议将Rancher部署在专用的集群上(我称为管理集群),然后用它来管理工作集群,下面是搭建管理集群的步骤,写这个文档的时候,最新的Rancher版本是 2.7.1。

FAQ: Rancher is No Longer Needed

If Rancher is ever deleted or unrecoverable, all workloads in the downstream Kubernetes clusters managed by Rancher will continue to function as normal.

版本

K3S: v1.24.10+k3s1
helm: 3.2.4-1
Rancher: v2.7.1
cert-managerv1.11.0

版本兼容性清单

K3S / Rancher: https://www.suse.com/suse-rancher/support-matrix/all-supported-versions/rancher-v2-7-1/
helm / rancher / k8shttps://ranchermanager.docs.rancher.com/getting-started/installation-and-upgrade/resources/helm-version-requirements
cert-manager / k8shttps://cert-manager.io/docs/installation/supported-releases/

准备工作

服务器规划

IP 规格 用途
10.11.12.80 2C1G rancher LB、MySql 代理
10.11.12.85 4C4G K3S Server node
10.11.12.86 4C4G K3S Server node

一台机器做LB,另外两台机器安装K3S集群,没有Agent节点

安装 docker

K3S默认使用containerd,如果要用docker的化就需要安装

1
2
3
4
curl https://releases.rancher.com/install-docker/20.10.sh | sh

sudo usermod -aG docker $USER

LB 节点

nginx

1
2
3
4
5
6
docker run -d --privileged --name nginx \
--restart=unless-stopped \
-p 80:80 -p 443:443 -p 5336:5336 \
-v ~/docker-run/nginx/nginx.conf:/etc/nginx/nginx.conf \
nginx:1.14

配置文件(代理了数据库和Rancher的web)

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
worker_processes 4;
worker_rlimit_nofile 40000;

events {
worker_connections 8192;
}

stream {
upstream rancher_servers_http {
least_conn;
server 10.11.12.85:80 max_fails=3 fail_timeout=5s;
server 10.11.12.86:80 max_fails=3 fail_timeout=5s;
}
server {
listen 80;
proxy_pass rancher_servers_http;
}

upstream rancher_servers_https {
least_conn;
server 10.11.12.85:443 max_fails=3 fail_timeout=5s;
server 10.11.12.86:443 max_fails=3 fail_timeout=5s;
}
server {
listen 443;
proxy_pass rancher_servers_https;
}

upstream rancher_mysql {
server 10.11.12.8:49155;
}
server {
listen 5336;
proxy_pass rancher_mysql;
}
}

服务节点

https://docs.rancher.cn/docs/rancher2/installation/install-rancher-on-k8s/_index

服务节点就是用于安装rancher的k8s集群

dns for LB

服务节点(85,86)配置host /etc/hosts

1
10.11.12.80     rancher-lb.lan

安装 k3s Server 节点

此步骤每个服务器上都需要操作

敌对势力环境

1
2
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.24.10+k3s1 sh -s - server \
--datastore-endpoint="mysql://username:pwd@tcp(rancher-lb.lan:5336)/k3s_rancher"

大国崛起环境

1
2
3
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.24.10+k3s1 sh -s - server \
--token=6c62412b8f4e3d15232024af49516b24 \
--datastore-endpoint="mysql://username:pwd@tcp(rancher-lb.lan:5336)/k3s_rancher"

注意:
多个节点安装使用相同的配置
k3s 的版本与rancher版本兼容性

如果要删除

1
2
3
4
5
# Server 节点
/usr/local/bin/k3s-uninstall.sh

# Agent 节点
/usr/local/bin/k3s-agent-uninstall.sh

解决/etc/rancher/k3s/k3s.yaml权限导致的kubectl命令执行失败(重要)

在 当前用户的.profile加入 export KUBECONFIG=~/.kube/config,然后执行

1
2
3
4
source ~/.profile
mkdir ~/.kube 2> /dev/null
sudo k3s kubectl config view --raw > "$KUBECONFIG"
chmod 600 "$KUBECONFIG"

https://devops.stackexchange.com/a/16044

支持命令行提示

1
2
3
sudo apt install bash-completion
# 在你的 bash shell 中永久地添加自动补全
echo "source <(kubectl completion bash)" >> ~/.bashrc

查看状态

1
kubectl get nodes
1
kubectl get pods -A

Helm 安装

此步骤每个服务器上都需要操作

1
2
3
4
5
sudo apt-get install apt-transport-https --yes
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm=3.2.4-1

注意:当前rancher版本要求安装3.2.x的helm
helm-version-requirementsocs

常用命令

1
2
3
4
5
6
7
# 查看helm部署
helm list --namespace <namespace_name>
helm list --all-namespaces

# 删除部署
helm uninstall <deployment name> --namespace <namespace_name>

添加Helm仓库

1
2
3
4
5
6
7
8
9
10
# 国际
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
# 国内(装的时候发现还没有rancher 2.7.1)
helm repo add rancher-stable https://rancher-mirror.rancher.cn/server-charts/stable

#更新
helm repo update

# 删除
helm repo remove rancher-stable

为Rahcher创建namespace

1
2
3
kubectl create namespace cattle-system
# 如需删除
kubectl delete namespace cattle-system

配置TLS

方式一:(外部TLS)

安装rancher时添加参数--set tls=external

external-tls-termination

方式二:安装cert-manager

版本兼容关系 https://cert-manager.io/docs/installation/supported-releases/

1
2
3
4
5
6
7
8
9
helm repo add jetstack https://charts.jetstack.io
helm update
helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.11.0 \
--set installCRDs=true

官方参考
https://cert-manager.io/docs/installation/kubectl/
https://cert-manager.io/docs/installation/helm/

检查状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
kubectl get pods --namespace cert-manager


{% asset_img get-pod-cert-mgr.png get-pod-cert-mgr %}

删除

> 删除要和安装的方式对应,比如helm安装那么就要helm方式删除
> [https://cert-manager.io/docs/installation/helm/#uninstalling](https://cert-manager.io/docs/installation/helm/#uninstalling)


### 安装Rancher

#### 使用cert-manager

```shell
helm install rancher rancher-stable/rancher \
--version 2.7.1 \
--namespace cattle-system \
--set rancherImage=registry.cn-hangzhou.aliyuncs.com/rancher/rancher \
--set hostname=rancher-admin.j3east.lan \
--set bootstrapPassword=admin

使用外部TLS

1
2
3
4
5
6
7
8
9
10
11
12
13
# 安装
helm install rancher rancher-stable/rancher \
--version 2.7.1 \
--namespace cattle-system \
--set tls=external \
--set rancherImage=registry.cn-hangzhou.aliyuncs.com/rancher/rancher \
--set hostname=rancher-admin.j3east.lan \
--set bootstrapPassword=admin

# 删除
helm uninstall rancher -n cattle-system
# 如果不能删除干净可以删除 namespace
kubectl delete namespace cattle-system

helm: https://artifacthub.io/packages/helm/rancher-stable/rancher/

查看状态

1
2
3
kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
deployment "rancher" successfully rolled out

访问Rancher Web

在电脑上添加host 10.11.12.80 rancher-admin.j3east.lan

打开 https://rancher-admin.j3east.lan

主界面

功能菜单

安装总结

距离上一次安装已经3年了,之前写的文档在这里,这次再战k8s熬了3个夜晚,感觉这次把架构搞清楚了。安装过程中有以下坑点:

  1. 最大的敌人是网络,需要为各种环境切换代理,也有代理不生效的地方,浪费了大量时间
  2. 因为不熟悉,中途出错了,花了时间还是不能解决只能推到重来
  3. 没有对版本兼容性做功课,网上东拼西凑看的文章合在一起,做到中间才发现不兼容
  4. 个人有强迫症,有瑕疵不能忍,要用最新版本。
  5. 所有问题在第一点的加持下时间翻倍

此外,如果是生产环境使用,证书问题可能需要考虑下自签是否合适。

排错

Kubernetes

1
kubectl get event -n cattle-system

参考资料

官方K3S文档
K3S官方文档
Rancher 2.7 高可用部署
ha-with-external-db
官方关于国内安装的建议
kubectl cheatsheet

CATALOG
  1. 1. 版本
  2. 2. 准备工作
    1. 2.1. 服务器规划
    2. 2.2. 安装 docker
  3. 3. LB 节点
    1. 3.1. nginx
  4. 4. 服务节点
    1. 4.1. dns for LB
    2. 4.2. 安装 k3s Server 节点
      1. 4.2.1. 解决/etc/rancher/k3s/k3s.yaml权限导致的kubectl命令执行失败(重要)
      2. 4.2.2. 查看状态
    3. 4.3. Helm 安装
      1. 4.3.1. 添加Helm仓库
    4. 4.4. 为Rahcher创建namespace
    5. 4.5. 配置TLS
      1. 4.5.1. 方式一:(外部TLS)
      2. 4.5.2. 方式二:安装cert-manager
      3. 4.5.3. 使用外部TLS
    6. 4.6. 访问Rancher Web
  5. 5. 安装总结
  6. 6. 排错
    1. 6.1. Kubernetes
  7. 7. 参考资料