首页 > 其他分享 >Kubernetes(k8s) Web-UI界面(一):部署和访问仪表板(Dashboard)

Kubernetes(k8s) Web-UI界面(一):部署和访问仪表板(Dashboard)

时间:2023-06-29 12:23:29浏览次数:52  
标签:Web Kubernetes kubernetes scraper metrics UI dashboard root

目录

一.系统环境

本文主要基于Kubernetes1.21.9和Linux操作系统CentOS7.4。

服务器版本 dashboard版本 docker软件版本 Kubernetes(k8s)集群版本 CPU架构
CentOS Linux release 7.4.1708 (Core) v2.5.1 Docker version 20.10.12 v1.21.9 x86_64

Kubernetes集群架构:k8scloude1作为master节点,k8scloude2,k8scloude3作为worker节点。

服务器 操作系统版本 CPU架构 进程 功能描述
k8scloude1/192.168.110.130 CentOS Linux release 7.4.1708 (Core) x86_64 docker,kube-apiserver,etcd,kube-scheduler,kube-controller-manager,kubelet,kube-proxy,coredns,calico k8s master节点
k8scloude2/192.168.110.129 CentOS Linux release 7.4.1708 (Core) x86_64 docker,kubelet,kube-proxy,calico k8s worker节点
k8scloude3/192.168.110.128 CentOS Linux release 7.4.1708 (Core) x86_64 docker,kubelet,kube-proxy,calico k8s worker节点

二.前言

Kubernetes仪表板(Dashboard)是一个基于Web的用户界面,用于可视化监控和管理Kubernetes集群。它提供了对集群资源、应用程序部署和状态等信息的实时查看和操作。

使用Kubernetes仪表板(Dashboard)的前提是已经有一套可以正常运行的Kubernetes集群,关于Kubernetes(k8s)集群的安装部署,可以查看博客《Centos7 安装部署Kubernetes(k8s)集群》https://www.cnblogs.com/renshengdezheli/p/16686769.html。

三.仪表板(Dashboard)简介

Kubernetes仪表板是一个功能强大的工具,它允许您以图形化方式管理Kubernetes集群。通过仪表板,您可以:

  • 查看集群的总体概况、节点状态和资源使用情况。
  • 管理和监控Pod、Deployment、Service等Kubernetes对象。
  • 进行应用程序的故障诊断和调试。
  • 创建和编辑Deployment、Service、Ingress等资源配置。

了解了仪表板的基本功能后,让我们开始部署和访问Kubernetes仪表板。

四.部署Kubernetes仪表板(Dashboard)

本次部署的是2.5.1版本的dashboard,下载dashboard的安装yaml文件。

[root@k8scloude1 safe]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml

[root@k8scloude1 safe]# ls recommended.yaml 
recommended.yaml

查看dashboard需要的镜像。

[root@k8scloude1 safe]# grep image recommended.yaml 
          image: kubernetesui/dashboard:v2.5.1
          imagePullPolicy: Always
          image: kubernetesui/metrics-scraper:v1.0.7

提前在所有节点下载dashboard镜像和metrics-scraper镜像,外国的镜像下载不下来,我们下载阿里云的镜像。

在k8scloude1节点下载镜像。

[root@k8scloude1 safe]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper:v1.0.7
v1.0.7: Pulling from google_containers/metrics-scraper
18dd5eddb60d: Pull complete 
1930c20668a8: Pull complete 
Digest: sha256:36d5b3f60e1a144cc5ada820910535074bdf5cf73fb70d1ff1681537eef4e172
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper:v1.0.7
registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper:v1.0.7

[root@k8scloude1 safe]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard:v2.5.1
v2.5.1: Pulling from google_containers/dashboard
d1d01ae59b08: Pull complete 
a25bff2a339f: Pull complete 
Digest: sha256:cc746e7a0b1eec0db01cbabbb6386b23d7af97e79fa9e36bb883a95b7eb96fe2
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard:v2.5.1
registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard:v2.5.1

[root@k8scloude1 safe]# docker images | egrep 'dashboard|metrics-scraper'
registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard         v2.5.1      7fff914c4a61   10 days ago     243MB
registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper   v1.0.7      7801cfc6d5c0   9 months ago    34.4MB

kubernetes集群的worker节点也下载相关镜像。

[root@k8scloude2 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard:v2.5.1

[root@k8scloude2 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper:v1.0.7

[root@k8scloude2 ~]# docker images | egrep 'dashboard|metrics-scraper'
registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard                v2.5.1                7fff914c4a61   10 days ago     243MB
registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper          v1.0.7                7801cfc6d5c0   9 months ago    34.4MB


[root@k8scloude3 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard:v2.5.1

[root@k8scloude3 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper:v1.0.7

[root@k8scloude3 ~]# docker images | egrep 'dashboard|metrics-scraper'
registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard         v2.5.1      7fff914c4a61   10 days ago     243MB
registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper   v1.0.7      7801cfc6d5c0   9 months ago    34.4MB

修改yaml文件,把镜像换为我们下载好的镜像,镜像下载策略修改为imagePullPolicy: IfNotPresent。

[root@k8scloude1 safe]# vim recommended.yaml 

[root@k8scloude1 safe]# grep image recommended.yaml 
          #image: kubernetesui/dashboard:v2.5.1
          image: registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard:v2.5.1
          imagePullPolicy: IfNotPresent
          #image: kubernetesui/metrics-scraper:v1.0.7
          image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper:v1.0.7
          imagePullPolicy: IfNotPresent

可以发现dashboard是以sa服务账号kubernetes-dashboard运行的,关于服务账号Service Accounts详细内容,请查看博客《Kubernetes(k8s)服务账号Service Accounts》。

[root@k8scloude1 safe]# grep serviceAccountName recommended.yaml 
      serviceAccountName: kubernetes-dashboard
      serviceAccountName: kubernetes-dashboard

安装dashboard。

[root@k8scloude1 safe]# kubectl apply -f 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

kubectl get all查看所有资源。

[root@k8scloude1 safe]# kubectl get all -n kubernetes-dashboard
NAME                                             READY   STATUS    RESTARTS   AGE
pod/dashboard-metrics-scraper-7f458d9467-mrb7v   1/1     Running   0          73s
pod/kubernetes-dashboard-7bf6f979bf-c4ckm        1/1     Running   0          73s

NAME                                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/dashboard-metrics-scraper   ClusterIP   10.100.179.87   <none>        8000/TCP   73s
service/kubernetes-dashboard        ClusterIP   10.106.18.67    <none>        443/TCP    73s

NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/dashboard-metrics-scraper   1/1     1            1           73s
deployment.apps/kubernetes-dashboard        1/1     1            1           73s

NAME                                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/dashboard-metrics-scraper-7f458d9467   1         1         1       73s
replicaset.apps/kubernetes-dashboard-7bf6f979bf        1         1         1       73s

dashboard的pod都运行起来了。

[root@k8scloude1 safe]# kubectl get pod -n kubernetes-dashboard
NAME                                         READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-7f458d9467-mrb7v   1/1     Running   0          2m28s
kubernetes-dashboard-7bf6f979bf-c4ckm        1/1     Running   0          2m28s

查看svc,kubernetes-dashboard这个svc的服务发布类型为ClusterIP,外部不能访问,我们需要修改为NodePort,关于svc的详细内容,请查看博客《Kubernetes(k8s)服务service:service的发现和service的发布》。

[root@k8scloude1 safe]# kubectl get svc -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
dashboard-metrics-scraper   ClusterIP   10.100.179.87   <none>        8000/TCP   2m48s
kubernetes-dashboard        ClusterIP   10.106.18.67    <none>        443/TCP    2m48s

修改svc,把type :ClusterIP改为type: NodePort。

[root@k8scloude1 safe]# kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
service/kubernetes-dashboard edited

现在kubernetes-dashboard的svc类型就变为NodePort了。

[root@k8scloude1 safe]# kubectl get svc -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.100.179.87   <none>        8000/TCP        5m40s
kubernetes-dashboard        NodePort    10.106.18.67    <none>        443:31997/TCP   5m40s

五.访问Kubernetes仪表板(Dashboard)

5.1 使用token登录Dashboard

浏览器访问ip:31997即可访问dashboard界面(注意http访问不了),访问https://192.168.110.130:31997/,选择使用token登录。

image-20230626112838607

登录Dashboard的这个token,去对应的sa账号kubernetes-dashboard的secret里找。

每创建一个sa,都会有一个对应的secret(secret命名格式为:sa名-tokenXXXX)。

[root@k8scloude1 safe]# kubectl get secrets -n kubernetes-dashboard
NAME                               TYPE                                  DATA   AGE
default-token-dxmmt                kubernetes.io/service-account-token   3      11m
kubernetes-dashboard-certs         Opaque                                0      11m
kubernetes-dashboard-csrf          Opaque                                1      11m
kubernetes-dashboard-key-holder    Opaque                                2      11m
kubernetes-dashboard-token-26pf9   kubernetes.io/service-account-token   3      11m

因为dashboard是以sa账号kubernetes-dashboard运行的,所需的token就在对应的secret里。

[root@k8scloude1 safe]# kubectl get sa -n kubernetes-dashboard
NAME                   SECRETS   AGE
default                1         14m
kubernetes-dashboard   1         14m

查看kubernetes-dashboard-token-26pf9的描述信息,如下token就是dashboard登录所需的token。

[root@k8scloude1 safe]# kubectl describe secrets kubernetes-dashboard-token-26pf9 -n kubernetes-dashboard
Name:         kubernetes-dashboard-token-26pf9
Namespace:    kubernetes-dashboard
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: kubernetes-dashboard
              kubernetes.io/service-account.uid: ab3eeadd-eea3-4ab5-9ef5-d3d592a1d272

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1066 bytes
namespace:  20 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6InJJaUNYYXpKanA2Qkg4SW4yemE1MVM4MTJxeXpVbV9sQkk5RF9CaVpLZlEifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi0yNnBmOSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImFiM2VlYWRkLWVlYTMtNGFiNS05ZWY1LWQzZDU5MmExZDI3MiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.j11A6AmYaY1YKKxHXTF8zlzf21UYkBYW_QTSVtGr_G0ERZDlYyXbrxMWBGdByTNboptgjFRx-rfqKDE3S_zQKSYPbJvuch3sn4Tg8kD4j1aMWK6Kd5un5MUGYLTPs-HyzPgcfAEqRszlkDTSfEkss721lcqAyWpFcVl6RZLA22fOn1m27Qlsa3Sr8aS8GsvMxGVvEjeEtXhJujvF_U73G7QSy26Iz9uWtcZ6EfaMsyXasiUXkcOfVqiMGrbC29H3PvaGA5J5vrwdaPaxc6DQbhJG67jICve22tWH8Iu_Li9UsqFZnQUxLL6rOO2Pwa8vgakSqqT5hA6CWqAYNe1ttA

输入token之后成功登录dashboard。

image-20230626113031479

5.2 对sa账号kubernetes-dashboard授权

此时发现什么资源都没有

image-20230626113125083

查看报错信息,发现是没有权限。

image-20230626113157957

对sa账号kubernetes-dashboard绑定cluster-admin权限,授予管理员权限,关于授权的详细信息,请查看博客《Kubernetes(k8s)访问控制:权限管理之RBAC鉴权》。

对sa账号kubernetes-dashboard绑定cluster-admin权限,--serviceaccount的语法为:--serviceaccount=namespace名:sa账号。

[root@k8scloude1 safe]# kubectl create clusterrolebinding dashboardcrbinding --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:kubernetes-dashboard
clusterrolebinding.rbac.authorization.k8s.io/dashboardcrbinding created

授权之后,刷新浏览器,报错消失。

image-20230626113341136

5.3 访问Dashboard

点击关于,查看dashboard版本。

image-20230626113425146

此时,首页能看到相关信息了,点击命名空间,可以看到所有的命名空间了。

image-20230626113505290

可以选择命名空间查看相关pod。

image-20230626113908555

点击+可以创建资源,把yaml文件粘贴进去,然后点击上传,就可以创建资源了。

image-20230626113952056

六.总结

本篇博客介绍了如何部署和访问Kubernetes仪表板。通过安装仪表板,您可以方便地管理和监控Kubernetes集群,并进行诊断和调试操作。

Kubernetes仪表板提供了直观的用户界面,使您能够更轻松地执行集群管理任务和应用程序配置。

七.附加信息

  • Kubernetes仪表板对于展示和管理集群中的资源非常有用,但在生产环境中要小心谨慎地使用,并且合理限制访问权限。
  • 建议在部署仪表板之前了解和熟悉Kubernetes的基本概念和操作,以便更好地利用仪表板进行管理和监控。
  • 请确保您的Kubernetes版本与本文档中提到的版本匹配,以避免可能的不兼容性问题。

标签:Web,Kubernetes,kubernetes,scraper,metrics,UI,dashboard,root
From: https://www.cnblogs.com/renshengdezheli/p/17513879.html

相关文章

  • appium报错AttributeError: 'WebDriver' object has no attribute 'find_element_by_i
    解决方法:fromappium.webdriver.common.appiumbyimportAppiumBy#导入AppiumBysearch=driver.find_element(AppiumBy.ID,"com.android.settings:id/search")#编写格式:driver.find_element(by=AppiumBy.ACCESSIBILITY_ID,value='accessibility_id')思考流程:......
  • 常见的Web应用程序架构
    资料:Commonwebapplicationarchitectures|MicrosoftLearn微软的这篇文章,讨论了常见的web应用程序架构。大概可以分为三类:1,新建的asp.netCoreweb项目,单体架构,在单个项目场景中,通过使用文件夹来实现关注点分离。如图: 单体架构随着业务发展,可能需要新加很多文件夹,各个文......
  • Android system & system_ext & product等分区中的build.prop文件是怎么生成的?
    Androidsystem&system_ext&product等分区中的build.prop文件是怎么生成的? #http://aospxref.com/android-13.0.0_r3/xref/build/make/core/sysprop.mk #http://aospxref.com/android-13.0.0_r3/xref/build/make/tools/buildinfo.sh buildinfo.sh脚本内容:#!/bin......
  • 小米,MiUI文字转语言没有首选引擎
    小米,MiUI文字转语言没有首选引擎,可以试着下载“小爱语音引擎”。链接:小爱语音引擎-小米应用商店(mi.com)微云:点击此处                            ......
  • 【雕爷学编程】Arduino动手做(135)---W5100 网络扩展板模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • 图书商城项目练习①管理后台Vue2/ElementUI
    本系列文章是为学习Vue的项目练习笔记,尽量详细记录一下一个完整项目的开发过程。面向初学者,本人也是初学者,搬砖技术还不成熟。项目在技术上前端为主,包含一些后端代码,从基础的数据库(Sqlite)、到后端服务Node.js(Express),再到Web端的Vue,包含服务端、管理后台、商城网站、小程序/App,分......
  • Three.js教程:gui.js库(分组)
    推荐:将NSDT场景编辑器加入你的3D工具链其他系列工具:NSDT简石数字孪生gui.js库(分组)当GUI交互界面需要控制的属性比较多的时候,为了避免混合,可以适当分组管理,这样更清晰。gui交互界面不分组gui交互界面不分组,只有一个默认的总的菜单。constgui=newGUI();//创建GUI对象......
  • 软件版本GA、RC、beta、Build 代表的含义
    GAGeneralAvailability,正式发布的版本,官方开始推荐广泛使用,国外有的用GA来表示release版本。RELEASE正式发布版,官方推荐使用的版本,有的用GA来表示。比如spring。Stable稳定版,开源软件有的会用stable来表示正式发布的版本。比如Nginx。Final最终版,也是正式发布版的一种表示方法......
  • vue2+element-ui国际化实战不刷新页面
    背景有的时候我们做的项目需要支持中英文切换,那么我们就需要使用到vue-i18n插件步骤安装以及挂载安装vue-i18n依赖npmivue-i18n@8在src同级的目录下创建language文件下,在language文件夹下新增3个文件(index.js,en.js,zh.js)index.jsimportVuefrom"vue";importVu......
  • WP CTF-Web 攻防世界 GFSJ0475 get_post
    「场景」进入场景后提示请用GET方式提交一个名为a,值为1的变量「思路」根据提示在url后加上?a=1,回车发送请求。出现新提示。请再以POST方式随便提交一个名为b,值为2的变量打开brupsuite,配置本地代理为brupsuite中proxy的地址和端口号,刷新浏览器页面,brupsuite捕获到请求......