3. 死磕 k8s系列之安装k8s仪表盘(Dashboard)
- 2020 年 2 月 10 日
- 筆記

题外话
前面两集单词写错了,正确的写法是 kubernetes,在此表示歉意。
kubernetes为什么缩写为k8s呢?
从读音还以为是国人发明的呢,其实不是。真正的原因是kubernetes太长了,老外也容易拼错,所以就省略了中间8个字母以 8 代替,就变成了k8s。
其实,老外经常这么干,像我们熟悉的 i18n,实际上是internationalization(国际化)的缩写,这次是彤哥一次性拼出来的,不知道有没有错呢

教大家一招记单词的诀窍:
nation:国家,民族;
inter:跨……;internation:跨国,即国际的意思;
al:形容词后缀;international:国际的的意思;
ize:动词后缀,表使动;internationalize:使……成为国际的的意思,即使国际化;
ation:名词后缀;internationalization:国际化的意思;
ed:形容词后缀或过去式或过去分词或表被动;internationalized:国际化的的意思;
如果以上见解跟你在学校学的不一样,请以我为准,如果你想知道为什么我是对的,加我微信我会告诉你的。
以后我要是不当程序员了,我就去教别人背单词,哈哈。
扯远了,进入本节内容。
注:本文基于k8s集群v1.16.2版本。
注:如无特殊说明,以下所有操作都是在master节点上执行。
简介
上一章我们一起安装了k8s集群,本章我们一起安装一个Dashboard——kuboard,用于直观地查看k8s集群的各项指标,管理各个组件。
前提
Kuboard 是基于一款基于 Kubernetes 的微服务管理面板。安装 Kuboard 时,假设您已经有一个 Kubernetes 集群,如果没有集群,请参考上一章先安装k8s集群。
安装kuboard
如果是按照上一章介绍的方法安装的k8s集群,可以使用如下命令安装kuboard:
kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
你也可以下载下来这个文件去查看里面的配置。
apiVersion: apps/v1 kind: Deployment metadata: name: kuboard namespace: kube-system annotations: k8s.eip.work/displayName: kuboard k8s.eip.work/ingress: "true" k8s.eip.work/service: NodePort k8s.eip.work/workload: kuboard labels: k8s.eip.work/layer: monitor k8s.eip.work/name: kuboard spec: replicas: 1 selector: matchLabels: k8s.eip.work/layer: monitor k8s.eip.work/name: kuboard template: metadata: labels: k8s.eip.work/layer: monitor k8s.eip.work/name: kuboard spec: containers: - name: kuboard image: eipwork/kuboard:latest imagePullPolicy: Always tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule --- apiVersion: v1 kind: Service metadata: name: kuboard namespace: kube-system spec: type: NodePort ports: - name: http port: 80 targetPort: 80 nodePort: 32567 selector: k8s.eip.work/layer: monitor k8s.eip.work/name: kuboard --- apiVersion: v1 kind: ServiceAccount metadata: name: kuboard-user namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kuboard-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: kuboard-user namespace: kube-system --- apiVersion: v1 kind: ServiceAccount metadata: name: kuboard-viewer namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kuboard-viewer roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: view subjects: - kind: ServiceAccount name: kuboard-viewer namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kuboard-viewer-node roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:node subjects: - kind: ServiceAccount name: kuboard-viewer namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kuboard-viewer-pvp roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:persistent-volume-provisioner subjects: - kind: ServiceAccount name: kuboard-viewer namespace: kube-system --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: kuboard namespace: kube-system annotations: nginx.org/websocket-services: "kuboard" nginx.com/sticky-cookie-services: "serviceName=kuboard srv_id expires=1h path=/" spec: rules: - host: kuboard.yourdomain.com http: paths: - path: / backend: serviceName: kuboard servicePort: http
卸载也很简单,执行以下命令即可:
kubectl delete -f https://kuboard.cn/install-script/kuboard.yaml
获取token
kuboard的登录需要一个token,按照权限的不同可以获取管理员和只读用户的token,分别执行以下命令获取:
# 在第一个 Master 节点上执行此命令 # 管理员token kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}') # 普通用户token kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kuboard-viewer | awk '{print $1}')
我们这里以获取管理员token为示例,输出结果为:
[root@instance-ji0xk9uh-1 ~]# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}') Name: kuboard-user-token-ldx9g Namespace: kube-system Labels: <none> Annotations: kubernetes.io/service-account.name: kuboard-user kubernetes.io/service-account.uid: c767deff-72c9-462d-80fb-669ad22037f8 Type: kubernetes.io/service-account-token Data ==== namespace: 11 bytes token: eyJhbGciOiJSUzI1NiIsImtpZCI6Ik9OZF9oM3BqR1psaUZzNElrVjJuYWVySEFKdlExYXF0d0VRZWlqUTJ1eGMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXVzZXItdG9rZW4tbGR4OWciLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoia3Vib2FyZC11c2VyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYzc2N2RlZmYtNzJjOS00NjJkLTgwZmItNjY5YWQyMjAzN2Y4Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmt1Ym9hcmQtdXNlciJ9.lmV9-R1ps7MTfrc-k3N5_wM65GbLXnL17ACRGiT0NFpwjqH_C7SqBpy1Fk9wCiQJ8BePzq4IjKgHo0xDDtDNk91kw8O4hYjc14yOfbz4AHnKJ_BLkkEgzp-OgFYBUaN8N1_c58bT5xFI24xP7oV1wcK4e0kHOekPC59DnBAi7H10BJaMSYb4ohQr_YKf7I1ux3B6PC3BZgq_3pIHiJ_WFwBBXBLftlJrNzSQniUgNayIrP6NAsOVULgHh3iHyv8v3z0ptOVTyZ1-wUJgC92iwnnYVtpacDtb-OxBDD_M1OWHO1TLzIcopC_s2uPzuKpqy3dONmhFFGuOAzBEhmulqg ca.crt: 1025 bytes
复制上述输出中的token。
访问Kuboard
使用如下命令获取kuboard暴露的端口号:
kubectl get svc -n kube-system
输出:
[root@instance-ji0xk9uh-1 ~]# kubectl get svc -n kube-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 65m kuboard NodePort 10.96.208.85 <none> 80:32567/TCP 4m6s
输出的最后一行,可以看到kuboard服务对外暴露的端口号为 32567
,使用任意一个worker节点的 ip+此端口 即可访问kuboard。
注意:如果使用的云服务器,请保证端口32567是开放的。

输入上面我们复制的token即可成功登录。

每个框框都可以点进去看看,熟悉一下kuboard提供的大致功能。
总结
本章我们一起安装的k8s的Dashboard,我们使用的是kuboard,这是一款比较不错的Dashboard。
通过kuboard我们是可以直接部署微服务的,但是我们还缺少一个docker仓库。当然,使用公共的仓库也是可以的,但是最好自己安装一个。
参考
本文参考自https://kuboard.cn/install/install-dashboard.html,非常推荐这个网站,上面有很多k8s不错的教程,非常适合新手入门。