018.Kubernetes二进制集群插件metrics-dashboard
一 Metrics部署
1.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等组件来完成。
1.2 开启聚合层
有关聚合层知识参考:https://blog.csdn.net/liukuan73/article/details/81352637
本实验前置步骤已开启。
1.3 获取部署文件
1 [root@master01 ~]# cd /opt/k8s/work/ 2 [root@master01 work]# mkdir metrics 3 [root@master01 work]# cd metrics/ 4 [root@master01 metrics]# wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml 5 [root@master01 metrics]# vi components.yaml
1 …… 2 apiVersion: apps/v1 3 kind: Deployment 4 …… 5 spec: 6 replicas: 3 #根据集群规模调整副本数 7 …… 8 spec: 9 hostNetwork: true 10 …… 11 - name: metrics-server 12 image: k8s.gcr.io/metrics-server-amd64:v0.3.6 13 imagePullPolicy: IfNotPresent 14 args: 15 - --cert-dir=/tmp 16 - --secure-port=4443 17 - --kubelet-insecure-tls 18 - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP #追加此args 19 ……
提示:本步骤操作仅需要在master01节点操作。
1.4 正式部署
1 [root@master01 metrics]# kubectl apply -f components.yaml 2 [root@master01 metrics]# kubectl -n kube-system get pods -l k8s-app=metrics-server 3 NAME READY STATUS RESTARTS AGE 4 metrics-server-7b97647899-gm7j2 1/1 Running 0 9s 5 metrics-server-7b97647899-lqwwg 1/1 Running 0 9s 6 metrics-server-7b97647899-mrd84 1/1 Running 0 9s
提示:本步骤操作仅需要在master01节点操作。
1.5 查看资源监控
1 [root@master01 metrics]# kubectl top nodes 2 [root@master01 metrics]# kubectl top pods --all-namespaces
提示:Metrics Server提供的数据也可以供HPA控制器使用,以实现基于CPU使用率或内存使用值的Pod自动扩缩容功能。
二 Nginx ingress部署
为了便于访问,本实验建议采用域名访问dashboard,域名由ingress进行暴露,因此建议提前部署ingress。具体部署参考《附020.Nginx-ingress部署及使用》,建议采用社区版。
三 dashboard部署
3.1 设置标签
1 [root@master01 ~]# cd /opt/k8s/work/dashboard 2 [root@master01 dashboard]# kubectl label nodes master01 dashboard=yes 3 [root@master01 dashboard]# kubectl label nodes master02 dashboard=yes 4 [root@master01 dashboard]# kubectl label nodes master03 dashboard=yes
提示:本步骤操作仅需要在master01节点操作。
3.2 创建证书
本实验已获取免费一年的证书,免费证书获取可参考:https://freessl.cn。
1 [root@master01 ~]# mkdir -p /opt/k8s/work/dashboard/certs 2 [root@master01 work]# cd /opt/k8s/work/dashboard/certs 3 [root@master01 certs]# mv k8s.odocker.com tls.crt 4 [root@master01 certs]# mv k8s.odocker.com tls.crt 5 [root@master01 certs]# ll 6 total 8.0K 7 -rw-r--r-- 1 root root 1.9K Jun 8 11:46 tls.crt 8 -rw-r--r-- 1 root root 1.7K Jun 8 11:46 tls.ke
提示:也可手动如下操作创建自签证书:
1 [root@master01 ~]# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/C=CN/ST=ZheJiang/L=HangZhou/O=Xianghy/OU=Xianghy/CN=k8s.odocker.com"
3.3 手动创建secret
1 [root@master01 ~]# kubectl create ns kubernetes-dashboard #v2版本dashboard独立ns 2 [root@master01 ~]# kubectl create secret generic kubernetes-dashboard-certs --from-file=/opt/k8s/work/dashboard/certs -n kubernetes-dashboard 3 [root@master01 ~]# kubectl get secret kubernetes-dashboard-certs -n kubernetes-dashboard -o yaml #查看新证书
提示:本步骤操作仅需要在master01节点操作。
3.4 下载yaml
1 [root@master01 ~]# cd /opt/k8s/work/dashboard/ 2 [root@master01 dashboard]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.1/aio/deploy/recommended.yaml
提示:本步骤操作仅需要在master01节点操作。
3.5 修改yaml
1 [root@master01 dashboard]# vi recommended.yaml
1 …… 2 kind: Service 3 apiVersion: v1 4 metadata: 5 labels: 6 k8s-app: kubernetes-dashboard 7 name: kubernetes-dashboard 8 namespace: kubernetes-dashboard 9 spec: 10 type: NodePort #新增 11 ports: 12 - port: 443 13 targetPort: 8443 14 nodePort: 30001 #新增 15 selector: 16 k8s-app: kubernetes-dashboard 17 --- 18 …… #如下全部注释 19 #apiVersion: v1 20 #kind: Secret 21 #metadata: 22 # labels: 23 # k8s-app: kubernetes-dashboard 24 # name: kubernetes-dashboard-certs 25 # namespace: kubernetes-dashboard 26 #type: Opaque 27 …… 28 kind: Deployment 29 …… 30 replicas: 3 #适当调整为3副本 31 …… 32 imagePullPolicy: IfNotPresent #修改镜像下载策略 33 ports: 34 - containerPort: 8443 35 protocol: TCP 36 args: 37 - --auto-generate-certificates 38 - --namespace=kubernetes-dashboard 39 - --tls-key-file=tls.key 40 - --tls-cert-file=tls.crt 41 - --token-ttl=3600 #追加如上args 42 …… 43 nodeSelector: 44 "beta.kubernetes.io/os": linux 45 "dashboard": "yes" #部署在master节点 46 …… 47 kind: Service 48 apiVersion: v1 49 metadata: 50 labels: 51 k8s-app: dashboard-metrics-scraper 52 name: dashboard-metrics-scraper 53 namespace: kubernetes-dashboard 54 spec: 55 type: NodePort #新增 56 ports: 57 - port: 8000 58 targetPort: 8000 59 nodePort: 30000 #新增 60 selector: 61 k8s-app: dashboard-metrics-scraper 62 …… 63 replicas: 3 #适当调整为3副本 64 …… 65 nodeSelector: 66 "beta.kubernetes.io/os": linux 67 "dashboard": "yes" #部署在master节点 68 ……
提示:本步骤操作仅需要在master01节点操作。
3.6 正式部署
1 [root@master01 dashboard]# kubectl apply -f recommended.yaml 2 [root@master01 dashboard]# kubectl get deployment kubernetes-dashboard -n kubernetes-dashboard 3 [root@master01 dashboard]# kubectl get services -n kubernetes-dashboard 4 [root@master01 dashboard]# kubectl get pods -o wide -n kubernetes-dashboard
提示:master01 NodePort 30001/TCP映射到 dashboard pod 443 端口。
提示:本步骤操作仅需要在master01节点操作。
3.7 创建管理员账户
提示:dashboard v2版本默认没有创建具有管理员权限的账户,可如下操作创建。
1 [root@master01 dashboard]# vi dashboard-admin.yaml
1 --- 2 apiVersion: v1 3 kind: ServiceAccount 4 metadata: 5 name: admin-user 6 namespace: kubernetes-dashboard 7 8 --- 9 apiVersion: rbac.authorization.k8s.io/v1 10 kind: ClusterRoleBinding 11 metadata: 12 name: admin-user 13 roleRef: 14 apiGroup: rbac.authorization.k8s.io 15 kind: ClusterRole 16 name: cluster-admin 17 subjects: 18 - kind: ServiceAccount 19 name: admin-user 20 namespace: kubernetes-dashboard
1 [root@master01 dashboard]# kubectl apply -f dashboard-admin.yaml
提示:本步骤操作仅需要在master01节点操作。
四 ingress暴露dashboard
4.1 创建ingress tls
1 [root@master01 ~]# cd /opt/k8s/work/dashboard/certs 2 [root@master01 certs]# kubectl -n kubernetes-dashboard create secret tls kubernetes-dashboard-tls --cert=tls.crt --key=tls.key 3 [root@master01 certs]# kubectl -n kubernetes-dashboard describe secrets kubernetes-dashboard-tls
提示:本步骤操作仅需要在master01节点操作。
4.2 创建ingress策略
1 [root@master01 ~]# cd /opt/k8s/work/dashboard/ 2 [root@master01 dashboard]# vi dashboard-ingress.yaml
1 apiVersion: networking.k8s.io/v1beta1 2 kind: Ingress 3 metadata: 4 name: kubernetes-dashboard-ingress 5 namespace: kubernetes-dashboard 6 annotations: 7 kubernetes.io/ingress.class: "nginx" 8 nginx.ingress.kubernetes.io/use-regex: "true" 9 nginx.ingress.kubernetes.io/ssl-passthrough: "true" 10 nginx.ingress.kubernetes.io/rewrite-target: / 11 nginx.ingress.kubernetes.io/ssl-redirect: "true" 12 #nginx.ingress.kubernetes.io/secure-backends: "true" 13 nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" 14 nginx.ingress.kubernetes.io/proxy-connect-timeout: "600" 15 nginx.ingress.kubernetes.io/proxy-read-timeout: "600" 16 nginx.ingress.kubernetes.io/proxy-send-timeout: "600" 17 nginx.ingress.kubernetes.io/configuration-snippet: | 18 proxy_ssl_session_reuse off; 19 spec: 20 rules: 21 - host: k8s.odocker.com 22 http: 23 paths: 24 - path: / 25 backend: 26 serviceName: kubernetes-dashboard 27 servicePort: 443 28 tls: 29 - hosts: 30 - k8s.odocker.com 31 secretName: kubernetes-dashboard-tls
1 [root@master01 dashboard]# kubectl apply -f dashboard-ingress.yaml 2 [root@master01 dashboard]# kubectl -n kubernetes-dashboard get ingress
提示:本步骤操作仅需要在master01节点操作。
五 访问Dashboard
5.1 导入证书
将k8s.odocker.com导入浏览器,并设置为信任,导入操作略。
5.2 创建kubeconfig文件
使用token相对复杂,可将token添加至kubeconfig文件中,使用KubeConfig文件访问dashboard。
1 [root@master01 dashboard]# ADMIN_SECRET=$(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}') 2 [root@master01 dashboard]# DASHBOARD_LOGIN_TOKEN=$(kubectl describe secret -n kubernetes-dashboard ${ADMIN_SECRET} | grep -E '^token' | awk '{print $2}') 3 4 [root@master01 dashboard]# kubectl config set-cluster kubernetes \ 5 --certificate-authority=/etc/kubernetes/cert/ca.pem \ 6 --embed-certs=true \ 7 --server=172.24.8.100:16443 \ 8 --kubeconfig=local-binkek8s-dashboard-admin.kubeconfig # 设置集群参数 9 [root@master01 dashboard]# kubectl config set-credentials dashboard_user \ 10 --token=${DASHBOARD_LOGIN_TOKEN} \ 11 --kubeconfig=local-binkek8s-dashboard-admin.kubeconfig # 设置客户端认证参数,使用上面创建的 Token 12 [root@master01 dashboard]# kubectl config set-context default \ 13 --cluster=kubernetes \ 14 --user=dashboard_user \ 15 --kubeconfig=local-binkek8s-dashboard-admin.kubeconfig # 设置上下文参数 16 [root@master01 dashboard]# kubectl config use-context default --kubeconfig=local-binkek8s-dashboard-admin.kubeconfig # 设置默认上下文
提示:本步骤操作仅需要在master01节点操作。
将local-binkek8s-dashboard-admin.kubeconfig文件导入,以便于浏览器使用该文件登录。
5.3 测试访问Dashboard
本实验采用ingress所暴露的域名:https://k8s.odocker.com 方式访问。
使用local-hakek8s-dashboard-admin.kubeconfig文件访问:
提示:
更多dashboard访问方式及认证可参考《附004.Kubernetes Dashboard简介及使用》。
dashboard登录整个流程可参考:https://www.cnadn.net/post/2613.html
作者:木二
出处:http://www.cnblogs.com/itzgr/
关于作者:云计算、虚拟化,Linux,多多交流!
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接!如有其他问题,可邮件(xhy@itzgr.com)咨询。