• 附017.Kubernetes_v1.17.4 Dashboard部署


    一 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
    clipboard
    提示: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/
    clipboard
    附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
    clipboard
    [root@k8smaster01 ~]# kubectl top pods --all-namespaces
    clipboard
    提示: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监控方案

  • 相关阅读:
    POJ 3304 计算几何 直线与线段相交
    POJ 2653 计算几何 判断线段相交
    POJ 1066 计算几何 线段相交
    关于git的一些有用的链接
    Cloudera是个什么东西
    Data Structure for phone book
    向大家推荐一个C/C++通用Makefile
    关于gcc/g++的include路径和其他一些路径问题
    volatile 和 sig_atomic_t
    分布式文件系统虚拟目录及命名空间的实现方法
  • 原文地址:https://www.cnblogs.com/itzgr/p/13140168.html
Copyright © 2020-2023  润新知