1. 前提条件


本次安装基于Helm v3版本的chart包安装的,,所以有以下前提:

  • 已安装好kubernetes集群
  • 已安装好Helm v3版本

    如未安装helm,可以参照:Helm安装

2. dashboard安装


2.1 helm拉取dashboard的chart

添加helmhub上的dashboard官方repo仓库:

1
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/

查看添加完成后的仓库:

1
2
3
4
5
[root@lemonlzy helm]# helm repo list
NAME URL
bitnami https://charts.bitnami.com/bitnami
stable http://mirror.azure.cn/kubernetes/charts
kubernetes-dashboard https://kubernetes.github.io/dashboard/

查询dashboard的chart:

1
2
3
4
[root@lemonlzy helm]# helm search repo  kubernetes-dashboard
NAME CHART VERSION APP VERSION DESCRIPTION
kubernetes-dashboard/kubernetes-dashboard 2.8.1 2.0.4 General-purpose web UI for Kubernetes clusters
stable/kubernetes-dashboard 1.11.1 1.10.1 DEPRECATED! - General-purpose web UI for Kubern...

拉取官方库的chart文件,便于修改或者查阅:

1
[root@lemonlzy helm]# helm pull kubernetes-dashboard/kubernetes-dashboard

解压拉取下来的chart压缩包:

1
2
3
4
[root@lemonlzy helm]# tar -zxvf kubernetes-dashboard-2.8.1.tgz

[root@lemonlzy helm]# ls
kubernetes-dashboard kubernetes-dashboard-2.8.1.tgz

2.2 dashboard的chart包配置

详细配置可查看values.yaml文件,里面有自定义的各种配置,这里我们采取新建配置文件的方式来自定义配置(也可以直接修改values.yaml文件),这种方式就是将我们想修改的内容独立出来一个文件,无需修改的内容则会自动使用values.yaml文件里面的默认配置:

1
2
3
4
[root@lemonlzy helm]# cd kubernetes-dashboard/

[root@lemonlzy kubernetes-dashboard]# ls
charts Chart.yaml README.md requirements.lock requirements.yaml templates values.yaml

新建一个my-values.yaml文件,内容如下(如果镜像下载不下来,可访问xxx):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@lemonlzy kubernetes-dashboard]# cat my-values.yaml 
image:
repository: kubernetesui/dashboard
tag: v2.0.4

service:
type: NodePort # 由于需要对外暴露服务,所以在此直接采取Nodeport方式
nodePort: 30020 # 自定义对外暴露的端口

ingress:
enabled: false # 我这里无需使用ingress,所以直接使用false禁用ingress,如果需要通过域名访问,则参考values.yaml文件进行ingress的自定义修改

metricsScraper:
enabled: true # 如果没有预先装过metrics插件,则需要手动开启
image:
repository: kubernetesui/metrics-scraper
tag: v1.0.5

metrics-server:
enabled: true # 同理,如果没有预先装过metrics插件,则需要手动开启
args:
- --kubelet-preferred-address-types=InternalIP
- --kubelet-insecure-tls

rbac:
create: true
clusterRoleMetrics: true
clusterReadOnlyRole: true
clusterAdminRole: true # 让 dashboard 的权限够大,这样我们可以方便操作多个 namespace

serviceAccount:
create: true
name: dashboard-admin # 自定义账户名称,自动创建,方便用脚本查询登录令牌

2.3 helm执行创建dashboard的release

执行路径在my-values.yaml目录:

1
[root@lemonlzy kubernetes-dashboard]# helm install -f my-values.yaml --namespace kube-system kubernetes-dashboard .

如果后续调整过配置后,使用以下命令进行更新:

1
[root@lemonlzy kubernetes-dashboard]# helm upgrade dashboard -f my-values.yaml . --namespace kube-system

查看pod状态,如果是running仍无法访问,请查看以下两个pod的日志进行排查:

1
2
3
[root@lemonlzy kubernetes-dashboard]# kubectl get pod -n kube-system | grep dashboard
kubernetes-dashboard-556c6c6c89-wvkqv 2/2 Running 0 5m28s
kubernetes-dashboard-metrics-server-8459c749c7-jpdl5 1/1 Running 0 5m28s

部署成功后,查看svc对外暴露的端口:

1
2
3
[root@lemonlzy helm]# kubectl get svc -n kube-system | grep dashboard
kubernetes-dashboard NodePort 10.96.243.201 <none> 443:30020/TCP 62m
kubernetes-dashboard-metrics-server ClusterIP 10.100.17.232 <none> 443/TCP 62m

直接使用https://服务ip+nodeport访问即可,即访问https://192.168.235.20:30020

同时,由于开启了metrics部署的关系,也可使用kubectl top命令了,方便后续的Prometheus部署:

1
2
3
4
5
6
7
8
9
10
11
[root@lemonlzy kubernetes-dashboard]# kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
lemonlzy 154m 1% 4119Mi 25%
kom02 122m 1% 9984Mi 62%
kom03 148m 1% 7864Mi 49%

[root@lemonlzy kubernetes-dashboard]# kubectl top pod
NAME CPU(cores) MEMORY(bytes)
kom-69f86f56d5-964xg 3m 2273Mi
kom-69f86f56d5-c5mhz 2m 2253Mi
kom-69f86f56d5-pj2w4 2m 2232Mi

3. 查看token并使用token登陆


查看内容含有token的secret:

1
2
[root@lemonlzy helm]#  kubectl get secret -n kube-system | grep dashboard-admin
dashboard-admin-token-xlg6s kubernetes.io/service-account-token 3 68m

describe一下获取token值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@lemonlzy helm]# kubectl describe secret dashboard-admin-token-xlg6s -n kube-system
Name: dashboard-admin-token-xlg6s
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: dashboard-admin
kubernetes.io/service-account.uid: f8cd1939-2abf-462d-b3a4-8240c4272726

Type: kubernetes.io/service-account-token

Data
====
ca.crt: 1066 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IkxMaHI1QmlueWpkUXJ4YUE4UDgxcXFhMDFWNVE0U3hJd3B3eHZwdlAzRHMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4teGxnNnMiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZjhjZDE5MzktMmFiZi00NjJkLWIzYTQtODI0MGM0MjcyNzI2Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.iwZVgGEJ0y4Ca4y7tQbOowiJTW_HnamMMqOswgPum4fNZQRqwiNK0D3FXxq6iMU42VSsKeZ_nCPbkhu2sfA0rk9m4kIdYNe_blqAX-YW8cie5dmQ1X3O3phoxDoHIsTd6Egz48AAWXpj-RS7OeRUu2z6DHoWxH-OFWXSPTW7ed71mh6eGNvSmof8-R_MxLhZqps5bYhqS3ec0yzHImB81KhISdILz7v8EH6yxEklQi3pPtQuRvZaEXjMAXhssGwl9vlewtp_Aokc3x6NY_JS6UsW4Loe7N9-EraqKTjbur1VNQNjiGp9FK7k2FQnuP5z0jfa114CfYJ5LjjzEpLnxQ

使用此token登录即可,如下图所示:

dashboard.png

默认Dashboard为最小RBAC权限,使用默认配置文件创建的dashboard-admin用户登录Dashboard UI,会发现无法加载出pod等权限不够的信息。所以创建一个集群管理员,以便从Dashboard中操作集群资源:

  1. 创建serviceaccount资源(如果已有则无需重新创建):

    1
    2
    [root@node-0 yaml]# kubectl create serviceaccount dashboard-admin -n kube-system
    serviceaccount/dashboard-admin created

    此处的sa为serviceaccount的缩写,即查看serviceaccount是否创建成功:

    1
    2
    3
    [root@node-0 yaml]# kubectl get sa/dashboard-admin -n kube-system
    NAME SECRETS AGE
    dashboard-admin 1 15s
  2. 创建clusterrolebinding,将角色cluster-adminserviceaccount资源(dashboard-admin)进行绑定,简单理解,就是给新创建的用于赋予集群管理员权限:

    1
    2
    [root@node-0 yaml]# kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin 
    clusterrolebinding.rbac.authorization.k8s.io/dashboard-admin created

    查看绑定信息,可以发现新创建的用户已经拥有了集群管理员权限:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [root@node-0 yaml]# kubectl describe clusterrolebinding/dashboard-admin
    Name: dashboard-admin
    Labels: <none>
    Annotations: <none>
    Role:
    Kind: ClusterRole
    Name: cluster-admin
    Subjects:
    Kind Name Namespace
    ---- ---- ---------
    ServiceAccount dashboard-admin kube-system

    此时刷新页面或者重新登录,则会发现所有资源信息已经能成功加载:

login.png

如果觉得使用token方式登录太过繁琐,可参考kubernetes的Dashboard部署中的kubeconfig配置部分。