03_使用DockerDesktop自带的k8s集群
文章目录
1 前言
在 《02_在多个RockyLinux10虚拟机上安装k8s集群》https://blog.csdn.net/ShiJunzhiCome/article/details/163312198 中,我用3个虚拟机搭建了一个 k8s 集群。随着深入学习 k8s,我了解到宿主机上已经安装过的 Docker Desktop 本身,就支持快速搭建 k8s 集群。今天就记录一下相关的操作步骤。
2 在 Windos 11 上安装 Docker Desktop
访问 Docker 的官网 https://www.docker.com/products/docker-desktop/ 可以下载、安装 Docker Desktop。
3 设置 Docker Desktop
如下图,设置镜像仓库(因为无法访问 DockerHub,所以高低得设置个镜像仓库,方便后续拉取镜像):

把如下代码粘贴到配置里面,然后点【Apply】按钮。
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": true,
"registry-mirrors": [
"https://docker.m.daocloud.io"
]
}
4 启用 Docker Desktop 自带的 k8s 集群
还是在设置页面,我们开启 k8s 集群,如下图:

等一段儿时间,让 Docker Desktop 初始化这个 k8s 集群。集群构建成功之后,我们可以在 Docker Desktop 的首页 k8s 菜单中,看到目前有3个 node,其中一个是 control-plane,另外2个是 worker-node,如下图:

到这里,就算是大功告成了✌️👏👏👏
5 我们也安装个 Headlamp
《02_在多个RockyLinux10虚拟机上安装k8s集群》里面,我们为用虚拟机搭建的 k8s 集群,安装了个 Headlamp,用于在浏览器上查看 k8s。现在,我们也为用 Docker Desktop 构建的 k8s 集群,依旧是使用 yaml 安装它。
5.1 执行 kubectl apply -f 命令
在 Windwos 11 的 PowerShell 中执行如下命令:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/kubernetes-headlamp.yaml
# 会输出:
service/headlamp created
deployment.apps/headlamp created
secret/headlamp-admin created
5.2 使用 NodePort 暴露服务
将 Headlamp Service 类型改为 NodePort:
kubectl patch svc headlamp -n kube-system -p '{"spec":{"type":"NodePort"}}'
查看分配的 NodePort 端口:
kubectl get svc -n kube-system headlamp
# 比如输出
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
headlamp NodePort 10.96.111.42 <none> 80:30137/TCP 16h
5.3 端口转发
在 Windwos 11 的 PowerShell 中执行如下命令,用于端口转发:
kubectl port-forward svc/headlamp -n kube-system 30137:80
简单解释下上面的命令:
| 部分 | 含义 |
|---|---|
kubectl port-forward | kubectl 的端口转发子命令,在你的本地机器和 K8s 集群中的某个资源之间建立一条临时的网络隧道 |
svc/headlamp | 转发目标是一个 Service,名字叫 headlamp。svc 是 service 的缩写 |
-n kube-system | 指定命名空间为 kube-system(K8s 系统组件默认所在的命名空间) |
30137:80 | 本地端口:目标端口,即把你本地的 8080 端口映射到 headlamp Service 的 80 端口 |
执行这条命令后,你在浏览器里访问 http://localhost:30137,流量就会被转发到 K8s 集群中 kube-system 命名空间下的 headlamp Service 的 80 端口上。
5.4 创建访问 Token
Headlamp 本身不提供用户系统,而是直接使用 Kubernetes 的 RBAC 权限进行认证。所以需要创建一个 ServiceAccount 并获取其 Token 用于登录。
5.4.1 创建 ServiceAccount
在 Windwos 11 的 PowerShell 中执行如下命令,用于创建一个拥有管理员权限的 ServiceAccount(例如 headlamp-admin):
@"
apiVersion: v1
kind: ServiceAccount
metadata:
name: headlamp-admin
namespace: kube-system
"@ | kubectl apply -f -
# 会输出:
serviceaccount/headlamp-admin created
5.4.2 绑定 cluster-admin 权限
在 Windwos 11 的 PowerShell 中执行如下命令,为刚才创建的 ServiceAccount 绑定集群管理员权限:
@"
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: headlamp-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: headlamp-admin
namespace: kube-system
"@ | kubectl apply -f -
# 会输出:
clusterrolebinding.rbac.authorization.k8s.io/headlamp-admin created
5.4.3 生成 Token
在 Windwos 11 的 PowerShell 中执行如下命令,生成一个长期有效的 Token(例如 1 年)。如果不指定 --duration,默认 Token 有效期为 1 小时,建议延长。
kubectl create token headlamp-admin -n kube-system --duration=8760h
# 会输出:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjJzYy1CN3Z6aW1iTEdtUzVLWmdYcHE0aWpqUEdIQlVUbmpQS1BldUlfYk0ifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxODE4NzU3NTExLCJpYXQiOjE3ODcyMjE1MTEsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiYzMzYTUzNWMtMjZkMC00OTcyLTg0MjUtYjFlNzYyMWI4ODY2Iiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJoZWFkbGFtcC1hZG1pbiIsInVpZCI6IjVhM2QyNWZhLWY5ZTEtNDMzNy1hY2QxLWIwYzI0NGRiMTc1ZSJ9fSwibmJmIjoxNzg3MjIxNTExLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06aGVhZGxhbXAtYWRtaW4ifQ.a5UTQ6gkqtHa0sxMugiMuNxc2ZwKh1fL3aJyx37hHMyjF2yA1N1ADn0TMoM2PLnzHEQFtG80V9MDDMyQz-hXkrzf0S3o1E9z2X2ajcsH0QHgIgP1hGLpKycS7f58mqPYuFqiLo32Xy1VuzIfLHLh8YOp_BjLIOtdZwnLzeziz2YZTFHAmuVlYfxdywXUaLcZRyrTUFR3mr4X7upXlWLTsxfVraFjFe0MmvEagP2GsOQw9zDXdgH2N1jUU6zvw2C4H1gUP2q2rQfjSrXLr3CfCRaESdcadNXczw7gWxgsk8i-9IRlbtnAAQQSo4eb3QcA-B6CYoxGUuCODNBKF8dDxw
5.5 在宿主机的浏览器上访问
Chrome 浏览器上访问 http://localhost:30137/ ,就可以弹出登录页面,输入上面生成的 token,就可以进入如下页面:

6 尝试进入 k8s 集群的某个 node
在 Windows 11 的 PowerShell 中,我们先执行命令,查看当前 k8s 集群有哪些节点:
kubectl get nodes
# 输出如下内容
NAME STATUS ROLES AGE VERSION
desktop-control-plane Ready control-plane 20d v1.36.1
desktop-worker Ready <none> 20d v1.36.1
desktop-worker2 Ready <none> 20d v1.36.1
然后,我们使用 docker container 的命令,进入其中某个 node:
# 下面的命令中,desktop-worker 就是前面的3个 node 名称中的任意一个,
# 最后面可以是 bash,也可以是 sh
docker container exec -it desktop-worker bash
# 输出如下内容
root@desktop-worker:/#
🙏完结撒花🎉感谢阅读
更多推荐
所有评论(0)