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-forwardkubectl 的端口转发子命令,在你的本地机器和 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:/#

🙏完结撒花🎉感谢阅读

更多推荐