kubernetes(k8s)中部署dashboard可视化面板

kubernetes(k8s)中部署dashboard可视化面板

Web 界面 (Dashboard)

Dashboard 是基于网页的 Kubernetes 用户界面。你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。你可以使用 Dashboard 获取运行在集群中的应用的概览信息,也可以创建或者修改 Kubernetes 资源 (如 Deployment,Job,DaemonSet 等等)。例如,你可以对 Deployment 实现弹性伸缩、发起滚动升级、重启 Pod 或者使用向导创建新的应用。

Dashboard 同时展示了 Kubernetes 集群中的资源状态信息和所有报错信息。

kubernetes官方提供的可视化界面

github.com/kubernetes/…

一键执行

  • kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
  • 复制代码

先下载后执行

  • root@master1:~/dashboard# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
  • root@master1:~/dashboard# kubectl apply -f recommended.yaml
  • 复制代码

若下载不下来,可以使用vim添加进去后再次执行

  • root@master1:~/dashboard# vim recommended.yaml
  • root@master1:~/dashboard#
  • root@master1:~/dashboard#
  • root@master1:~/dashboard# cat recommended.yaml
  • # Copyright 2017 The Kubernetes Authors.
  • #
  • # Licensed under the Apache License, Version 2.0 (the "License");
  • # you may not use this file except in compliance with the License.
  • # You may obtain a copy of the License at
  • #
  • # http://www.apache.org/licenses/LICENSE-2.0
  • #
  • # Unless required by applicable law or agreed to in writing, software
  • # distributed under the License is distributed on an "AS IS" BASIS,
  • # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  • # See the License for the specific language governing permissions and
  • # limitations under the License.
  • apiVersion: v1
  • kind: Namespace
  • metadata:
  • name: kubernetes-dashboard
  • ---
  • apiVersion: v1
  • kind: ServiceAccount
  • metadata:
  • labels:
  • k8s-app: kubernetes-dashboard
  • name: kubernetes-dashboard
  • namespace: kubernetes-dashboard
  • ---
  • kind: Service
  • apiVersion: v1
  • metadata:
  • labels:
  • k8s-app: kubernetes-dashboard
  • name: kubernetes-dashboard
  • namespace: kubernetes-dashboard
  • spec:
  • ports:
  • - port: 443
  • targetPort: 8443
  • selector:
  • k8s-app: kubernetes-dashboard
  • ---
  • apiVersion: v1
  • kind: Secret
  • metadata:
  • labels:
  • k8s-app: kubernetes-dashboard
  • name: kubernetes-dashboard-certs
  • namespace: kubernetes-dashboard
  • type: Opaque
  • ---
  • apiVersion: v1
  • kind: Secret
  • metadata:
  • labels:
  • k8s-app: kubernetes-dashboard
  • name: kubernetes-dashboard-csrf
  • namespace: kubernetes-dashboard
  • type: Opaque
  • data:
  • csrf: ""
  • ---
  • apiVersion: v1
  • kind: Secret
  • metadata:
  • labels:
  • k8s-app: kubernetes-dashboard
  • name: kubernetes-dashboard-key-holder
  • namespace: kubernetes-dashboard
  • type: Opaque
  • ---
  • kind: ConfigMap
  • apiVersion: v1
  • metadata:
  • labels:
  • k8s-app: kubernetes-dashboard
  • name: kubernetes-dashboard-settings
  • namespace: kubernetes-dashboard
  • ---
  • kind: Role
  • apiVersion: rbac.authorization.k8s.io/v1
  • metadata:
  • labels:
  • k8s-app: kubernetes-dashboard
  • name: kubernetes-dashboard
  • namespace: kubernetes-dashboard
  • rules:
  • # Allow Dashboard to get, update and delete Dashboard exclusive secrets.
  • - apiGroups: [""]
  • resources: ["secrets"]
  • resourceNames: ["kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs", "kubernetes-dashboard-csrf"]
  • verbs: ["get", "update", "delete"]
  • # Allow Dashboard to get and update 'kubernetes-dashboard-settings' config map.
  • - apiGroups: [""]
  • resources: ["configmaps"]
  • resourceNames: ["kubernetes-dashboard-settings"]
  • verbs: ["get", "update"]
  • # Allow Dashboard to get metrics.
  • - apiGroups: [""]
  • resources: ["services"]
  • resourceNames: ["heapster", "dashboard-metrics-scraper"]
  • verbs: ["proxy"]
  • - apiGroups: [""]
  • resources: ["services/proxy"]
  • resourceNames: ["heapster", "http:heapster:", "https:heapster:", "dashboard-metrics-scraper", "http:dashboard-metrics-scraper"]
  • verbs: ["get"]
  • ---
  • kind: ClusterRole
  • apiVersion: rbac.authorization.k8s.io/v1
  • metadata:
  • labels:
  • k8s-app: kubernetes-dashboard
  • name: kubernetes-dashboard
  • rules:
  • # Allow Metrics Scraper to get metrics from the Metrics server
  • - apiGroups: ["metrics.k8s.io"]
  • resources: ["pods", "nodes"]
  • verbs: ["get", "list", "watch"]
  • ---
  • apiVersion: rbac.authorization.k8s.io/v1
  • kind: RoleBinding
  • metadata:
  • labels:
  • k8s-app: kubernetes-dashboard
  • name: kubernetes-dashboard
  • namespace: kubernetes-dashboard
  • roleRef:
  • apiGroup: rbac.authorization.k8s.io
  • kind: Role
  • name: kubernetes-dashboard
  • subjects:
  • - kind: ServiceAccount
  • name: kubernetes-dashboard
  • namespace: kubernetes-dashboard
  • ---
  • apiVersion: rbac.authorization.k8s.io/v1
  • kind: ClusterRoleBinding
  • metadata:
  • name: kubernetes-dashboard
  • roleRef:
  • apiGroup: rbac.authorization.k8s.io
  • kind: ClusterRole
  • name: kubernetes-dashboard
  • subjects:
  • - kind: ServiceAccount
  • name: kubernetes-dashboard
  • namespace: kubernetes-dashboard
  • ---
  • kind: Deployment
  • apiVersion: apps/v1
  • metadata:
  • labels:
  • k8s-app: kubernetes-dashboard
  • name: kubernetes-dashboard
  • namespace: kubernetes-dashboard
  • spec:
  • replicas: 1
  • revisionHistoryLimit: 10
  • selector:
  • matchLabels:
  • k8s-app: kubernetes-dashboard
  • template:
  • metadata:
  • labels:
  • k8s-app: kubernetes-dashboard
  • spec:
  • containers:
  • - name: kubernetes-dashboard
  • image: kubernetesui/dashboard:v2.4.0
  • imagePullPolicy: Always
  • ports:
  • - containerPort: 8443
  • protocol: TCP
  • args:
  • - --auto-generate-certificates
  • - --namespace=kubernetes-dashboard
  • # Uncomment the following line to manually specify Kubernetes API server Host
  • # If not specified, Dashboard will attempt to auto discover the API server and connect
  • # to it. Uncomment only if the default does not work.
  • # - --apiserver-host=http://my-address:port
  • volumeMounts:
  • - name: kubernetes-dashboard-certs
  • mountPath: /certs
  • # Create on-disk volume to store exec logs
  • - mountPath: /tmp
  • name: tmp-volume
  • livenessProbe:
  • httpGet:
  • scheme: HTTPS
  • path: /
  • port: 8443
  • initialDelaySeconds: 30
  • timeoutSeconds: 30
  • securityContext:
  • allowPrivilegeEscalation: false
  • readOnlyRootFilesystem: true
  • runAsUser: 1001
  • runAsGroup: 2001
  • volumes:
  • - name: kubernetes-dashboard-certs
  • secret:
  • secretName: kubernetes-dashboard-certs
  • - name: tmp-volume
  • emptyDir: {}
  • serviceAccountName: kubernetes-dashboard
  • nodeSelector:
  • "kubernetes.io/os": linux
  • # Comment the following tolerations if Dashboard must not be deployed on master
  • tolerations:
  • - key: node-role.kubernetes.io/master
  • effect: NoSchedule
  • ---
  • kind: Service
  • apiVersion: v1
  • metadata:
  • labels:
  • k8s-app: dashboard-metrics-scraper
  • name: dashboard-metrics-scraper
  • namespace: kubernetes-dashboard
  • spec:
  • ports:
  • - port: 8000
  • targetPort: 8000
  • selector:
  • k8s-app: dashboard-metrics-scraper
  • ---
  • kind: Deployment
  • apiVersion: apps/v1
  • metadata:
  • labels:
  • k8s-app: dashboard-metrics-scraper
  • name: dashboard-metrics-scraper
  • namespace: kubernetes-dashboard
  • spec:
  • replicas: 1
  • revisionHistoryLimit: 10
  • selector:
  • matchLabels:
  • k8s-app: dashboard-metrics-scraper
  • template:
  • metadata:
  • labels:
  • k8s-app: dashboard-metrics-scraper
  • spec:
  • securityContext:
  • seccompProfile:
  • type: RuntimeDefault
  • containers:
  • - name: dashboard-metrics-scraper
  • image: kubernetesui/metrics-scraper:v1.0.7
  • ports:
  • - containerPort: 8000
  • protocol: TCP
  • livenessProbe:
  • httpGet:
  • scheme: HTTP
  • path: /
  • port: 8000
  • initialDelaySeconds: 30
  • timeoutSeconds: 30
  • volumeMounts:
  • - mountPath: /tmp
  • name: tmp-volume
  • securityContext:
  • allowPrivilegeEscalation: false
  • readOnlyRootFilesystem: true
  • runAsUser: 1001
  • runAsGroup: 2001
  • serviceAccountName: kubernetes-dashboard
  • nodeSelector:
  • "kubernetes.io/os": linux
  • # Comment the following tolerations if Dashboard must not be deployed on master
  • tolerations:
  • - key: node-role.kubernetes.io/master
  • effect: NoSchedule
  • volumes:
  • - name: tmp-volume
  • emptyDir: {}
  • root@master1:~/dashboard#
  • root@master1:~/dashboard# kubectl apply -f recommended.yaml
  • 查看是否在运行
  • root@master1:~/dashboard# kubectl get pod -n kubernetes-dashboard
  • NAME READY STATUS RESTARTS AGE
  • dashboard-metrics-scraper-c45b7869d-2xhx8 1/1 Running 0 2m40s
  • kubernetes-dashboard-576cb95f94-scrxw 1/1 Running 0 2m40s
  • root@master1:~/dashboard#
  • 修改为nodeIP
  • root@master1:~/dashboard# kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
  • service/kubernetes-dashboard edited
  • 复制代码
展开

创建访问账号

  • root@master1:~/dashboard# vim dash.yaml
  • root@master1:~/dashboard# cat dash.yaml
  • apiVersion: v1
  • kind: ServiceAccount
  • metadata:
  • name: admin-user
  • namespace: kubernetes-dashboard
  • ---
  • 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
  • root@master1:~/dashboard#
  • 复制代码
  • root@master1:~/dashboard# kubectl apply -f dash.yaml
  • serviceaccount/admin-user created
  • clusterrolebinding.rbac.authorization.k8s.io/admin-user created
  • root@master1:~/dashboard#
  • 复制代码

查看token令牌

  • root@master1:~/dashboard#
  • root@master1:~/dashboard# kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
  • eyJhbGciOiJSUzI1NiIsImtpZCI6IlBqb09VbWNDX1hVdldnM3pjcmllQ1NMMXA3bUZQRTBfNEdNTEZnUnhScncifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXd3MmZ2Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI3ODU0YzFkMy0wNWMyLTQwNzAtYjI1OC1hNzRlYTg1ZWRlYTAiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.v1MCLz9q_IvP49sh69XLoBZc0YQ6X1Pbw-lfZYYeeDcw6HqmEkW1Lfs1Soz-b8ir4lbWvNF90h6pGU_1aEE9NkTaV5b6A5FGhKivVk-09gjcx8JC8RDtlJ5Ol-MiHQOqPY67qPO6UzRm3H1luGKXtnNnTA74PTOssGgH3eNsFMKOPqaANt03h6-sjVXQBD2uca3l1pD5ywa-P54WwL_uJraCpIopX98iiFoN5hV_2W6dnPJ09whmaaTl8fJGXQ_0ln5NbdcURQeuL-ZRAC_b5i4RoBKlOHjDg1AREH_27qtwl9GbDNe-HgzSsFGKHzLV93Pqjwo9pI03P6xkyYym9groot@master1:~/dashboard#
  • 复制代码

查看svc服务ip以及端口

  • root@master1:~/dashboard# kubectl get svc -n kubernetes-dashboard
  • NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  • dashboard-metrics-scraper ClusterIP 10.233.58.150 <none> 8000/TCP 7m22s
  • kubernetes-dashboard NodePort 10.233.38.57 <none> 443:30282/TCP 7m22s
  • root@master1:~/dashboard#
  • 复制代码

访问页面

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
<<上一篇
下一篇>>