kubernetes部署dashboard

Kubernetes部署_08_两种可视化工具Dashboard和Kuboard Dashboard可视化工具 阅读详情

kubernetes部署dashboard

1. 简介

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

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

2. 版本兼容性

k8s和dashboard版本存在兼容性关系,版本配套可以到下面的网页查询:https://github.com/kubernetes/dashboard/releases/

以下是部分配套关系:

Kubernetes versiondashboard version备注
1.18v2.0.0完全支持
1.19v2.0.4完全支持
1.20v2.4.0完全支持
1.21v2.4.0完全支持
1.23v2.5.0完全支持
1.24v2.6.0完全支持
1.25v2.7.0完全支持
1.27v3.0.0-alpha0完全支持
1.29kubernetes-dashboard-7.5.0完全支持

本文使用的k8s版本为1.23,使用dashboard v2.5.0版本部署。

3. 安装

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml

如果yaml无法下载,可以手动打开网页拷贝到文件中。以下是v2.5.0版本文件内容。

# 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:
      securityContext:
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: kubernetes-dashboard
          image: kubernetesui/dashboard:v2.5.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: {}

确保dashboard容器运行正常:

[root@k8s ~]# kubectl get pod -A
NAMESPACE              NAME                                         READY   STATUS    RESTARTS         AGE
default                nginx-6799fc88d8-lxqvx                       1/1     Running   2 (3m53s ago)    3h1m
kube-flannel           kube-flannel-ds-7rfqc                        1/1     Running   10 (2m12s ago)   3d21h
kube-system            coredns-6d8c4cb4d-8sfdr                      1/1     Running   3 (2m8s ago)     178m
kube-system            coredns-6d8c4cb4d-vw7nz                      1/1     Running   4 (113s ago)     178m
kube-system            etcd-k8s                                     1/1     Running   4 (2m13s ago)    170m
kube-system            kube-apiserver-k8s                           1/1     Running   4 (2m3s ago)     170m
kube-system            kube-controller-manager-k8s                  1/1     Running   3 (2m13s ago)    169m
kube-system            kube-proxy-97l68                             1/1     Running   3 (2m13s ago)    178m
kube-system            kube-scheduler-k8s                           1/1     Running   4 (2m13s ago)    170m
kubernetes-dashboard   dashboard-metrics-scraper-799d786dbf-rpcft   1/1     Running   3 (2m13s ago)    156m
kubernetes-dashboard   kubernetes-dashboard-546cbc58cd-2wcrz        1/1     Running   0                156m

4. 访问配置

4.1 开启远程访问

dashboard service默认为ClusterIP,需要配置为NodePort,外部才能访问。

[root@k8s ~]# kubectl get svc -A
NAMESPACE              NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
default                kubernetes                  ClusterIP   10.96.0.1       <none>        443/TCP                  3d22h
default                nginx                       NodePort    10.109.172.88   <none>        80:32409/TCP             3d22h
kube-system            kube-dns                    ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   3d22h
kubernetes-dashboard   dashboard-metrics-scraper   ClusterIP   10.102.9.117    <none>        8000/TCP                 175m
kubernetes-dashboard   kubernetes-dashboard        ClusterIP   10.97.21.53     <none>        443/TCP                  175m

修改svc改为NodePort类型:

[root@k8s ~]# kubectl edit service kubernetes-dashboard -n kubernetes-dashboard
[root@k8s ~]# kubectl get svc -A
NAMESPACE              NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
default                kubernetes                  ClusterIP   10.96.0.1       <none>        443/TCP                  3d22h
default                nginx                       NodePort    10.109.172.88   <none>        80:32409/TCP             3d22h
kube-system            kube-dns                    ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   3d22h
kubernetes-dashboard   dashboard-metrics-scraper   ClusterIP   10.102.9.117    <none>        8000/TCP                 3h34m
kubernetes-dashboard   kubernetes-dashboard        NodePort    10.97.21.53     <none>        443:31930/TCP            3h34m

这个时候就可以通过节点IP+31930端口访问dashboard了。dashboard需要使用https访问,自带的证书在最新的chrome、edge浏览器中不受信,切界面无法手动进行确认继续。使用firefox访问可以在界面操作确认继续。

备注:

在较新版本的 Chrome或Edge 中访问一些未受信任的 HTTPS 页面时,会提示类似 NET::ERR_CERT_INVALID 的错误。以往旧版本中,我们可以选择跳过得以继续访问,但是新版本的 Chrome 中并不允许继续。当出现 “您的连接不是私密” 页面时,点击高级后,并直接输入 thisisunsafe 关键字并回车。

4.2 配置访问认证

dashboard 支持Token和Kubeconfig两种认证方式进行登录。

4.2.1 Token认证

创建Service Account 及 ClusterRoleBinding,创建auth.yaml文件,内容如下:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: kubernetes-admin
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-admin
  namespace: kubernetes-dashboard

创建对应的资源:kubectl apply -f auth.yaml

获取访问所需要的Token:

[root@k8s ~]# kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep kubernetes-admin | awk '{print $1}')
Name:         admin-user-token-khrll
Namespace:    kubernetes-dashboard
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: admin-user
              kubernetes.io/service-account.uid: 266c923b-ed2f-471b-a8fc-1dde3cc10205

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1099 bytes
namespace:  20 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6InloSUtPM3R6cG9xVnkzNEx5STBmaTctRDRkWE9jX0Zfa0tKVjlBY3hhY2sifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLWtocmxsIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIyNjZjOTIzYi1lZDJmLTQ3MWItYThmYy0xZGRlM2NjMTAyMDUiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.nYgOBdscFaO3_JUHAC3hX5F-4Imx4RFAu1UA05tbufI6VgR5npJHPBCriNkseo02qaSsjlBwr7slzUcIALC4F16oTVrVHuuPMPSaqrqi-VjoEdd_ZB7vbX6qH7KbAabzmwW966PoXwOiARjraU2CMTmA9dFfk4MkSiwrySUxNUrwQ02isPMDIUxeF5RGESXff7kBzgNFkhwdEuLopmK9k6i0CyuM2ns3TpMO_2TcBlPkDViag1JxixatBJuz9x-OJS-Tnt5A1pmc9J-76MSH7fTRHu3sim2RIPq29QV5EXc4kwyAxha6fnNC3aCTiU9nsDR6E24qYK70ULJKVGxxIQ
4.2.2 kubeconfig认证

如果是使用kubeadmin部署的集群,默认会在下面路径生成一个kubeconfig文件:/etc/kubernetes/admin.conf,下载该文件并编辑,在该文件将上面的toekn加入文件末尾。

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJME1EWXhNVEUwTURJd00xb1hEVE0wTURZd09URTBNREl3TTFvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBT2RUCjFSU3FmM3JyY1V3WkRsUk5OS05vVlZEelEzNlp4OUovckNSYzR1V3Qzd0YxTitsbFlIaVA2VHdoL0s2UGd0aUEKaHBYeDdWaGRYWElKdHhVd3F2OW8vTnArdUpoOHV2eFdyY25JRDNycFJzWXFvM1ZZSlhnTEtuS1o0bkpRREZzUApCQVZQcUJvS3RhYm9qV0pjU2tTc09VVXM5TFV0VnV3aEZUdmR0ZnJ1TVNMczFjOE1naTlGWlNkTUg3UHN0NzczCkNtUFhvb0k4dlRQSWwwU0dSTU1sSGtIaGJaUDJRVU0rZ1hzUlBRdWt3NFZ4MS9aQ29lZlhjRUE2czJUQmR3MXAKMlhpN2JpdWFKei80Qm1aYWVoQk5LZE1iR1ZMR1NhL1FwRjVDOXUwdnVybEdFZWw5eldoYnFLRFVzenN3dzZxUwpId2V6MXl0UWZpYTEyK2R0V1NNQ0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZQZno5VzJ5UWJaZTAwT3M0ckNSbkc0c3dSV1VNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBR0w1eE1mcU5INDdERGh3Uzd0bApTMWoxZ3hKWWxDclk4M09acTF3bUF0aFlqR2wwN1FJVDJ6NGszVXlMOU5MZzBJWmlIMy93eElsVnc5V0hJYVFRCmwzK0dwMi9Fc0VuWURlWWt0Z2VySDk3M2xGWGsySEJSOWhxemRiNlNnbVd5cWRGdWpvMisrM3Vzb1dxOHJ0eHAKMUdZNU5aakxiQnA0aWs0UVYvSFYvNFRJNzF6VmYyTzd1VG5JMEZ6VlUzR214MmhDSVRzdHRFa0VVd2NCaHRhYgphUWF3NzNiZjU3MEp2bWJXSlF6dnZkMmFVQWk5MUtxQzhEUUFLMk00QUk5NDRsU2xsQlZDeXpQZUdiNnEwc3ZxCmtBaVpVZzFHYSt6d1NLdVhTdmRESm1uQ3psYnE2V2I5N29UdkVaTDJnMlJwMW5Ua1hTSU10Nk41bU1TNXVrYVMKbWVzPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    server: https://192.168.0.159:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZ0F3SUJBZ0lJWiszaHUzTDI2aGN3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TkRBMk1URXhOREF5TUROYUZ3MHlOVEEyTVRVd09EVTBNRFphTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTJ5amFFSi9kSTlDcUhuL2cKWm5CZXhOTG1NTmJRNWltd1pBSnBCTzFyT3A3ZE1JN2ZXZUlvRnN4SlpDUFpodU5SSFhhK29XYjQvM0hYMGl6QgpadGVSeEJUS1F2UkxkT0x5Qnk3SXUyS0JISmJNLzA0bE16cXBlVlVycll4YmkxZjJ1YXZaUXllZjJ1S3g2b1FPCjJPTTZ6RmMwbHNuSFhjYnpOamtWc0wzdElFZXBiVDJsNlFRVDlwOEI5OWs2alBCNDgwOGVPVGRDMEpSK25rTEEKRnhhN05qK2VBU3ZaTTQwbm5qK3BRdUVBWS9SZWF6UU1sTGhRN3hVV1p4WWtJQXZ6eU51Z1ZsazR3VjVrUk1maAplODZjaERKQ05ITERqR1FDdVR0QmluY3c2QWt1RWtMRmk5cnBLL2hrYVZQdFVaekxBNjFFdnZjUzZVVGNLS1BqCnNWT3AzUUlEQVFBQm8xWXdWREFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RBWURWUjBUQVFIL0JBSXdBREFmQmdOVkhTTUVHREFXZ0JUMzgvVnRza0cyWHRORHJPS3drWnh1TE1FVgpsREFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBbTExNU00NGZYVjRrV0ExdEMxUE9qZWdMbnUvT1EzYVpLZmdPCkoraGpWRWdOaFUzSHgvaExDcGE4eS8zNkIvU3Fud0ZXRE0xaXpWSlhBZndDQWVZaGZIYUZmWjlHL1pFRW9PTmUKajkrZEVWMEo0KzFRWEZzNEFtUGY3bUhJbTV2b0VmSkVRL3dleWt4QTl4cmh2WUprMHhQWWdpSTFUMWJIWkVLZAo5Zjk0ZFNTdTZ4MGUrUTZwK3RwMDFId1ZQR2pEL21XTG5GSHZNOHA4ZS82cWV6VHR3QzB3RlNGb2hBMVdza2hZClVEZGJXTFlFcEN1UkZoUTFuc0V0Z1g3bDkvRndwNG41bmR0Z0JCMzVjU2FrVU9OVkYwbUpCbFpKTVZaM0VqVXoKTzRxVmFTMXlUNXlOOStDUU1tRHd4QUlNRDZPQjJGSG9ac1FaQ0tJdnZ1Mzc5ZzFMM1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBMnlqYUVKL2RJOUNxSG4vZ1puQmV4TkxtTU5iUTVpbXdaQUpwQk8xck9wN2RNSTdmCldlSW9Gc3hKWkNQWmh1TlJIWGErb1diNC8zSFgwaXpCWnRlUnhCVEtRdlJMZE9MeUJ5N0l1MktCSEpiTS8wNGwKTXpxcGVWVXJyWXhiaTFmMnVhdlpReWVmMnVLeDZvUU8yT002ekZjMGxzbkhYY2J6TmprVnNMM3RJRWVwYlQybAo2UVFUOXA4Qjk5azZqUEI0ODA4ZU9UZEMwSlIrbmtMQUZ4YTdOaitlQVN2Wk00MG5uaitwUXVFQVkvUmVhelFNCmxMaFE3eFVXWnhZa0lBdnp5TnVnVmxrNHdWNWtSTWZoZTg2Y2hESkNOSExEakdRQ3VUdEJpbmN3NkFrdUVrTEYKaTlycEsvaGthVlB0VVp6TEE2MUV2dmNTNlVUY0tLUGpzVk9wM1FJREFRQUJBb0lCQUNiTFgzYUw1ZWhlR284VgprZEp3VjhZOWt2UFlRdGhMVHVjVktpUHVKd29VYnhFV2FXRU8wSXZnazZrL1UxVTJUZmlLT1lwMm9PTU84dVpJCmQ5L05qd2NIcXhvWkJuWmxhZlJ0aXFqbzhmUHVtZEVqc3lBVFpVYU9GaEk5ZzBMeVNrRnBzeWJaRDhuK1VRSXoKYURGcVg5RW1LcS82ZmVrU3U2REFrQjllTDJpRUV4SmRrL0FVRlJqRVdybkpsb1Z6Tkp6endyaVBNcUMwSlV3eAovUTh4Qjdwc3FQYWpGQzdNL0VNQ0VjeTBQcnpIamk4d1dHUUZjNGdub0FZY1VDdmFhZzdsMjExS3VSZk9YL2Z5CmpWS3Q3Z1RDR0plbXYwMkFobG1laWVlS2kyQjg4Y0dsMmhPVFNqVE1kRnBkVUh1RTJubTNSWXZXcDFVdWliclIKUlpXQlcwRUNnWUVBNlNuSTZwUlNyYWdicjJoQTlvdytJTHhkWkNVWk53YnY3RFdBbkZWU3hGWHYwNmtMTDJ3SwpmREkraWgrMTJ6M2twQXdLVzE5MkdtUXBpelhuRXhzYlRheTNJbGxCZEwvcG9UNXV5QjZnd3hwM1N2U2pNRWZ4CjMwKzZ3U2NtM1MwWU5JM2R5Q3dtbTljeFdpdFlsTm51S0dVQ3hZdFo5ZHBid2pMYjJFYThPeTBDZ1lFQThKL3kKWC9zVUEzTVhHRUd3N2dkU28ycHJILy9SUlVaSVdvY2piWUJFdWpuVVJjSS9SakYrckpITVJuZEQzMTlBdDdxMQpHV0RwS1FZMGowZkY2U1AwRWp0Tm1PZzh6c2pvOHlzREUyRHliZWkrN2g1N2FabG9hUGJkczRQOE5aQllRK1JsCkZZY2hTODU4SG5Xa2JVSWoyd2hmY09aVW1PeWZCalBFakpSdWwzRUNnWUFCOGpKV0d1VFJ4RHh1NjF6WGNmWTIKeWJ1eDBVbHpseUE3aFhyTVV6MzhtNGNENmo1SXFBc3lYQ3ovZENKTmNTZk9ZcmRYYWVXUGROU1A3K1E4MlpZUgp3T1pLYUJwT3dpZE9ERHBhZXo3MlFldEsrZDIrMG1yblpULzJ5ci9kU3JvUC9qc2lwNU91NjAzakpjZDRmcFVwClN5YUp4WTc3cVZYb3Vnbnh0UzF2QlFLQmdCYk1BSW1KWHhjSWsxcVA5clJHYTFUaUl5NFA3WUt6cXUwd3VuR0kKWW5xR09nODEzUXJJYTZqcjB6K2wwdjlacGVjQ1FHQWNKMXJrcEp3aWY2U2I3R2JCeVpOQUJXck43QXdGdWkvZQowbmtKUVBXTVc4TGdidHpxN293d1ovZW5La1djWU50T1J5Qkllc2ZqKzJVQ2pDVVhRUHVRUnRtS0tYTEwrc1lhCjFmTnhBb0dCQUoyTy9MUWZiQWt0ZlI5U2ZpQ3NhcTJKWVduWWhnNU1NVzB2YzlBeUxEdnpQeGNXUHhveVRWREgKK0lmWllhckNkdElTUzZ2NjFYamZva1VFMjhqS1N2dlVtcnhhbkp0RzZudTFTQldzczc1OXhMdlZ3Wi9zS2haaQpwcUZoRURxRXdoejVIem9TbkM2WHFtVEh2V2hPaHdsb21kM2lTY1hVWFlhSnVDMHp5N0JjCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==
    token: eyJhbGciOiJSUzI1NiIsImtpZCI6InloSUtPM3R6cG9xVnkzNEx5STBmaTctRDRkWE9jX0Zfa0tKVjlBY3hhY2sifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWFkbWluLXRva2VuLTc4NWN0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6Imt1YmVybmV0ZXMtYWRtaW4iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJmMjA2YzUyOC1iMzkyLTQzNDItOWU1Ny02ZjM2YjRkZjgyZWYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6a3ViZXJuZXRlcy1hZG1pbiJ9.FvL4BtAbTGlBZfQcY72AnI2ynBswv7Ug12jczmRoGp1iSRLYPT9kmyEkT13SuggWxxuEDvwwwelgHZ5x6WOO6jSeqCyPwPoojVhszvd56gmiVs2g6Rlqpe2ZCNHY4UXcWg7XXF3FpoLv-760XgxAxy6DHFy_4D31el-DRVn-R3Qy-ji4a7wukQWTBpXo2DY-_ZWBpOeVPX6qjaRTEodBNve8_YU9rOA3HMH380jtfAyoBfT5igCED-15gNilj-IdoCEJWO3mersSzi_HY9OunOqs5ADuhCtdCMSMKUFibSyt_6qkRxvD7ws0d74rCZ2VUKzFMalX9yZ4i0n5sGlAsA

然后登录dashboard选择下载的kubeconfig文件即可进行登录。

5. 参考资料

  1. artifacthub:https://artifacthub.io/packages/helm/k8s-dashboard/kubernetes-dashboard

  2. github仓库:https://github.com/kubernetes/dashboard

  3. 部署和访问 Kubernetes 仪表板(Dashboard):https://kubernetes.io/zh-cn/docs/tasks/access-application-cluster/web-ui-dashboard/

Kubernetes Dashboard部署安装 创建dashboard成功!跟grafana差不多。 阅读详情

相关推荐

有史以来最详细 安装部署Kubernetes Dashboard (补充解决官方出现的一些RBAC CERT等问题)

安装部署Kubernetes Dashboard (补充解决官方出现的一些RBAC CERT等问题) 官方文档:https://github.com/kubernetes/dashboard 参考文章:https://kuboard.cn/install/install-k8s-dashboard.html# 前言 Kubernetes Dashboard 是 Kubernetes 的官方 Web UI。使用 Kubernetes Dashboard,你可以: 向 Kubernetes 集群部

sinat_28371057的博客 745

Kubernetes — Dashboard

参考文件: Kubectl Reference Docs (kubernetes.io) 配置对多集群的访问 | Kubernetes

qq_41619571的博客 1万+

centos7 单节点部署k8s以及kubernetes-dashboard安装

一. 部署k8s1.单节点环境:Centos7.2 虚拟机2.关闭Centos自带的防火墙服务和selinux systemctl disable firewalld systemctl stop firewalldvi /etc/selinux/config 3.安装etcd和Kubernetesyum install -y etcd kubernetes该安装会默认自动安装doc

moyu_2012的博客 2867

kubernetes 部署 dashboard(可视化界面)

Dashboard是基于网页的Kubernetes用户界面。您可以使用Dashboard将容器应用部署到Kubernetes集群中,也可以对容器应用排错,还能管理集群资源。您可以使用Dashboard获取运行在集群中的应用的概览信息,也可以创建或者修改Kubernetes资源(如Deployment,Job,DaemonSet等等)Dashboard同时展示了Kubernetes集群中的资源状态信息和所有报错信息。...

WuDan_1112的博客 9496

k8s(Kubernetes)集群部署Dashboard

最近在接触容器相关的东西,于是自己基于2台服务器部署了Kubernetes(即k8s)集群,有关k8s集群的完整部署流程在我的另一篇博客中有介绍,有需要的朋友可以浏览下面的这篇博客。 在k8s部署完成后,我打算使用dashboard来管理k8s集群。dashboard就是k8s集群的web UI界面,通过可视化的方式方便用户管理集群、管理容器,还可在集群中部署容器化的应用。 先介绍以下自己的安装环境: CentOS 7.6 Docker 18.6 Kubernetes 1.14 在部

WinterPirates的博客 2462

部署Kubernetes Dashboard

更多内容,请查看博客原文:部署Kubernetes Dashboard https://finolo.gy/2019/12/部署Kubernetes-Dashboard/ 在K8S v1.15.6环境下部署Kubernetes Dashboard。 查看官网 先查看Dashboard的版本,进入官网:https://github.com/kubernetes/dashboard。 To deplo...

footrip的博客 914

Kubernetes(k8s)中dashboard的部署。

1、k8s的dashboard的安装部署,首先需要将压缩包下载下来,然后进行解压缩操作。 1 [root@k8s-master ~]# cd k8s/ 2 [root@k8s-master k8s]# ls 3 book-master.war deploy health pod rc skydns skydns.zip svc tomcat_demo tomca...

HiterCoder 1007

【Kubernetes】K8s Dashboard的部署说明

Kubenetes-dashboard是官方发布的一款优秀的K8s WEB-UI,部署后就可以通过浏览器对已经部署的K8s集群进行资源监控和管理了。 由于K8s版本迭代还是非常快的,因此Kubenetes-dashboard与K8s的版本之间存在一个兼容性关系。官方也给出了明确的版本兼容性关系说明。大家可以自行去官网查阅,下载和本地安装的K8s集群的版本兼容的dashboard。兼容性关系这里就不做赘述了。 我本地虚拟机安装的K8s集群的版本为1.21.1...

cnskylee的博客 974

k8s 部署kubernetes-dashboard

kubernetes-dashboard暴露的访问端口号是32331,然后可以通过网页访问UI,在登录时需要输入token。然后在网页上就可以用这个token登录dashboard了。创建了一个名为admin-user的用户。用下面的命令生成token。

lkflxy93的博客 1185

K8S集群系列四:部署kubernetes-dashboard

在完成基础服务部署之后,我们需要部署一个dashboard来管理我们的节点,监控我们的服务。 1:下载kubernetes-dashboard.yaml 可以直接按照官网的方式进行安装。但是鉴于镜像无法下载的原因,我把他下载到服务器上了。 [root@master dashboard]# wget -c https://raw.githubusercontent.com/kubernete...

swpigris81的专栏 974

超越图灵机——论人工智能实现的可能性(一)

超越图灵机——论人工智能实现的可能性(一)我认为人工智能是可以实现到逻辑思维这一步的,因为逻辑思维可以完全用字符串来表示,图灵机可以把任意单元置成任意值,在这一点上是完备的,这就足以描述逻辑思维了,所以用图灵机完全可以实现到逻辑思维。当然图灵机会受到哥德尔不完备性的制约,但是逻辑系统也会受到同样的制约,所以我认为完全可以用图灵机实现逻辑思维。那么逻辑思维的本质机理与图灵机是什么关系?逻辑思

太极语言 1万+

十分钟部署Kubernetes dashboard配置(k8s页面)

十分钟部署Kubernetes dashboard配置(k8s页面) 一、概述 Kubernetes 简称为K8S,是用于自动部署,扩展和管理容器化应用程序的开源系统。Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。 现在的云平台,基本上都是基于k8s实现的。 Kubernetes需要用到docker,应该说是Kubernetes本身就是对docker容器的管理。 Docker 是一个开源的应用容器引擎

zhangpeng999123的博客 2294

5分钟搞定CST周期性结构仿真:共面波导色散曲线快速生成技巧

本文提供了一套在CST Studio Suite中快速仿真周期性结构并生成色散曲线的标准化流程。针对共面波导设计,重点解析了周期性边界条件的核心设置、本征模求解器(JDM算法)的优化技巧,以及通过参数扫描与后处理模板实现自动化,旨在帮助射频与微波工程师在5分钟内高效完成关键性能验证。

blue的专栏 1248

kubernetes(k8s)部署Dashboard

创建token:kubectl create token admin-user -n kubernetes-dashboard --duration=0。4.创建管理员账号,使用admin-user.yaml,创建后运行命令:kubectl apply -f admin-user.yaml。执行命令:kubectl get pod -A -o wide ,等待这两个pod状态变为running;6.执行命令:kubectl get svc -A -o wide ,查看dashboard映射的端口;

qq_41893255的博客 698

分布式推理服务(策略:数据并行、张量并行、流水线并行、专家并行)技术分析

摘要:分布式推理突破单GPU内存和算力限制,支持大模型部署。四种核心策略包括: 数据并行:复制模型拆分数据,提升吞吐但内存效率低; 流水线并行:模型分阶段执行,支持超大模型但存在计算气泡; 张量并行:拆分层内矩阵运算,延迟低但通信开销大; 专家并行:动态激活MoE模型专家,计算高效但路由复杂。实际应用中常组合策略(如3D并行),需权衡模型规模、硬件条件与性能目标。

技术引领业务创新 944

【深度学习】肺结节分割项目实战二:分割肺实质

在后续训练模型的时候如果直接使用原始的肺部CT图像,其中的非肺区域会对训练造成干扰,因此我们需要提取分割肺实质。这一部分参考了kaggle上的教程。 从这张CT图像中可以看出扫描器以外的部分为黑色,背景和肺内部颜色较深,非肺组织和骨头颜色较浅。我们的目的是将肺部分割出来。由于肺部区域和其他部分对比明显,我们可以设置一个合适的阈值对图像中的区域进行隔离。 import argparse import os import numpy as np from medpy.filter.smoothing imp

weixin_42182906的博客 7241

k8s——kubernetes 部署dashboard

1.dashboard概述 在 Kubernetes 社区中,有一个很受欢迎的 Dashboard 项目,它可以给用户提供一个可视化的 Web 界面来查看当前集群的各种信息。用户可以用 Kubernetes Dashboard 部署容器化的应用、监控应用的状态、执行故障排查任务以及管理 Kubernetes 各种资源。 2.部署dashboard实验 1.实验环境 多节点k8s,master01,node01,node02 2. 实验目的 通过搭建的dashboard来通过web界面直观显示参数 3.实验步

m0_47161295的博客 842

【第三方互联】3、腾讯QQ授权第三方登录

当我们创建的 QQ 互联应用成功后,我们便可以开始使用该应用来实现 QQ 互联 一、获取 APP ID 和 APP Key 1、找到我的应用 2、点击应用,进入详情 这样,我们就获取到了 APP ID 和 APP Key 二、进行开发 1、将 APP ID 、APP Key,以及该应用的信息放入项目中的配置文件中,我使用的是SpringBoot,我放在了 application.y...

JACKAL 22万+

k8s dashboard离线部署步骤

镜像准备registry.aliyuncs.com/google_containers/metrics-server:v0.5.2修改部分最终yml文件如下部署完成后kubectl get pods -n kube-systemkubectl top命令可以正常使用,则表面metrics-server部署成功。

xuqingda的博客 1881

innovus: 如何让两个generate clock balance skew group?

如题,在sdc约束中两个generate clock被设置到同一个clock group中,工具虽然会生成对应的两个skew group,但是阅读ccoot_spec发现工具并没有让两个skew group进行balance,这时就需要手动设置balance skew group。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 4049

学Simulink——基于故障诊断与容错控制的场景实例:并网逆变器在短路故障下的动态响应及恢复策略

本文详细介绍了使用Simulink进行并网逆变器短路故障模拟与保护策略设计的方法。通过构建高精度逆变器模型,模拟IGBT击穿和桥臂直通故障,分析动态响应特性。重点设计了基于Stateflow的微秒级快速保护逻辑,包括过流检测、PWM闭锁和故障报警。同时提出完整的恢复策略流程,涵盖放电、去磁、自检和软启动等关键步骤。仿真结果表明,该方法能在200μs内有效限制短路电流,保护器件安全,并实现系统可靠恢复。文章还探讨了硬件保护协同、多级保护和预测保护等高级策略,为新能源系统的安全运行提供了重要参考。

amy_mhd的博客 143

K8s: 部署 kubernetes dashboard

K8s 官方有一个项目叫 dashboard,通过这个项目更方便监控集群的状态。所以 K8s 提供了一个dashboard UI界面来供运维人员使用。能够查看到集群所有的组件,但这样的方式比较不太直观。要查看集群有哪些pod,用户,命名空间等,比较麻烦。部署 dashboard。通常我们通过命令行 $之后,对该文件稍作修改。查看命名空间中的服务。

Wang的专栏 1611

vue3 - element-plus表格组件el-table实现鼠标拖曳排序功能,vue3 Table表格拖拽排序,表格每行使用鼠标拖动进行排序功能,表格拖拽排序实现(详细示例代码,一键复制开箱即用

vue3,elementPlus,el-table,typescript,表格组件,Table表格,表格拖动排序,表格拖曳排序,鼠标拖拽表格进行排序功能,elementplus表格如何实现拖动每行进行排序操作,表格拖动改变顺序,鼠标拖曳,表格内的数据项拖拽排序,vue3如何实现element-Plus表格组件进行表格内的数据项拖拽排序,列表拖拽排序效果,实现table动态拖拽,鼠标拖着排序,vue3 element Plus 表格拖曳拖动拖拽 排序,el-table拖拽排序实现,表格内容拖拽重新排序,树形表

✅ 精选推荐文章 1万+

K8S-Demo集群实践15:部署Kubernetes Dashboard

K8S-Demo集群实践:部署Kubernetes Dashboard 先用起来,通过操作实践认识k8s,积累多了自然就理解了 把理解的知识分享出来,自造福田,自得福缘 追求简单,容易使人理解,知识的上下文也是知识的一部分,例如版本,时间等 欢迎留言交流,也可以提出问题,一般在周末回复和完善文档 Jason@vip.qq.com 2021-1-22 ...

jasonhe2018的博客 421

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

k8s如何部署kubernetes-dashboard

k8s部署kubernetes-dashboard

小诸葛的博客 649

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: Locust web性能测试实践
下一篇: Centos7升级K8S集群
KongTY312
博客等级 码龄12年 2143粉丝 189原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KongTY312

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值