zoukankan      html  css  js  c++  java
  • 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

    clipboard

    提示: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

    clipboard

    提示: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

    clipboard

    提示:本步骤操作仅需要在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

    clipboard

    提示:本步骤操作仅需要在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文件访问:

    clipboard

    提示:

    更多dashboard访问方式及认证可参考《附004.Kubernetes Dashboard简介及使用》。

    dashboard登录整个流程可参考:https://www.cnadn.net/post/2613.html

    clipboard

  • 相关阅读:
    ASP.NET Core的Kestrel服务器(转载)
    ASP.NET Core MVC中的IActionFilter.OnActionExecuting方法,可以获取Controller的Action方法参数值
    SQL 中常用存储过程xp_cmdshell运行cmd命令 (转载)
    SQL Server数据库中外键强制约束的好处是什么,什么时候设置外键非强制约束?(转载)
    EF Core中如何取消跟踪DbContext中所有被跟踪的实体
    c# .NET开发邮件发送功能的全面教程(含邮件组件源码)
    jquery操作select(取值,设置选中) 基础
    Visiual Studio2012 CLR20r3问题
    关于同时查询父子名称的SQL查询语句的写法 id name parentId parentName .
    Linq to SQL Like Operator
  • 原文地址:https://www.cnblogs.com/itzgr/p/11888379.html
Copyright © 2011-2022 走看看