我的 homelab: k3s & rancher 安装记录

前言

是的,我又来折腾 homelab 了,难得有一个有点空闲的周末。

昨天买了个腾讯云的服务器,2c4g,应该勉强够玩 k3s 了,这就来体验一下。😝

目标

安装 k3s+rancher,实现公网 kubectl 和 dashboard 访问。

步骤

其实还是比较简单的,没有什么解决不了的,严格按照顺序来就行了。

域名解析

因为要公网访问,k8s 里面还一堆证书,搞个域名好一些。

直接 A 记录解析到 ip,我这里用的是 k.suyiiyii.top

Hostname

这里要把服务器的 hostname 设置为域名,不然后面安装之后用域名访问不了的。(别问我是怎么知道的)

1
vi /etc/hostname

把这个文件的内容改成前面解析的域名就行了

K3S

参考 官方中文文档

1
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

还提供了国内镜像,安装非常快,感谢 rancher 的本地化团队。

DockerHub 镜像

由于众所周知的原因,我们还要给 dockerhub 配置镜像。

这里就只配置 dockerhub 的镜像,做个示范。

参考 官方文档,由于 k3s 的 contianerd 是内置在 k3s 可执行文件里面的,所以我们需要配置 k3s 来使用镜像。

镜像的配置在这个地方 /etc/rancher/k3s/registries.yaml

1
2
3
4
5
6
cat > /etc/rancher/k3s/registries.yaml <<EOF
mirrors:
  docker.io:
    endpoint:
      - "https://cr.suyiiyii.top/docker.io/"
EOF

其中,k3s 的 containerd 的配置文件在这里 /var/lib/rancher/k3s/agent

Helm

一个 k8s 的包管理工具

参考 官方中文文档

我这里是用包管理器安装

1
2
3
4
5
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
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

Rancher

参考 官方中文文档

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest

kubectl create namespace cattle-system

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/<VERSION>/cert-manager.crds.yaml

helm repo add jetstack https://charts.jetstack.io

helm repo update

helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace
 
helm install rancher rancher-latest/rancher \
	--namespace cattle-system \
	--set hostname=k.suyiiyii.top \
	--set replicas=1 \
	--set bootstrapPassword=<PASSWORD_FOR_RANCHER_ADMIN>

执行之后会得到下面这样的结果

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
NAME: rancher
LAST DEPLOYED: Sun Aug 11 16:29:29 2024
NAMESPACE: cattle-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Rancher Server has been installed.

NOTE: Rancher may take several minutes to fully initialize. Please standby while Certificates are being issued, Containers are started and the Ingress rule comes up.

Check out our docs at https://rancher.com/docs/

If you provided your own bootstrap password during installation, browse to https://k.suyiiyii.top to get started.

If this is the first time you installed Rancher, get started by running this command and clicking the URL it generates:

echo https://k.suyiiyii.top/dashboard/?setup=$(kubectl get secret –namespace cattle-system bootstrap-secret -o go-template=’{{.data.bootstrapPassword|base64decode}}')

1
2

To get just the bootstrap password on its own, run:

kubectl get secret –namespace cattle-system bootstrap-secret -o go-template=’{{.data.bootstrapPassword|base64decode}}{{ “\n” }}'

1
2
3


Happy Containering!

就安装完成了。

此时,就可以直接打开域名,就可以看到 dashboard 了。

Untitled.png

rancher 的功能真的非常丰富,非常适合初学者上手体验,感谢 rancher 团队。

Untitled.png

给 Dashboard 添加证书

安装的时候不知道要配置,结果安装好之后,rancher 用的是自签的证书,浏览器不认,很难受。所以再搞个 Let’s Encrypt 的证书。

Cert Manger

类似于 SC 和 PV 的关系,k8s 中证书这边也存在一条这样子的请求供给关系。具体流程是 ingress 请求证书,issuer 收到请求并签发证书。在这里,Cert Manger 就是做的 Issuer 的管理。

Issuer

前面我们已经安装 Cert Manger,我们这里创建一个 Let Encrypt 的 Issuer。把邮箱换成自己的,剩下的都不用动。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
spec:
  acme:
    email: name@example.com
    privateKeySecretRef:
      name: letsencrypt-prod
    server: https://acme-v02.api.letsencrypt.org/directory
    solvers:
      - http01:
          ingress:
            class: traefik

Ingress

为了避免误操作导致打不开 dashboard,我这里选择新建一个 ingress。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
    kubernetes.io/ingress.class: traefik
  name: rancher-ingress
  namespace: cattle-system
spec:
  rules:
    - host: rancher.k.suyiiyii.top
      http:
        paths:
          - backend:
              service:
                name: rancher
                port:
                  number: 80
            path: /
            pathType: Prefix
  tls:
    - hosts:
        - rancher.k.suyiiyii.top

部署之后,等待证书签发完毕,就可以愉快地玩耍了。

Enjoy ~

Licensed under CC BY-NC-SA 4.0