首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >附017.Kubernetes_v1.17.4 Dashboard部署

附017.Kubernetes_v1.17.4 Dashboard部署

作者头像
木二
发布2020-06-18 18:16:01
5600
发布2020-06-18 18:16:01
举报
文章被收录于专栏:木二天空木二天空

一 Kubernetes dashboard简介

1.1 Web UI简介

dashboard是基于Web的Kubernetes用户界面。可以使用dashboard将容器化应用程序部署到Kubernetes集群,对容器化应用程序进行故障排除,以及管理集群资源。可以使用dashboard来概述群集上运行的应用程序,以及创建或修改单个Kubernetes资源(例如部署、任务、守护进程等)。可以使用部署向导扩展部署,启动滚动更新,重新启动Pod或部署新应用程序。

dashboard还提供有关群集中Kubernetes资源状态以及可能发生的任何错误的信息。

1.2 前置准备

本实验依赖于《附016.Kubernetes_v1.17高可用部署》,即已提前部署好Kubernetes。

二 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监控方案

参考《050.集群管理-Prometheus+Grafana监控方案

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 Kubernetes dashboard简介
    • 1.1 Web UI简介
      • 1.2 前置准备
      • 二 dashboard部署
        • 2.1 设置标签
          • 2.2 创建证书
            • 2.3 分发证书
              • 2.4 手动创建secret
                • 2.5 下载yaml
                  • 2.6 修改为yaml
                    • 2.6 正式部署
                    • 三 访问dashboard
                      • 3.1 导入证书
                        • 3.2 创建kubeconfig文件
                          • 3.3 测试访问dashboard
                          • 四 Metrics部署
                            • 4.1 Metrics
                              • 4.2 开启聚合层
                                • 4.3 获取部署文件
                                  • 4.4 正式部署
                                    • 4.5 查看资源监控
                                    • 五 Prometheus+Grafana
                                      • 5.1 Prometheus+Grafana监控方案
                                      相关产品与服务
                                      容器服务
                                      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                                      领券
                                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档