专栏首页7DGroup搭建 Kubernetes 集群 Dashboard 2.0+ 可视化插件

搭建 Kubernetes 集群 Dashboard 2.0+ 可视化插件

一、概述

Kubernetes 还开发了一个基于 Web 的 Dashboard,用户可以用 Kubernetes Dashboard 部署容器化的应用、监控应用的状态、执行故障排查任务以及管理 Kubernetes 各种资源。

Dashboard 的 GitHub 地址:https://github.com/kubernetes/dashboard

二、系统环境

  • Kubernetes 版本:1.18.5
  • kubernetes-dashboard 版本:v2.0.3

三、兼容性

Kubernetes版本

1.13

1.14

1.15

1.16

1.17

1.18

兼容性

?

  • ✕ 不支持的版本范围。
  • ✓ 完全支持的版本范围。
  • ? 由于Kubernetes API版本之间的重大更改,某些功能可能无法在仪表板中正常运行。

四、下载安装

执行安装:

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.2/aio/deploy/recommended.yaml
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.2/aio/deploy/recommended.yaml
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created

可以看到新版本 Dashboard 集成了一个metrics-scraper 的组件,可以通过 Kubernetes 的 Metrics API 收集一些基础资源的监控信息,并在 web 页面上展示,所以要想在页面上展示监控信息就需要提供 Metrics API,前提需要安装 Metrics Server。

新版本的 Dashboard 会被默认安装在 kubernetes-dashboard 这个命名空间下面,查看 pod 名称:

$ kubectl get pods --namespace=kubernetes-dashboard -o wide
NAME                                         READY   STATUS    RESTARTS   AGE     IP           NODE        NOMINATED NODE   READINESS GATES
dashboard-metrics-scraper-6b4884c9d5-jdw22   1/1     Running   0          7h42m   10.244.3.3   k8s-node2   <none>           <none>
kubernetes-dashboard-7bfbb48676-l28c9        1/1     Running   0          7h38m   10.244.2.6   k8s-node3   <none>           <none>

五、修改为 NodePort 访问

将 dashboard 改为 NodePort 方式访问,不使用 API Server 访问。因为 API Server 访问特别麻烦,一大串,比如:http://172.16.106.226:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

如果是 NodePort 方式访问,就比较简单了,比如:https://172.16.106.209:32027/

查看 kubernetes-dashboard:

kubectl --namespace=kubernetes-dashboard get service kubernetes-dashboard
$ kubectl --namespace=kubernetes-dashboard get service kubernetes-dashboard
NAME                   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard   ClusterIP  10.98.194.221   <none>        443/TCP   7h45m

编辑 kubernetes-dashboard

kubectl --namespace=kubernetes-dashboard edit service kubernetes-dashboard

将里面的type: ClusterIP改为type: NodePort即可。保存等一会儿,重新查看,就变为 NodePort 了。

$ kubectl --namespace=kubernetes-dashboard get service kubernetes-dashboard
NAME                   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard   NodePort   10.98.194.221   <none>        443:32027/TCP   7h45m

六、证书管理

Dashboard 安装完成,改为 NodePort 形式之后,通过 https://172.16.106.209:32027/ 访问,会提示安全信息如下:

图片

这就无法访问了,需要生成证书,这个比较简单,照着下面来就行:

#Step 1: 新建目录:
mkdir key && cd key

#Step 2: 生成 SSL 证书
openssl genrsa -out dashboard.key 2048

#Step 3: 我这里写的自己的 node1 节点,因为我是通过 nodeport 访问的;如果通过 apiserver 访问,可以写成自己的 master 节点 ip
openssl req -new -out dashboard.csr -key dashboard.key -subj '/CN=172.16.106.209'
openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt

#Step 4: 删除原有的证书 secret
kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard

#Step 5: 创建新的证书 secret
kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kubernetes-dashboard

#Step 6: 查看 pod
kubectl get pod -n kubernetes-dashboard

#Step 7: 重启 pod
kubectl delete pod kubernetes-dashboard-7b5bf5d559-gn4ls  -n kubernetes-dashboard

执行完成之后,再次访问点开高级之后,有个继续前往的链接,点击即可:

图片

七、创建访问的 ServiceAccount

最后需要创建一个绑定 admin 权限的 ServiceAccount,获取其 Token 用于访问看板。

1、创建用户

新建文件名admin-user.yaml,复制下面一段:

apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard

复制到admin-user.yaml文件后,执行:kubectl create -f admin-user.yaml

2、绑定用户关系

新建文件admin-user-role-binding.yaml

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

复制到 admin-user-role-binding.yaml 文件后,执行:kubectl create -f admin-user-role-binding.yaml

如果过程中提示存在或者需要删除,只需要 kubectl delete -f 相应的 yaml 文件即可。

八、获取令牌

按照官网提示的获取 token 方法:

kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
$ kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
Name:         admin-user-token-s5k78
Namespace:    kubernetes-dashboard
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: admin-user
kubernetes.io/service-account.uid: f5d700df-bbba-4425-905e-dc3ff597d535
Type:  kubernetes.io/service-account-token
Data
====
ca.crt:     1025 bytes
namespace:  20 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6InJpUEFuZEVpTnZCb1d3cmRIZHdSNDZvUXVVNFZjSWM3ZlpBMEhRWkxMSTAifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXM1azc4Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJmNWQ3MDBkZi1iYmJhLTQ0MjUtOTA1ZS1kYzNmZjU5N2Q1MzUiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.OM_HAmENxAjjH-uzsFLgVpYiH5e7KmU9Y76CL1k1rFZJBctyAyqeOJGJiRcTbaDp10dBS6Qm4bNKfmP2Tq3in5G6odxbibhx6F13XcHMcCMD_UMPjndD0s9Vw4rih0jShJC7uyhE0fV6jBBsPK2iGzx6Z3wyw6RaeZmDUJ6E_gKc3uvjAjBiCZj5DvwVtj-_BQbCNTGGlADm9MLwceuzIXnYCeJMrFFVCOxj0fEdzB59E_x-BCzwyedZfhWC0CSmKkRSw9dqm11rFPWp3mIa_f6APFe69WfMNovpFeme9qhtF7s49WZdOf08fUwznJVK4QFdk0TtKUEigs7SI_aoRw

九、登录新版本 Dashboard 查看

本人的 Kubernetes 集群地址为”172.16.106.209”并且在 Service 中设置了 NodePort 端口为 32027和类型为 NodePort 方式访问 Dashboard ,所以访问地址:https://172.16.106.209:32027 进入 Kubernetes Dashboard 页面,然后输入上一步中创建的 ServiceAccount 的 Token 进入 Dashboard,可以看到新的 Dashboard。

跟上一个版本比较,整体风格更加简洁,并且,可以感受到的是这个页面比以前访问速度更加快速(估计是加了缓存),除了之外还增加了:

  • 新增黑色主题
  • 新增对 CRD 的管理
  • 新增对集群角色的编辑
  • 新增对 kubernetes 对象以 yaml 格式进行编辑
  • 修改集群资源指标的监控信息以及看板样式

黑色主题

CRD 管理

集群角色编辑

对象以 yaml 格式进行编辑

资源指标的监控

文章源码:https://github.com/zuozewei/blog-example/tree/master/Kubernetes/k8s-dashboard

本文分享自微信公众号 - 7DGroup(Zee_7DGroup),作者:左泽位

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Jenkins Pipeline+SonarQube+Python集成钉钉群消息自动通知(webhook版)

    SonarQube 最需要的功能之一是能够在质量未达到预期水平时使通知或构建失败。我们知道在 SonarQube 中具有质量阀的内置概念,在上文 Jenkins...

    高楼Zee
  • Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

    现如今大家越来越认识到质量前移的重要性。如果一开始就写出优质的、经过测试的代码,那么后面的测试阶段将会减少很多不必要的时间。如果开发人员迫于业务压力,一味追求项...

    高楼Zee
  • 性能基础之浅谈常见接口性能压测

    目前我们接触到RPC接口主要有Hession、Dubbo、HTTP、Thrift、Hprose等

    高楼Zee
  • TKE上搭建集群Dashboard

    如果需要将TKE的信息展示给多个部门的人查看,但是又不想让他们通过控制台查看,这边可以搭建一个dashborad用来展示。

    聂伟星
  • Web基础配置篇(十七): Kubernetes dashboard安装配置

    Kubernetes 简称为K8S,是用于自动部署,扩展和管理容器化应用程序的开源系统。Kubernetes的目标是让部署容器化的应用简单并且高效(powerf...

    品茗IT
  • Kubernetes-dashboard安装、配置令牌和kubeconfig登录

    kubectl patch svc -n kube-system kubernetes-dashboard -p '{"spec":{"type":"NodeP...

    菲宇
  • 理解决策树

    决策树是最简单的机器学习算法,它易于实现,可解释性强,完全符合人类的直观思维,有着广泛的应用。决策树到底是什么?简单地讲,决策树是一棵二叉或多叉树(如果你对树的...

    SIGAI学习与实践平台
  • Chapter 3 OpenStack认

    Chapter 3 OpenStack认证服务(Identity service)

    py3study
  • Leetcode 1483. 树节点的第 K 个祖先(DP,倍增)

    给你一棵树,树上有 n 个节点,按从 0 到 n-1 编号。树以父节点数组的形式给出,其中 parent[i] 是节点 i 的父节点。树的根节点是编号为 0 的...

    glm233
  • 一文搞定SonarQube接入C#(.NET)代码质量分析

    C#语言接入Sonar代码静态扫描相较于Java、Python来说,相对麻烦一些。Sonar检测C#代码时需要预先编译,而且C#代码必须用MSbui...

    测试开发技术

扫码关注云+社区

领取腾讯云代金券