0
点赞
收藏
分享

微信扫一扫

k8s-安装仪表盘Dashboard笔记

岛上码农 2022-03-11 阅读 62

Dashboard 功能:

  • 将容器应用部署到 Kubernetes 集群中。
  • 对容器应用排错。
  • 获取运行在集群中的应用的概览信息。
  • 创建或者修改 Kubernetes 资源,如 Deployment,Job,DaemonSet 等等。
  • 管理集群资源,如弹性伸缩,滚动升级,重启 Pod 等。
    Dashboard-UI

部署 Dashboard UI

先将所有的 worker 节点设置为污点,让 dashboard 只部署在 server 节点上,否则后续访问设置会比较麻烦。

# 设置 k8s-node-1 为污点
$ kubectl taint nodes k8s-node-1 note=void-dashboard:NoSchedule
node/k8s-node-1 tainted
# 设置 k8s-node-2 为污点
$ kubectl taint nodes k8s-node-2 note=void-dashboard:NoSchedule
node/k8s-node-2 tainted

在 kubernetes/dashboard: General-purpose web UI for Kubernetes clusters (github.com) 查看当前 Dashboard 的版本。

使用以下命令部署:

# 下载yaml文件
$  wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml
# 部署dashboard
$ kubectl create -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

yaml 是 K8S 的资源清单文件,每个对象拥有哪些属性都可以在 yaml 中编辑。

如果因网络原因无法正常下载,可以在 github 上打开 recommended.yaml,然后复制代码保存到本地再执行。

查看 pod 状态:

$ kubectl get pod --namespace kubernetes-dashboard -o wide
NAME                                        READY   STATUS    RESTARTS   AGE    IP           NODE      NOMINATED NODE   READINESS GATES
dashboard-metrics-scraper-c45b7869d-dx4xm   1/1     Running   0          104s   10.42.0.22   k8s-s01   <none>
<none>
kubernetes-dashboard-764b4dd7-vcvkc         1/1     Running   0          104s   10.42.0.23   k8s-s01   <none>
<none>

如果 STATUS 显示 ImagePullBackOff ,表示拉取镜像失败,可以等待自动重试直到状态变为 RunningRunning 表示容器创建完成,并且 Pod 已经被调度到了一个 Node 上。

查看 svc 服务以及端口:

$ kubectl get svc -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
kubernetes-dashboard        ClusterIP   10.43.237.71    <none>        443/TCP    9m51s
dashboard-metrics-scraper   ClusterIP   10.43.236.225   <none>        8000/TCP   9m51s

使用 kubectl 命令行工具启用 Dashboard 访问:

# 前台启动,会占用终端窗口
$ kubectl proxy
Starting to serve on 127.0.0.1:8001

注:目前 UI 只能通过执行这条命令的机器进行访问。

新开一个终端窗口,尝试本地访问 Dashboard:

$ curl http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/ 
# 成功会返回页面内容
<!--
Copyright 2017 The Kubernetes Authors.
...
--><!DOCTYPE html><html lang="en" dir="ltr"><head>
  <meta charset="utf-8">
  <title>Kubernetes Dashboard</title>
...

访问正常,现在可以取消 worker 节点的污点设置:

$ kubectl taint nodes k8s-node-1 note=void-dashboard:NoSchedule-
node/k8s-node-1 untainted
$ kubectl taint nodes k8s-node-2 note=void-dashboard:NoSchedule-
node/k8s-node-2 untainted

仪表盘 RBAC 配置

参考:Kubernetes 仪表盘 | Rancher文档

为了保护集群数据,默认情况下,Dashboard 会使用最少的 RBAC 配置进行部署。 当前,Dashboard 仅支持使用 Bearer 令牌登录。

为演示样本创建登录 Token

创建以下资源清单文件:

dashboard.admin-user.yml

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

以上配置将创建名为 admin-user,归属名称空间为 kubernetes-dashboard 的服务帐号。

dashboard.admin-user-role.yml

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

注:多数情况下,使用 kops、kubeadm、或其它流行工具配置好集群后,ClusterRole cluster-admin 就自动创建了。如果不存在,需要先手工创建,并授予必要权限。

部署以上配置:

$ kubectl create -f dashboard.admin-user.yml -f dashboard.admin-user-role.yml

serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user created

获取 Bearer Token:

$ kubectl -n kubernetes-dashboard describe secret admin-user-token | grep '^token'
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6Im5WWmdqdm1RVC0xVTRfOXRwYzJKNnZCVkN4Q1lWcmdYWFZQMldPeFdlbU0ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLWhqdGJtIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI0ODY2OGM5Yi0zNmNmLTQwNjMtYjVjNi0xZTI0OTI0MzViYTMiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.RIFgQHv_wImASJ2uWtGVKvVBu9-C1YNF_bQsn6bEjPYTChbp_ryEkD-qr276HHXrcFM83Ynfg3juXrTTq_NRjqfoHf8CciknZr0l2Ifo0IFalxinAvm8PqYu7_eVU5JEt6vN_u07N3w6zz0DNOBxzxerwyOTZ6mGyTmmHGlfax8iheYevsxSWIftpml975QLx32ZsT6aMVAmO2H0bz0OhOQWh6Ddj3sg8y7hrI2NsJUDJdA9WS8Rrs-lP7viF9e-Eokc5KgvCRwWEyREWnhGfQqkpiFKoBKz8_zkhCH2Vex203JFQHKzYCzMYXn_cZtyKG1fRxecrMPNVdPZbHpxCw

通过端口转发远程访问 dashboard:

# 设置端口转发
$ sudo kubectl port-forward --namespace kubernetes-dashboard --address 0.0.0.0 service/kubernetes-dashboard 10443:443

使用浏览器访问 https://IP:10443/
Dashboard登录页

输入前面获取的 Token,点击登录。
Dashboard首页

测试完后,可以运行以下命令,移除用于演示的管理员服务帐号和 ClusterRoleBinding:

$ kubectl -n kubernetes-dashboard delete serviceaccount admin-user
$ kubectl -n kubernetes-dashboard delete clusterrolebinding admin-user

参考

  • Kubernetes 仪表盘 | Rancher文档
  • 访问K8s Dashboard的几种方式 - SegmentFault 思否 2020-07-08
举报

相关推荐

0 条评论