一	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的 ...
		 
		
	
随机推荐
	
									- PhpStorm2016.3激活
			
选择License server,输入以下任意一个地址: http://idea.imsxm.com/http://114.215.133.70:41017/http://mcpmcc.com:101 ...
			 
						- C#网络编程入门之UDP
			
目录: C#网络编程入门系列包括三篇文章: (一)C#网络编程入门之UDP (二)C#网络编程入门之TCP (三)C#网络编程入门之HTTP 一.概述 UDP和TCP是网络通讯常用的两个传输协议,C# ...
			 
						- Jenkins在Pod中实现Docker in Docker并用kubectl进行部署
			
Jenkins在Pod中实现Docker in Docker并用kubectl进行部署 准备工作 安装Jenkins Jenkins的kubernetes-plugin使用方法 说明 Jenkins的 ...
			 
						- Redis 入门到分布式 (六)常见的持久化开发运维问题
			
个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.常见问题目录 fork操作 进程外开销 AOF追加阻塞 单机多实例部署 二. fork 1.Fork ...
			 
						- Java实现 LeetCode 241 为运算表达式设计优先级
			
241. 为运算表达式设计优先级 给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果.你需要给出所有可能的组合的结果.有效的运算符号包含 +, - 以及 * . 示例 ...
			 
						- Java实现合并排序
			
1 问题描述 给定一组数据,使用合并排序得到这组数据的非降序排列. 2 解决方案 2.1 合并排序原理简介 引用自百度百科: 合并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Div ...
			 
						- Linux 文件特殊权限-SetUID
			
SetUID非常类似于Windows中以管理员身份来运行文件,针对的是可执行文件,而且命令执行者要拥有对这个文件的执行权限,只在文件执行的过程中变换身份,最常见的passwd命令就具有SetUID权限 ...
			 
						- PAT 在霍格沃茨找零钱
			
如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易.”现在,给定 ...
			 
						- 利用tcpdump命令统计http的GET和POST请求
			
1.搭建的知识库服务器, 需要统计来访者都是哪些人,因为系统不是自己开发的,看不到访问日志.所以考虑从系统层面抓取访问流量来实现. 2.通过tcpdump抓取的数据包,在wireshark中打开发现, ...
			 
						- (二)linux三剑客之awk
			
1.awk是什么和上一节的grep有什么区别? 2.awk解决了哪些问题? 3.awk的工作原理? 4.awk的基础用法? 5.awk技术常用[收藏] 1.awk是什么? awk 用于处理文本,gre ...