基于 Docker for MAC 的 Kubernetes 本地环境搭建

版本选择

Docker Desktop:4.34.2 (167172)

Kubernetes:v1.30.2

下载 Docker Desktop

https://hub.docker.com/?uuid=1E11669E-3462-47D4-B114-8CE9405EE842

Docker Desktop 开启 Kubernetes

配置镜像加速

配置镜像加速

1
2
3
4
5
6
7
8
9
10
11
12
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://jeona3e2.mirror.aliyuncs.com"
]
}

为 Kubernetes 配置 CPU 和 内存资源,建议分配 4GB 或更多内存

分配CPU和内存资源

开启 Kubernetes,并等待 Kubernetes 开始运行

dockerdesktop开启k8s

验证 Kubernetes 集群状态

1
2
kubectl cluster-info
kubectl get nodes

验证集群状态

部署和访问 Kubernetes 仪表板(Dashboard)

Kubernetes Dashboard 目前仅支持基于 Helm 的安装,因为它速度更快, 并且可以让我们更好地控制 Dashboard 运行所需的所有依赖项。

安装 Helm

https://helm.sh/zh/docs/intro/install/

部署 Dashboard UI

1
2
3
4
# 添加 kubernetes-dashboard 仓库
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
# 使用 kubernetes-dashboard Chart 部署名为 `kubernetes-dashboard` 的 Helm Release
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard

访问 Dashboard UI

https://github.com/kubernetes/dashboard/blob/master/docs/user/accessing-dashboard/README.md

kubectl port-forward

1
kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard-kong-proxy 8443:443

https://localhost:8443

kubectl proxy

1
kubectl proxy --port=8001

kubectl 会使得 Dashboard 可以通过 http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard-kong-proxy:443/proxy/#/login 访问。

身份认证

https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/authentication

https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md

创建服务账号 ServiceAccount

当前的 namespace 中生成一个服务账号

1
kubectl -n kubernetes-dashboard create serviceaccount hiriki
1
2
3
4
5
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
1
kubectl apply -f serviceAccount.yaml 
创建集群角色绑定 ClusterRoleBinding

在大多数情况下,在使用kops、kubeadm或任何其他流行的工具配置集群之后,集群中已经存在ClusterRole cluster-admin。我们可以使用它,并仅为我们的 ServiceAccount 创建一个ClusterRoleBinding。如果不存在,则需要先创建此角色,然后手动授予所需的权限。

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
1
kubectl apply -f clusterRoleBinding.yaml 
生成服务账号token
1
kubectl -n kubernetes-dashboard create token admin-user
1
eyJhbGciOiJSUzI1NiIsImtpZCI6InNYZWtrSXFfU0wtanNlNURfT3BzR1UtTGYteHp6R3pLNGFCckxOSzdzZ00ifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzI3MTkzNTY0LCJpYXQiOjE3MjcxODk5NjQsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiZGY3MDBkYmQtZTQxZS00ZWU1LWE2YTctY2Q0Y2JhYjg0NjcyIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiN2VmN2Y4NWItOWNhNC00Yzk4LWJiMTQtMDMwZTZhZTc3MDU2In19LCJuYmYiOjE3MjcxODk5NjQsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.gbdJcDu3n17qXWIilqTuoDcQILNY0QK4k42Q1eY2JYK7Sl0i4kO3gwaQb4--qLyxZuDVsaoMvpDJL_lO3uBmvkRWfZmZTeWTtz7CWYPE1CWGa5S1aIoQrQtEJdA4J76LMmExigINfTW1oJgPbz1l9P16UY2ft4brHVFrrKC0-s1HXSuPqZb9ESAmKwiAyn_Dsm_TA6EakJJXM_Gbd1n1bnf-tFyw6Ejjs5S-Zs7ZFe6bTQUta3_oX2HwmS-tsB32TtONNk7PD7O3F9kvwuEuCwoQAzhq8uCe-r3X25PsUO6VBJZzvCoNqSqcJwC7wHzEoAT7PmzYTNsfIfmr12Jodg
生成长时间的服务账号token

使用绑定服务帐户的 secret 创建令牌,将令牌保存在 secret 中

1
2
3
4
5
6
7
8
apiVersion: v1
kind: Secret
metadata:
name: admin-user
namespace: kubernetes-dashboard
annotations:
kubernetes.io/service-account.name: "admin-user"
type: kubernetes.io/service-account-token
1
kubectl apply -f secret.yaml 

创建 Secret 后,执行以下命令来获取保存在 Secret 中的令牌

1
kubectl get secret admin-user -n kubernetes-dashboard -o jsonpath={".data.token"} | base64 -d

欢迎界面

填写 token 登录访问空集群的 Dashboard 的欢迎界面。

该页面包含一个指向此文档的链接,以及一个用于部署第一个应用程序的按钮。 此外,可以看到在默认情况下有哪些默认系统应用运行在 kube-system 命名空间中,比如 Dashboard 。

登录界面

欢迎界面