前言
是的,我又来折腾 homelab 了,难得有一个有点空闲的周末。
昨天买了个腾讯云的服务器,2c4g,应该勉强够玩 k3s 了,这就来体验一下。😝
目标
安装 k3s+rancher,实现公网 kubectl 和 dashboard 访问。
步骤
其实还是比较简单的,没有什么解决不了的,严格按照顺序来就行了。
域名解析
因为要公网访问,k8s 里面还一堆证书,搞个域名好一些。
直接 A 记录解析到 ip,我这里用的是 k.suyiiyii.top
Hostname
这里要把服务器的 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 了。
rancher 的功能真的非常丰富,非常适合初学者上手体验,感谢 rancher 团队。
给 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 ~