前言
Kubernetes 仪表盘为集群提供了基于网页的用户界面。人们可以使用该仪表盘在集群上部署应用程序,也可以对集群中已有的应用程序进行故障排查。此外,该仪表盘还能让人深入了解集群中的资源情况。它由 Kubernetes 官方提供,人们能够通过它创建、修改、更新以及删除 Kubernetes 对象。
在本文中,我们将安装 Kubernetes 官方提供的仪表盘,并设置一个服务账号来访问它。在继续阅读本文前,假定你已经熟悉 Kubernetes 并且拥有一个 Kubernetes 集群。
接下来,我将一步一步教大家如何进行安装和部署!!
准备工作
服务器准备
必要前提:
- 一个充满求知欲的大脑。
- 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。
我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。
注册链接: https://rainyun.ivwv.site
创建雨云服务器
以下步骤仅供参考,请根据实际需求选择配置。
- 点击 云产品 → 云服务器 → 立即购买。
- 选择距离你较近的区域,以保证低延迟。
- 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
- 最后按照提示进行购买。
- 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。
- 我们使用
PowerShell
进行SSH
远程连接到服务器,Win+R
打开运行窗口,输入powershell
后点击确定。
- 输入
ssh root@你的服务器IP
例如ssh root@154.9.227.239
回车后,首次需要输入yes
,再次回车后即可登录服务器。
- 到此为止,我们的云服务器就远程连接上了。
开始部署
部署 Kubernetes 仪表盘
要部署 Kubernetes 仪表盘,我们可以从 Github 下载其对象文件。使用以下命令下载对象文件,该文件包含了命名空间(Namespace)、服务账号(ServiceAccount)、服务(Service)、密钥(Secret)、配置映射(ConfigMap)、角色(Role)、集群角色(ClusterRole)、角色绑定(RoleBinding)、集群角色绑定(ClusterRoleBinding)、部署(Deployment)以及服务等的定义。
重命名文件,并将服务类型更改为 NodePort,可参考以下截图。
bash
vim kubernetes-dashboard-deployment.yml
内容:
yaml
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
type: NodePort
将服务类型更改为 NodePort 后,就可以创建负责部署 Kubernetes 仪表盘的所有对象了。
bash
kubectl apply -f kubernetes-dashboard-deployment.yml
检查通过上述命令创建的部署(Deployment)、Pod 和服务(Service)情况。上述命令还会创建命名空间、服务账号、服务、密钥、配置映射、角色、集群角色、角色绑定、集群角色绑定、部署以及服务等。
bash
kubectl get deployments -n kubernetes-dashboard
kubectl get svc
kubectl get pods
kubectl get pods -n kubernetes-dashboard
kubectl get svc -n kubernetes-dashboard
在上述截图中,可以看到类型为"NodePort"的 Kubernetes 仪表盘服务已经创建。这意味着仪表盘将可通过节点的任意 IP 地址以及 NodePort"32304"进行访问(在你的集群中,服务对应的端口可能有所不同)。
使用以下命令获取节点的 IP 地址,后续步骤中会用到这些 IP。
bash
kubectl get nodes -o wide
设置用于访问 Kubernetes 仪表盘的服务账号
要访问 Kubernetes 仪表盘,你需要有一个令牌(token)。要创建令牌,首先需要创建一个服务账号。
创建一个新文件,并添加以下内容来创建服务账号。你也可以从我的Github仓库下载该对象文件。
bash
vim admin-sa.yml
cat admin-sa.yml
yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: rahul-admin
namespace: kube-system
有了对象文件后,执行以下命令来创建服务账号。
bash
kubectl apply -f admin-sa.yml
现在需要将服务账号"rahul-admin"与集群角色"cluster-admin"相关联。创建一个包含以下内容的新文件来创建集群角色绑定(ClusterRoleBinding),或者点击此处从我的 Github 仓库下载对象文件。
bash
vim admin-rbac.yml
cat admin-rbac.yml
yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: rahul-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: rahul-admin
namespace: kube-system
执行以下命令来创建"ClusterRoleBinding"。
bash
kubectl apply -f admin-rbac.yml
现在,我们已经将"集群角色(ClusterRole)"------"cluster-admin"绑定到了"服务账号(ServiceAccount)"------"rahul-admin"上。
接下来就可以获取用于登录 Kubernetes 仪表盘的令牌了。要获取令牌,执行以下命令。
bash
SA_NAME="rahul-admin"
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep ${SA_NAME} | awk '{print $1}')
在上述截图中,可以看到用于登录 Kubernetes 仪表盘的令牌。复制该令牌,然后通过"节点 IP:节点端口(NodeIP:NodePort)"访问仪表盘的 URL。
这里,节点 IP 是集群中任意节点的 IP 地址,节点端口是我们创建的服务的端口(本文示例中是 32304,你实际操作时端口可能不同)。
访问 Kubernetes 仪表盘
访问"节点 IP:节点端口"对应的 URL 后,会看到如下界面。在此界面中,选择"令牌(Token)"选项,输入在上一步获取的令牌,然后点击"登录(Sign in)"按钮。
成功登录后,应该会看到如下所示的 Kubernetes 仪表盘界面。
在屏幕顶部,甚至可以更改命名空间并查看其中的资源。现在你就可以尽情探索 Kubernetes 仪表盘了。
结论
在本文中,我们在集群中部署了拥有仪表盘所需的所有 Kubernetes 对象。我们创建了服务账号和集群角色绑定,以此获取访问 Kubernetes 仪表盘的令牌,因为该仪表盘不能直接访问。这个仪表盘可以帮助你了解集群情况,并查看集群中包含的所有对象。
相关链接
雨云 - 新一代云服务提供商: https://rainyun.ivwv.site