我的 homelab: 本地集群连接 rancher 实现统一管理

背景

几天前,我们在云服务器上搭建了一个 rancher 平台,迈向了混合云的第一步。今天尝试将本地集群连接到 rancher 上面,实现统一管理。

基础概念

Fleet

这里要用到的功能主要是 Fleet,见 官方文档

这个产品主要是做多集群的管理,提供了一个统一的访问入口,我正好需要这个。😆

子集群怎么连接到 rancher 平台?

一开始我以为是直接拿子集群的 config 传上去就行了,不过 rancher 想的更周全一点,我连内网穿透都不需要了。

Cluster Agent

只需要在子集群上面跑一个 agent,就可以了。

这样子,只需要管理平台能够被公网访问,其他所有集群就都可以注册到集群了。

非常利好我这种在家里开 IDC 的人,在一个地方管理所有集群,非常爽。

前置准备

其实,我在证书这里卡了好久,最后是通过这种方式成功的。

首先,参考 官方关于证书管理的文档,重新配置一下 rancher。

1
helm upgrade rancher rancher-latest/rancher -n cattle-system -f values.yaml --version v2.9.1-rc4

这里其实我也还没有搞明白,就把自己的配置放出来供参考吧。

1
2
3
4
5
6
7
8
bootstrapPassword: *******
hostname: k.suyiiyii.top
ingress:
  tls:
    source: letsEncrypt
replicas: 1
privateCA: false
agentTLSMode: system-store

大概就是说,不使用私有 CA,并且使用 Let’s Encrypt 的证书。

然后,agentTLSMode: system-store 这个选项,是我卡了好久,在 这里 看到的。

之前的情况是,不管我是导入集群还是创建集群,都会报类似下面这样的错误:

Strict CA verification is enabled but encountered error finding root CA

[fatal] aborting system-agent installation due to requested strict ca verification with no ca checksum provided

好像和一个叫做Strict CA verification的策略有关,但是我怎么也没有配置好证书,所以就调整那个选择,把这个功能关掉了。

导入集群

剩下的就很简单了,界面上面点点的,然后会显示一条命令,然后在需要导入的机器上面执行一下就行了。

由于主要是界面操作,所以就引用一下官方文档的描述

注册集群

1. 点击 **☰ > 集群管理**。
2. 在**集群**页面上,单击**导入集群**。
3. 选择集群类型。
4. 使用**成员角色**为集群配置用户授权。点击**添加成员**添加可以访问集群的用户。使用**角色**下拉菜单为每个用户设置权限。
5. 如果你在 Rancher 中导入一个通用 Kubernetes 集群,请执行以下步骤:
a. 点击**集群选项**下的 **Agent 环境变量**,为 [rancher cluster agent](https://ranchermanager.docs.rancher.com/zh/how-to-guides/new-user-guides/launch-kubernetes-with-rancher/about-rancher-agents) 设置环境变量。你可以使用键值对设置环境变量。如果 Rancher Agent 需要使用代理与 Rancher Server 通信,则可以使用 Agent 环境变量设置 `HTTP_PROXY`,`HTTPS_PROXY` 和 `NO_PROXY` 环境变量。
b. 启用项目网络隔离,确保集群支持 Kubernetes `NetworkPolicy` 资源。用户可以通过**项目网络隔离**选项下的**高级选项**下拉菜单进行操作。
6. 单击**创建**。
7. 此处会显示 `cluster-admin` 权限的先决条件(参见上文的**先决条件**),其中包括满足先决条件的示例命令。
8. 将 `kubectl` 命令复制到剪贴板,并在配置了 kubeconfig 的节点上运行该命令,从而指向要导入的集群。如果你不确定配置是否正确,请在运行 Rancher 显示的命令之前运行 `kubectl get nodes` 进行验证。
9. 如果你使用自签名证书,你将收到 `certificate signed by unknown authority` 的消息。要解决此验证问题,请将 Rancher 中显示的以 `curl` 开头的命令复制到剪贴板。然后在配置了 kubeconfig 的节点上运行该命令,从而指向要导入的集群。
10. 在节点上运行完命令后,单击**完成**。

**结果**:

- 集群已注册并分配了 **Pending** 状态。Rancher 正在部署资源来管理你的集群。
- 当集群状态变为 **Active** 后,你可访问集群。
- **Active** 集群分配了两个项目,分别是 `Default`(包含命名空间 `default`)和 `System`(包含命名空间 `cattle-system`、`ingress-nginx`、`kube-public` 和 `kube-system`)。

最后,就可以直接给本地的集群打开一个 rancher 的 dashboard,♪٩(´ω`)و♪。

image.png

总结

有一大半的的时间卡在那个证书的事情上了,英文的文档看的也不是很懂,不过还是学到了很多关于证书的那些东西。

目前只搞定了导入集群,从干净的系统上创建集群还不行,会报错,好像又是和证书相关的 >_<

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
 level=info msg="[Applyinator] Command sh [-c k3s etcd-snapshot list --etcd-s3=false 2>/dev/null] finished with err: <nil> and exit code: 127"
 level=error msg="error loading CA cert for probe (kube-scheduler) /var/lib/rancher/k3s/server/tls/kube-scheduler/kube-scheduler.crt: open /var/lib/rancher/k3s/server/tls/kube-scheduler/kube-scheduler.crt: no such file or directory"
 level=error msg="error while appending ca cert to pool for probe kube-scheduler"
 level=error msg="error loading CA cert for probe (kube-controller-manager) /var/lib/rancher/k3s/server/tls/kube-controller-manager/kube-controller-manager.crt: open /var/lib/rancher/k3s/server/tls/kube-controller-manager/kube-controller-manager.crt: no such file or directory"
 level=error msg="error while appending ca cert to pool for probe kube-controller-manager"
 level=error msg="error loading x509 client cert/key for probe kube-apiserver (/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt//var/lib/rancher/k3s/server/tls/client-kube-apiserver.key): open /var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt: no such file or directory"
 level=error msg="error loading CA cert for probe (kube-apiserver) /var/lib/rancher/k3s/server/tls/server-ca.crt: open /var/lib/rancher/k3s/server/tls/server-ca.crt: no such file or directory"
 level=error msg="error while appending ca cert to pool for probe kube-apiserver"
 level=info msg="[K8s] updated plan secret fleet-default/custom-36f79f33e0c7-machine-plan with feedback"
 level=error msg="error syncing 'fleet-default/custom-36f79f33e0c7-machine-plan': handler secret-watch: error encountered when running apply: restart is pending for system-agent, waiting 5m0s until ignoring pending restart, requeuing"
 

还有就是,创建集群的时候看到了一个熟悉的面孔

image.png

其实我上个月已经搞起来了的,只不过只有一台机器,没啥必要。

感觉可以试试把 terraform 的部署平台从 pxe 转移到 vSphere 上,毕竟是企业级的产品,应该就没那么多 bug 了吧(pxe 的 provider 坑死我了)。

既然 rancher 可以直接在 vSphere 上面创建的话,那,是不是可以实现:当我机器不够用了,服务要炸了的情况,直接在 rancher 上面点几下,就可以自动创建节点,安装系统,配置节点并接入集群。

想想就好幸福。🥰🥰