一 Kubernetes dashboard简介
1.1 Web UI简介
dashboard是基于Web的Kubernetes用户界面。可以使用dashboard将容器化应用程序部署到Kubernetes集群,对容器化应用程序进行故障排除,以及管理集群资源。可以使用dashboard来概述群集上运行的应用程序,以及创建或修改单个Kubernetes资源(例如部署、任务、守护进程等)。可以使用部署向导扩展部署,启动滚动更新,重新启动Pod或部署新应用程序。
dashboard还提供有关群集中Kubernetes资源状态以及可能发生的任何错误的信息。
1.2 前置准备
二 dashboard部署
2.1 设置标签
[root@master01 ~]# kubectl label nodes master01 k8srole=master
[root@master01 ~]# kubectl label nodes master02 k8srole=master
[root@master01 ~]# kubectl label nodes master03 k8srole=master
[root@master01 ~]# kubectl taint nodes --all node-role.kubernetes.io/master- #允许master部署应用
提示:部署完内部应用后可使用kubectl taint node master01 node-role.kubernetes.io/master="":NoSchedule重新设置Master为Master Only 状态。
2.2 创建证书
由于自动生成的证书可能过期,建议手动生成证书,而取消yaml中自动创建secret的部分。
[root@master01 ~]# cd /etc/kubernetes/pki/
[root@master01 pki]# openssl genrsa -out dashboard.key 2048
[root@master01 pki]# openssl req -new -out dashboard.csr -key dashboard.key -subj "/CN=dashboard"
[root@master01 pki]# openssl x509 -req -sha256 -in dashboard.csr -out dashboard.crt -signkey dashboard.key -days 3650
[root@master01 pki]# openssl x509 -noout -text -in ./dashboard.crt #查看证书
2.3 分发证书
[root@master01 pki]# for all_ip in ${ALL_IPS[@]}
do
echo ">>> ${all_ip}"
scp /etc/kubernetes/pki/dashboard.* root@${all_ip}:/etc/kubernetes/pki/
done
2.4 手动创建secret
[root@master01 ~]# ll /etc/kubernetes/pki/dashboard.*
-rw-r--r-- 1 root root 1.2K Dec 3 03:10 /etc/kubernetes/pki/dashboard.crt
-rw-r--r-- 1 root root 976 Dec 3 03:10 /etc/kubernetes/pki/dashboard.csr
-rw-r--r-- 1 root root 1.7K Dec 3 03:09 /etc/kubernetes/pki/dashboard.key
[root@master01 ~]# kubectl create ns kubernetes-dashboard #v2版本dashboard独立ns
[root@master01 ~]# kubectl create secret generic kubernetes-dashboard-certs --from-file="/etc/kubernetes/pki/dashboard.crt,/etc/kubernetes/pki/dashboard.key" -n kubernetes-dashboard #以新证书创建dashboard的secret
[root@master dashboard]# kubectl get secret kubernetes-dashboard-certs -n kubernetes-dashboard -o yaml #查看新证书
2.5 下载yaml
[root@master01 ~]# mkdir /root/dashboard #建议将yaml存储到本地
[root@master01 ~]# cd /root/dashboard
[root@master01 dashboard]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
2.6 修改为yaml
[root@master01 dashboard]# vi recommended.yaml
1 …… #如下新增管理员及角色授权为cluster-admin
2 ---
3
4
5 apiVersion: v1
6 kind: ServiceAccount
7 metadata:
8 name: admin-user
9 namespace: kubernetes-dashboard
10
11
12 ---
13 ……
14 kind: Service
15 apiVersion: v1
16 metadata:
17 labels:
18 k8s-app: kubernetes-dashboard
19 name: kubernetes-dashboard
20 namespace: kubernetes-dashboard
21 spec:
22 type: NodePort #新增
23 ports:
24 - port: 443
25 nodePort: 30000 #新增
26 targetPort: 8443
27 selector:
28 k8s-app: kubernetes-dashboard
29 ---
30 …… #如下全部注释
31 #apiVersion: v1
32 #kind: Secret
33 #metadata:
34 # labels:
35 # k8s-app: kubernetes-dashboard
36 # name: kubernetes-dashboard-certs
37 # namespace: kubernetes-dashboard
38 #type: Opaque
39 ……
40 ---
41
42
43 apiVersion: rbac.authorization.k8s.io/v1
44 kind: ClusterRoleBinding
45 metadata:
46 name: admin-user
47 roleRef:
48 apiGroup: rbac.authorization.k8s.io
49 kind: ClusterRole
50 name: cluster-admin
51 subjects:
52 - kind: ServiceAccount
53 name: admin-user
54 namespace: kubernetes-dashboard
55
56
57 ---
58 ……
59 replicas: 3 #适当调整为3副本
60 ……
61 imagePullPolicy: IfNotPresent #修改
62 ……
63 nodeSelector:
64 "beta.kubernetes.io/os": linux
65 "k8srole": master #部署在master节点
66 ……
67 nodeSelector:
68 "beta.kubernetes.io/os": linux
69 "k8srole": master #部署在master节点
70 …… #注释从而实现在master的部署
71 #tolerations:
72 # - key: node-role.kubernetes.io/master
73 # effect: NoSchedule
74 ……
75 ……
76 kind: Service
77 apiVersion: v1
78 metadata:
79 labels:
80 k8s-app: dashboard-metrics-scraper
81 name: dashboard-metrics-scraper
82 namespace: kubernetes-dashboard
83 spec:
84
85
86 type: NodePort #新增
87 ports:
88 - port: 8000
89 nodePort: 30001 #新增
90 targetPort: 8000
91 selector:
92 k8s-app: dashboard-metrics-scraper
93 ……
94 replicas: 3 #适当调整为3副本
95 ……
96 nodeSelector:
97 "beta.kubernetes.io/os": linux
98 "k8srole": master #部署在master节点
99 …… #注释从而实现在master的部署
100 #tolerations:
101 # - key: node-role.kubernetes.io/master
102 # effect: NoSchedule
103 ……
提示:具体完整yaml参考附件。
2.6 正式部署
[root@master01 dashboard]# kubectl apply -f recommended.yaml
[root@master01 ~]# kubectl get deployment kubernetes-dashboard -n kubernetes-dashboard
[root@master01 ~]# kubectl get services -n kubernetes-dashboard
[root@master01 ~]# kubectl get pods -o wide -n kubernetes-dashboard
提示:master01 NodePort 30000/TCP映射到 dashboard pod 443 端口。
三 访问dashboard
3.1 导入证书
将dashboard.crt导入浏览器,并设置为信任,导入操作略。
3.2 创建kubeconfig文件
使用token相对复杂,可将token添加至kubeconfig文件中,使用KubeConfig 文件访问dashboard。
[root@k8smaster01 ~]# ADMIN_SECRET=$(kubectl get secrets -n kubernetes-dashboard | grep admin-user-token- | awk '{print $1}')
[root@k8smaster01 ~]# DASHBOARD_LOGIN_TOKEN=$(kubectl describe secret -n kubernetes-dashboard ${ADMIN_SECRET} | grep -E '^token' | awk '{print $2}')
[root@k8smaster01 ~]# kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/pki/ca.crt \
--embed-certs=true \
--server=172.24.8.254:16443 \
--kubeconfig=dashboard_admin.kubeconfig # 设置集群参数
[root@k8smaster01 ~]# kubectl config set-credentials dashboard_user \
--token=${DASHBOARD_LOGIN_TOKEN} \
--kubeconfig=dashboard_admin.kubeconfig # 设置客户端认证参数,使用上面创建的 Token
[root@k8smaster01 ~]# kubectl config set-context default \
--cluster=kubernetes \
--user=dashboard_user \
--kubeconfig=dashboard_admin.kubeconfig # 设置上下文参数
[root@k8smaster01 ~]# kubectl config use-context default --kubeconfig=dashboard_admin.kubeconfig # 设置默认上下文
#将dashboard.kubeconfig文件导入,以便于浏览器使用该文件登录。
3.3 测试访问dashboard
本实验采用nodeip:nodepord方式访问。
浏览器访问:https://172.24.8.254:30000
使用dashboard_admin.kubeconfig文件访问:
提示:
更多dashboard访问方式及认证可参考《附004.Kubernetes Dashboard简介及使用》。
dashboard登录整个流程可参考:https://www.cnadn.net/post/2613.htm
本试验基于apiserver访问方式+Kubeconfig身份验证进行登录。
通过apiserver形式访问:https://172.24.8.254:16443/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
附001:导出当前Kubernetes证书
[root@master ~]# grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt
[root@master ~]# grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key
[root@master ~]# openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out k8s.crt -name "kubernetes-client"
Enter Export Password:[x120952576]
Verifying - Enter Export Password:[x120952576]
使用相应的密码,将k8s.crt导入IE浏览器,导入操作略。
四 Metrics部署
4.1 Metrics
Kubernetes的早期版本依靠Heapster来实现完整的性能数据采集和监控功能,Kubernetes从1.8版本开始,性能数据开始以Metrics API的方式提供标准化接口,并且从1.10版本开始将Heapster替换为Metrics Server。在Kubernetes新的监控体系中,Metrics Server用于提供核心指标(Core Metrics),包括Node、Pod的CPU和内存使用指标。
对其他自定义指标(Custom Metrics)的监控则由Prometheus等组件来完成。
4.2 开启聚合层
有关聚合层知识参考:https://blog.csdn.net/liukuan73/article/details/81352637
kubeadm方式部署默认已开启。
4.3 获取部署文件
[root@master01 ~]# git clone https://github.com/kubernetes-incubator/metrics-server.git
[root@master01 ~]# cd metrics-server/deploy/kubernetes/
[root@master01 kubernetes]# vi metrics-server-deployment.yaml
1 ……
2 spec:
3 hostNetwork: true
4 ……
5 containers:
6 - name: metrics-server
7 image: gcr.azk8s.cn/google_containers/metrics-server-amd64:v0.3.6 #修改为国内源
8 imagePullPolicy: IfNotPresent
9 args:
10 - --cert-dir=/tmp
11 - --secure-port=4443
12 - --kubelet-insecure-tls
13 - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP #添加如上command
14 ……
4.4 正式部署
[root@master01 kubernetes]# kubectl apply -f .
[root@master01 kubernetes]# kubectl -n kube-system get pods -l k8s-app=metrics-server
NAME READY STATUS RESTARTS AGE
metrics-server-7f74dc667d-hcttx 1/1 Running 0 2m52s
[root@master01 kubernetes]# kubectl -n kube-system logs -l k8s-app=metrics-server -f #查看日志
4.5 查看资源监控
[root@k8smaster01 ~]# kubectl top nodes
[root@k8smaster01 ~]# kubectl top pods --all-namespaces
提示:Metrics Server提供的数据也可以供HPA控制器使用,以实现基于CPU使用率或内存使用值的Pod自动扩缩容功能。
部署参考:https://linux48.com/container/2019-11-13-metrics-server.html
有关metrics更多部署参考:
https://kubernetes.io/docs/tasks/debug-application-cluster/resource-metrics-pipeline/
开启开启API Aggregation参考:
https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/
API Aggregation介绍参考:
https://kubernetes.io/docs/tasks/access-kubernetes-api/configure-aggregation-layer/
五 Prometheus+Grafana
5.1 Prometheus+Grafana监控方案
- 附016.Kubernetes_v1.17.4高可用部署
一 kubeadm介绍 1.1 概述 参考<附003.Kubeadm部署Kubernetes>. 1.2 kubeadm功能 参考<附003.Kubeadm部署Kubernetes& ...
- 附024.Kubernetes_v1.18.3高可用部署架构二
kubeadm介绍 kubeadm概述 参考<附003.Kubeadm部署Kubernetes>. kubeadm功能 参考<附003.Kubeadm部署Kubernetes> ...
- 附028.Kubernetes_v1.20.0高可用部署架构二
目录 kubeadm介绍 kubeadm概述 kubeadm功能 本方案描述 部署规划 节点规划 初始准备 互信配置 其他准备 集群部署 相关组件包 正式安装 部署高可用组件I Keepalived安 ...
- 附031.Kubernetes_v1.20.4高可用部署架构二
kubeadm介绍 kubeadm概述 参考附003.Kubeadm部署Kubernetes. kubeadm功能 参考附003.Kubeadm部署Kubernetes. 本方案描述 本方案采用kub ...
- 附034.Kubernetes_v1.21.0高可用部署架构二
kubeadm介绍 kubeadm概述 Kubeadm 是一个工具,它提供了 kubeadm init 以及 kubeadm join 这两个命令作为快速创建 kubernetes 集群的最佳实践. ...
- 附022.Kubernetes_v1.18.3高可用部署架构一
kubeadm介绍 kubeadm概述 参考附003.Kubeadm部署Kubernetes. kubeadm功能 参考附003.Kubeadm部署Kubernetes. 本方案描述 本方案采用kub ...
- K8S从入门到放弃系列-(14)Kubernetes集群Dashboard部署
Dashboard是k8s的web界面,用户可以用 Kubernetes Dashboard 部署容器化的应用.监控应用.并对集群本身进行管理,在 Kubernetes Dashboard 中可以查看 ...
- 十三,k8s集群web端管理工具dashboard部署
目录 部署 dashboard 由于会被墙, 所以要加一步拉取镜像 正式开始安装dashboard 查看 开放访问 配置dashboard用户 1. token 令牌认证 创建一个 serviceAc ...
- 容器编排系统K8s之Dashboard部署
前文我们了解了k8s的访问控制第三关准入控制相关插件的使用,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14220402.html:今天我们来了解下k8s的 ...
随机推荐
- Linux上,最常用的一批命令解析【10年精选】
原文链接:https://mp.weixin.qq.com/s/QkqHexs_kOgy_5OwbwyFww 建议点击原文链接查看 不同平台linux客户端连接工具分享: windos终端神器:SSH ...
- Ubuntu 18.04上交叉编译华硕路由器RT-AC88U的梅林384.15版本
研究了半天官方wiki上的文档,最后却找到这个一键脚本.手动试了一下,丝般顺滑,成功编译出RT-AC88U的梅林固件384.15版本.也可以编译其他路由器型号的固件. 不过这个脚本比较暴力,上来就把/ ...
- 解决ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 这种问题需要强行重新修改密码,方法 ...
- 大数据平台比较-CDH,HDP
主要的不同点 apache Ambari ClouderaManager Express(免费版) 配置版本控制和历史记录 支持 不支持 二次开发 支持 不支持 集成 支持 no (不支持redis. ...
- 【Windows】快速启动软件 非点击软件图标 无限弹窗
1. 添加系统路径 单独新建文件夹A用于存放待快速启动的软件的快捷方式图标,复制文件夹A的路径-> 右击windows shell中此电脑->属性->高级系统设置->环境变量- ...
- 自定义值类型一定不要忘了重写Equals,否则性能和空间双双堪忧
一:背景 1. 讲故事 曾今在项目中发现有同事自定义结构体的时候,居然没有重写Equals方法,比如下面这段代码: static void Main(string[] args) { var list ...
- Jmeter(五) - 从入门到精通 - 创建网络计划实战和创建高级Web测试计划(详解教程)
1.简介 上一篇中宏哥已经将其的理论知识介绍了一下,这一篇宏哥就带着大家一步一步的把上一篇介绍的理论知识实践一下,然后再说一下如何创建高级web测试计划. 2.网络计划实战 通过上一篇的学习,宏哥将其 ...
- 超干货!为了让你彻底弄懂MySQL事务日志,我通宵肝出了这份图解!
还记得刚上研究生的时候,导师常挂在嘴边的一句话,"科研的基础不过就是数据而已."如今看来,无论是人文社科,还是自然科学,或许都可在一定程度上看作是数据的科学. 倘若剥开研究领域的外 ...
- layui插件croppers的使用
这是我第一次在layui环境下面使用croppers插件.先粘贴下前端代码并附上我的目录结构吧. @{ ViewData["Title"] = "Crop ...
- Java实现 LeetCode 832 翻转图像(位运算)
832. 翻转图像 给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果. 水平翻转图片就是将图片的每一行都进行翻转,即逆序.例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, ...