安装 Dashboard教程
上两篇文章已经成功部署了Kubernetes的集群,这篇来介绍安装Dashboard。Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。 你可以使用 Dashboard 获取运行在集群中的应用的概览信息,也可以创建或者修改 Kubernetes 资源 (如 Deployment、Job、DaemonSet 等等)。 例如,你可以对 Deployment 实现弹性伸缩、发起滚动升级、重启 Pod 或者使用向导创建新的应用。
Dashboard 同时展示了 Kubernetes 集群中的资源状态信息和所有报错信息。
准备工作
选择 Dashboard版本
前往 Dashboard官方下载页面,选择适配的版本进行下载。
因为系统中Kubernetes的版本是1.30.8,所以选择kubernetes-dashboard-7.7.0
从版本 7.0.0 开始,官方已经停止了对基于 Manifest 文件的安装支持,转而仅支持 Helm 基础的安装方式。
Helm和Kubernetes版本
Helm 版本与支持的 Kubernetes 版本对应关系:https://helm.sh/docs/topics/version_skew/。根据官方推荐安装Helm3.15.x的版本
安装Helm
用二进制版本安装
每个Helm 版本都提供了各种操作系统的二进制版本,这些版本可以手动下载和安装。
- 下载 需要的版本
- 解压(
tar -zxvf helm-v3.0.0-linux-amd64.tar.gz
) - 在解压目录中找到
helm
程序,移动到需要的目录中(mv linux-amd64/helm /usr/local/bin/helm
)
然后就可以执行客户端程序并 添加稳定仓库: helm help
.
kubernetesdashboard_32">安装kubernetes-dashboard命令介绍
根据官方提示安装dashboard
# Add kubernetes-dashboard repository
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
# Deploy a Helm Release named "kubernetes-dashboard" using the kubernetes-dashboard chart
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard
如果想指定版本用下面这条命令
helm install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard \--namespace kubernetes-dashboard \--create-namespace \--version 7.0.0 \--timeout 600s
如果在尝试从 GitHub 下载 Chart 文件时遇到了网络问题或超时。可以手动下载 Helm Chart 文件并在本地安装。
配置
请参阅values.yaml 了解有效值及其默认值。
--set key=value[,key=value]
使用 的参数指定每个参数helm install/upgrade
。例如,
helm install kubernetes-dashboard/kubernetes-dashboard --name kubernetes-dashboard \--set=api.containers.resources.limits.cpu=200m
或者,可以在安装图表时提供指定上述参数值的 YAML 文件。例如,
helm install kubernetes-dashboard/kubernetes-dashboard --name kubernetes-dashboard -f values.yaml
提示:您可以使用默认使用的values.yaml作为参考
kubernetesdashboard_76">安装kubernetes-dashboard
- 手动下载 Helm Chart:
访问 Kubernetes Dashboard Releases 页面,找到你需要的版本(例如 v7.0.0),下载 .tgz 文件。
- 保存到本地目录:
将下载的 .tgz 文件保存到本地目录,例如 /root。
- 使用本地文件安装:
helm install kubernetes-dashboard /root/kubernetes-dashboard-7.7.0.tgz --namespace kubernetes-dashboard --create-namespace
命令行代理
1.使用 Port Forwarding
如果您只需要临时访问 Dashboard,可以使用 kubectl port-forward 命令。
安装完成后,kubectl
您可以通过运行以下命令,使用命令行工具启用对仪表板的访问:
kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard-kong-proxy 8443:443
可以通过按下Ctrl+C
来终止端口转发
Kubectl 将使仪表板在https://localhost:8443上可用。
仅可从执行命令的机器访问UI 。请参阅kubectl port-forward --help
以了解更多选项。
- 方法二:修改服务类型为 NodePort
如果您希望可以通过节点 IP 和端口访问 Dashboard,请将服务类型更改为 NodePort。
改服务类型为 NodePort
kubectl patch svc kubernetes-dashboard-kong-proxy -n kubernetes-dashboard --type='json' -p '[{"op":"replace","path":"/spec/type","value":"NodePort"}]'
- 添加 nodePort 字段
您可以指定一个可用的端口号(例如 30000),或者让 Kubernetes 自动分配一个。这里我们指定 30000 作为示例。
kubectl patch svc kubernetes-dashboard-kong-proxy -n kubernetes-dashboard --type='json' -p '[{"op":"add","path":"/spec/ports/0/nodePort","value":30000}]'
也可以是使用编辑器进行修改,命令如下
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
如果显示您的连接不是私密连接,在当前页面用键盘输入thisisunsafe
,不是在地址栏输入,就直接输入,页面即会自动刷新进入网页。不行就多输入几次,但是要确保输入是正确的。具体请查看这篇博客
方法三:配置 Ingress
如果您有 Ingress 控制器(如 NGINX Ingress Controller),通过配置 Ingress 来访问 Kubernetes Dashboard 是一种推荐的方式,特别是对于生产环境。以下是详细的步骤,帮助您配置 Ingress 以访问 Kubernetes Dashboard。
前提条件
Ingress 控制器已安装:确保您的 Kubernetes 集群中已经安装了一个 Ingress 控制器(如 NGINX Ingress Controller)。如果没有安装,可以按照官网步骤进行安装。
因为网络原因,我还是以安装包的形式进行安装
根据官方说明下载合适的版本安装包
- 配置 Ingress 资源
接下来,配置 Ingress 资源以将流量路由到 kubernetes-dashboard-web 服务。
创建 Ingress 资源文件
创建一个新的 YAML 文件 dashboard-ingress.yaml,内容如下:
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: kubernetes-dashboardnamespace: kubernetes-dashboardannotations:nginx.ingress.kubernetes.io/ssl-redirect: "false"nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"spec:rules:- host: dashboard.example.com # 替换为您的域名http:paths:- path: /pathType: Prefixbackend:service:name: kubernetes-dashboard-webport:number: 8000
应用 Ingress 配置
kubectl apply -f dashboard-ingress.yaml
kubernetesdashboard%0A____3__DNS__IP_%0A_dashboardexamplecom__Ingress__IP_%0A%0A_DNS_%0A_DNS__A__dashboardexamplecom__Ingress__IP_%0A%0A___dashboardexamplecom__A__1921681100%0A____DNS_%0ADNS_%0A_IP_%0A_Ingress__IP__Dashboard%0A%0Akubectl_get_svc_n_ingressnginx_ingressnginxcontroller_o_jsonpathstatusloadBalanceringress0ip%0A_http1921681100__https1921681100%0Atoken%0Acat__dashboarduseryaml__EOF%0AapiVersion_v1%0Akind_ServiceAccount%0Ametadata%0A__name_adminuser%0A__namespace_kubesystem_185">验证 Ingress 配置
kubectl get ingress -n kubernetes-dashboard
3. 配置 DNS 或 IP 地址
确保您的域名 dashboard.example.com 指向 Ingress 控制器的外部 IP 地址。您可以使用以下方法之一:
方法一:使用域名
配置 DNS 记录
在您的 DNS 提供商处添加一个 A 记录,将 dashboard.example.com 指向 Ingress 控制器的外部 IP 地址。
示例:
dashboard.example.com. A 192.168.1.100
等待 DNS 传播
DNS 记录可能需要几分钟到几小时才能传播。
方法二:使用 IP 地址
如果您没有域名,可以直接使用 Ingress 控制器的外部 IP 地址访问 Dashboard。
.
kubectl get svc -n ingress-nginx ingress-nginx-controller -o jsonpath=‘{.status.loadBalancer.ingress[0].ip}’
然后访问 http://192.168.1.100 或 https://192.168.1.100。
创建临时token
cat > dashboard-user.yaml << EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
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: kube-system
EOF
kubectl apply -f dashboard-user.yaml
创建token
kubectl -n kube-system create token admin-user
eyJhbGciOiJSUzI1NiIsImtpZCI6Im5vZExpNi1tTERLb09ONVM2cEE0SWNCUnA4eTZieE81RnVGb1IwSk5QVFEifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzA4MjQ4NjM4LCJpYXQiOjE3MDgyNDUwMzgsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiMTQ1YTdmZTktMTQ0YS00NDZmLWI1M2QtNDk4OGM3YjIyZjgyIn19LCJuYmYiOjE3MDgyNDUwMzgsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbi11c2VyIn0.H2Oxxrb5BVLH1iDOA-Uo1I7aiAUZX1wK-xBiV9NJXQ32EDyQvss95yQbCNHtPMhQZ8jFE3NRhyjkgZMZmX7kR9J-89QXLqKhE8Qnihd1mq5HOEVQ8tjZ6ix8ymxs5QkfSvd_OUzILKBtfYAMb4Fer67Dyf14oBHWVKU9LQkCdtFaLxerK–N7gLWeGXzavqzOlEPZR5UZWUPwP5dJmAQtvSToPVMaKiA49LjaGJid0F5Pxnutr80oZRsLfKr0MpoEG6jrow1QeJ2PgVksDTcqMTpye-M6jmIbuxabsRSskTT_zEDT0J86BiLYIHnh79D-P7IUUq6GOp8DgG-wXhICQ
创建长期token
cat > dashboard-user-token.yaml << EOF
apiVersion: v1
kind: Secret
metadata:
name: admin-user
namespace: kube-system
annotations:
kubernetes.io/service-account.name: “admin-user”
type: kubernetes.io/service-account-token
EOF
kubectl apply -f dashboard-user-token.yaml
查看密码
kubectl get secret admin-user -n kube-system -o jsonpath={“.data.token”} | base64 -d
成功登录
7.0以前的版本安装
2、下载配置文件
进入到master节点,下载dashboard对应版本的 recommended.yaml 文件
bash
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml
3、添加 Dashboard 的Service类型
指定 Service 的类型为 NodePort
[root@k8s-master ~]# vim setup_dashboard_token.sh
[root@k8s-master ~]# chmod +x setup_dashboard_token.sh
[root@k8s-master ~]# chmod +x setup_dashboard_token.sh
[root@k8s-master ~]# ./setup_dashboard_token.sh
serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user created
secret/admin-user-token created
serviceaccount/admin-user patched
Token: ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNklsTnZWVmhoVFd4ZmNGWXdXSGRCYTBsM056TlRX
VGRYYTA1dGJUTjZiSE5RUVROakxVc3hValozVmtFaWZRLmV5SmhkV1FpT2xzaWFIUjBjSE02THk5
cmRXSmxjbTVsZEdWekxtUmxabUYxYkhRdWMzWmpMbU5zZFhOMFpYSXViRzlqWVd3aVhTd2laWGh3
SWpveE56TTJOREUyTlRFeExDSnBZWFFpT2pFM016WTBNVEk1TVRFc0ltbHpjeUk2SW1oMGRIQnpP
aTh2YTNWaVpYSnVaWFJsY3k1a1pXWmhkV3gwTG5OMll5NWpiSFZ6ZEdWeUxteHZZMkZzSWl3aWFu
UnBJam9pTkRabVlqTTFNVEl0WTJSak5DMDBOR0k0TFdFNFpESXRZVGt6WVdOa01XSXlZemMzSWl3
aWEzVmlaWEp1WlhSbGN5NXBieUk2ZXlKdVlXMWxjM0JoWTJVaU9pSnJkV0psY201bGRHVnpMV1Jo
YzJoaWIyRnlaQ0lzSW5ObGNuWnBZMlZoWTJOdmRXNTBJanA3SW01aGJXVWlPaUpoWkcxcGJpMTFj
MlZ5SWl3aWRXbGtJam9pWmpjNU1HSXhaamt0WkRKalpDMDBOR1l5TFdFNFlqUXRaVGRtWldFd1pE
QTFZMlZqSW4xOUxDSnVZbVlpT2pFM016WTBNVEk1TVRFc0luTjFZaUk2SW5ONWMzUmxiVHB6WlhK
MmFXTmxZV05qYjNWdWREcHJkV0psY201bGRHVnpMV1JoYzJoaWIyRnlaRHBoWkcxcGJpMTFjMlZ5
SW4wLmRjWlQzNFJBZ0F2emJnajBMLTQzSHkwTkpIZVZSSXBiWEJjLS1vNDc1VUs3bU1xV0Y3Z1lI
U0g0Y1hiaWZweXRFNF9vd2xaYUxCb1FjOGQ1THktYVB3b0pDZzVKYnhmcGJDVHcwVFRJTl9DcUNG
ei1VeS1XV2FhUFV0N0lBQUZkb3IwX1I4cl9WZGhUeVd3LXNUSmhMWC1xX18zemxCeFYxNU40UzhK
Q0RhcWxwTFJkY29pUkRCQ2NwNkVnclo0NWIzemZiZXRoU2pyOFBvTkVjZ1RxQUlvemN5cW5iTG1F
QjJtZ3kyXzk2VlpBX2h3UVhLc29rU0lwZGNrNC1nNk1KVklGLUdYbG1qTF9CNGF0RTcwUjFNTzJE
TlBaNktlNms3eUxrRlVIQkQ5VWJsdDdpR21RTHNxLXI4dGxNeGFWOF81TnUxekNNNVlxN2lEeGc0
cjF5QQ==
kubectl create token admin-user -n kubernetes-dashboard
https://kubernetes.io/zh-cn/docs/concepts/configuration/secret/
https://kubernetes.io/zh-cn/docs/concepts/configuration/secret/
指定 NodePort Service 在每个节点上使用的端口号 (30000-32767 )
bash
vim recommended.yaml
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: dashboard-metrics-scraper
name: dashboard-metrics-scraper
namespace: kubernetes-dashboard
spec:
type: NodePort #添加
ports:
- port: 8000
targetPort: 8000
nodePort: 32111 #添加
selector:
k8s-app: dashboard-metrics-scraper
4、应用部署
bash
kubectl apply -f recommended.yaml
5、查看 kubernetes-dashboard 命名空间下资源状态
bash
kubectl get pods,svc -n kubernetes-dashboard
6、创建访问账户
1.24 版本前的操作
bash
kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard
7、授权
bash
kubectl create clusterrolebinding dashboard-admin-rb --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin
8、获取账号token
获取 token 登录Dashboard
bash
kubectl get secrets -n kubernetes-dashboard | grep dashboard-admin
kubectl describe secrets dashboard-admin-token-qfz2z -n kubernetes-dashboard
9、1.24 版本以后的需要创建一个Pod
yaml
cat << EOF > pod1.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod1
name: pod1
namespace: kubernetes-dashboard
spec:
terminationGracePeriodSeconds: 0
serviceAccount: dashboard-admin
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod1
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
EOF
bash
kubectl apply -f pod1.yaml
kubectl exec -it pod1 -n kubernetes-dashboard – cat /run/secrets/kubernetes.io/serviceaccount/token
四、浏览器访问Dashboard
遇到显示 Your connection is not private 在页面空白处英文输入法输入
thisisunsafe
1、输入 token 登录
2、页面
一、Dashboard 概述
二、GitHub 地址
三、Dashboard 部署安装
1、选择兼容版本
2、下载配置文件
3、添加 Dashboard 的Service类型
4、应用部署
5、查看 kubernetes-dashboard 命名空间下资源状态
6、创建访问账户
7、授权
8、获取账号token
9、1.24 版本以后的需要创建一个Pod
四、浏览器访问Dashboard
1、输入 token 登录
2、页面
EOF
https://devpress.csdn.net/k8s/66c982b68f4f502e1cfd4093.html
https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/#containerd