09-4.部署 metrics-server 插件

09-4.部署 metrics-server 插件

创建 metrics-server 使用的证书

创建 metrics-server 证书签名请求:

cat > metrics-server-csr.json <<EOF
{
  "CN": "aggregator",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "k8s",
      "OU": "4Paradigm"
    }
  ]
}
EOF
  • 注意: CN 名称为 aggregator,需要与 kube-apiserver 的 --requestheader-allowed-names 参数配置一致;

生成 metrics-server 证书和私钥:

cfssl gencert -ca=/etc/kubernetes/cert/ca.pem   -ca-key=/etc/kubernetes/cert/ca-key.pem    -config=/etc/kubernetes/cert/ca-config.json    -profile=kubernetes metrics-server-csr.json | cfssljson -bare metrics-server

将生成的证书和私钥文件拷贝到 kube-apiserver 节点:

source /opt/k8s/bin/environment.sh
for node_ip in ${NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    scp metrics-server*.pem [email protected]${node_ip}:/etc/kubernetes/cert/
  done

修改 kubernetes 控制平面组件的配置以支持 metrics-server

kube-apiserver

添加如下配置参数:

--requestheader-client-ca-file=/etc/kubernetes/cert/ca.pem
--requestheader-allowed-names=""
--requestheader-extra-headers-prefix="X-Remote-Extra-"
--requestheader-group-headers=X-Remote-Group
--requestheader-username-headers=X-Remote-User
--proxy-client-cert-file=/etc/kubernetes/cert/metrics-server.pem
--proxy-client-key-file=/etc/kubernetes/cert/metrics-server-key.pem
--runtime-config=api/all=true
  • --requestheader-XXX--proxy-client-XXX 是 kube-apiserver 的 aggregator layer 相关的配置参数,metrics-server & HPA 需要使用;
  • --requestheader-client-ca-file:用于签名 --proxy-client-cert-file--proxy-client-key-file 指定的证书;在启用了 metric aggregator 时使用;
  • 如果 --requestheader-allowed-names 不为空,则--proxy-client-cert-file 证书的 CN 必须位于 allowed-names 中,默认为 aggregator;

如果 kube-apiserver 机器没有运行 kube-proxy,则还需要添加 --enable-aggregator-routing=true 参数;

关于 --requestheader-XXX 相关参数,参考:

注意:requestheader-client-ca-file 指定的 CA 证书,必须具有 client auth and server auth;

kube-controllr-manager

添加如下配置参数:

--horizontal-pod-autoscaler-use-rest-clients=true

用于配置 HPA 控制器使用 REST 客户端获取 metrics 数据。

整体架构

修改插件配置文件配置文件

metrics-server 插件位于 kubernetes 的 cluster/addons/metrics-server/ 目录下。

修改 metrics-server-deployment 文件:

$ cp metrics-server-deployment.yaml{,.orig}
$ diff metrics-server-deployment.yaml.orig metrics-server-deployment.yaml
51c51
<         image: mirrorgooglecontainers/metrics-server-amd64:v0.2.1
---
>         image: k8s.gcr.io/metrics-server-amd64:v0.2.1
54c54
<         - --source=kubernetes.summary_api:‘‘
---
>         - --source=kubernetes.summary_api:https://kubernetes.default?kubeletHttps=true&kubeletPort=10250
60c60
<         image: siriuszg/addon-resizer:1.8.1
---
>         image: k8s.gcr.io/addon-resizer:1.8.1
  • metrics-server 的参数格式与 heapster 类似。由于 kubelet 只在 10250 监听 https 请求,故添加相关参数;

授予 kube-system:metrics-server ServiceAccount 访问 kubelet API 的权限:

$ cat auth-kubelet.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: metrics-server:system:kubelet-api-admin
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:kubelet-api-admin
subjects:
- kind: ServiceAccount
  name: metrics-server
  namespace: kube-system
  • 新建一个 ClusterRoleBindings 定义文件,授予相关权限;

创建 metrics-server

$ pwd
/opt/k8s/kubernetes/cluster/addons/metrics-server
$ ls -l *.yaml
-rw-rw-r-- 1 k8s k8s  398 Jun  5 07:17 auth-delegator.yaml
-rw-rw-r-- 1 k8s k8s  404 Jun 16 18:02 auth-kubelet.yaml
-rw-rw-r-- 1 k8s k8s  419 Jun  5 07:17 auth-reader.yaml
-rw-rw-r-- 1 k8s k8s  393 Jun  5 07:17 metrics-apiservice.yaml
-rw-rw-r-- 1 k8s k8s 2640 Jun 16 17:54 metrics-server-deployment.yaml
-rw-rw-r-- 1 k8s k8s  336 Jun  5 07:17 metrics-server-service.yaml
-rw-rw-r-- 1 k8s k8s  801 Jun  5 07:17 resource-reader.yaml
$ kubectl create -f .

查看运行情况

$ kubectl get pods -n kube-system |grep metrics-server
metrics-server-v0.2.1-7486f5bd67-v95q2   2/2       Running   0          45s

$ kubectl get svc -n kube-system|grep metrics-server
metrics-server         ClusterIP   10.254.115.120   <none>        443/TCP         1m

查看 metrcs-server 输出的 metrics

metrics-server 输出的 APIs:https://github.com/kubernetes/community/blob/master/contributors/design-proposals/instrumentation/resource-metrics-api.md

  1. 通过 kube-apiserver 或 kubectl proxy 访问:

    https://192.168.1.106:6443/apis/metrics.k8s.io/v1beta1/nodes
    https://192.168.1.106:6443/apis/metrics.k8s.io/v1beta1/nodes/
    https://192.168.1.106:6443/apis/metrics.k8s.io/v1beta1/pods
    https://192.168.1.106:6443/apis/metrics.k8s.io/v1beta1/namespace//pods/

  2. 直接使用 kubectl 命令访问:

    kubectl get --raw apis/metrics.k8s.io/v1beta1/nodes
    kubectl get --raw apis/metrics.k8s.io/v1beta1/pods
    kubectl get --raw apis/metrics.k8s.io/v1beta1/nodes/
    kubectl get --raw apis/metrics.k8s.io/v1beta1/namespace//pods/

$ kubectl get --raw "/apis/metrics.k8s.io/v1beta1" | jq .
{
  "kind": "APIResourceList",
  "apiVersion": "v1",
  "groupVersion": "metrics.k8s.io/v1beta1",
  "resources": [
    {
      "name": "nodes",
      "singularName": "",
      "namespaced": false,
      "kind": "NodeMetrics",
      "verbs": [
        "get",
        "list"
      ]
    },
    {
      "name": "pods",
      "singularName": "",
      "namespaced": true,
      "kind": "PodMetrics",
      "verbs": [
        "get",
        "list"
      ]
    }
  ]
}

$ kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes" | jq .
{
  "kind": "NodeMetricsList",
  "apiVersion": "metrics.k8s.io/v1beta1",
  "metadata": {
    "selfLink": "/apis/metrics.k8s.io/v1beta1/nodes"
  },
  "items": [
    {
      "metadata": {
        "name": "kube-node3",
        "selfLink": "/apis/metrics.k8s.io/v1beta1/nodes/kube-node3",
        "creationTimestamp": "2018-06-16T10:24:03Z"
      },
      "timestamp": "2018-06-16T10:23:00Z",
      "window": "1m0s",
      "usage": {
        "cpu": "133m",
        "memory": "1115728Ki"
      }
    },
    {
      "metadata": {
        "name": "kube-node1",
        "selfLink": "/apis/metrics.k8s.io/v1beta1/nodes/kube-node1",
        "creationTimestamp": "2018-06-16T10:24:03Z"
      },
      "timestamp": "2018-06-16T10:23:00Z",
      "window": "1m0s",
      "usage": {
        "cpu": "221m",
        "memory": "6799908Ki"
      }
    },
    {
      "metadata": {
        "name": "kube-node2",
        "selfLink": "/apis/metrics.k8s.io/v1beta1/nodes/kube-node2",
        "creationTimestamp": "2018-06-16T10:24:03Z"
      },
      "timestamp": "2018-06-16T10:23:00Z",
      "window": "1m0s",
      "usage": {
        "cpu": "76m",
        "memory": "1130180Ki"
      }
    }
  ]
}
  • /apis/metrics.k8s.io/v1beta1/nodes 和 /apis/metrics.k8s.io/v1beta1/pods 返回的 usage 包含 CPU 和 Memory;

链接:https://www.orchome.com/1203
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文地址:https://www.cnblogs.com/linux20190409/p/10977007.html

时间: 2024-10-10 03:06:36

09-4.部署 metrics-server 插件的相关文章

Kubernetes1.15.2集群部署并部署Metrics Server插件

环境信息: 操作系统 主机名 IP地址 CentOS 7.6 k8s-master 192.168.31.61 CentOS 7.6 k8s-node1 192.168.31.62 CentOS 7.6 k8s-node2 192.168.31.63 1. 安装要求 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 操作系统 CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多 集群中所有机器之间网络互通 可以访问外网,需要

k8s Metrics Server 获取资源指标与 hpa 部署

使用 helm 部署 Metrics Server helm repo add bitnami https://charts.bitnami.com/bitnami helm install bitnami/metrics-server 会有报错,执行以下命令 helm upgrade loopy-saola bitnami/metrics-server --set apiService.create=true $ kubectl get pod 查看节点 loopy-saola-metrics

启用k8s metrics server监控

1.创建aggregator证书 方法一:直接使用二进制源码包安装 $ wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 $ chmod +x cfssl_linux-amd64 $ mv cfssl_linux-amd64 /usr/local/bin/cfssl $ wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 $ chmod +x cfssljson_linux-amd64 $

SSMS2008插件开发(3)--部署调试SSMS2008插件

原文:SSMS2008插件开发(3)--部署调试SSMS2008插件 上一次说到VS2008中的插件开发,最终结果插件是部署在VS2008中,现在我们将插件部署到SSMS2008(Microsoft Sql Server Management Studio 2008)中.可以参考一下这里. 打开上一次的项目MySSMSAddin,右"解决方案资源管理器"中右击该项目,选择"属性",进入该项目的属性设置界面.在"应用程序"选项卡中,将"程

部署vCenter Server的一些经验与问题

vCenter Server是vSphere虚拟化数据中心的管理服务器,其重要性不言而明.本文就vCenter Server 6部署的一些问题进行总结,希望对你有所帮助. 1 部署 vCenter Server Appliance时"客户端集成插件"问题 从vCenter Server Appliance 6.0开始,VMware改变了部署vCenter Server Appliance 的方式,vSphere不再支持使用 vSphere Client 或 vSphere Web Cl

VMware、安装部署vCenter Server

一.vCenter Server简介 1.vCenter Server简介        vSphere的两个核心组件是ESXi和vCenter Server.ESXi是用于创建和运行虚拟设备的虚拟化平台,vCenter Server是一种服务,充当连接到网络的ESXi主机的中心管理员.vCenter Server可用于将多个主机的资源加入池中并管理这些资源. 2.vCenter Server组件和服务 vCenter Server 6.0分为两个部分:        VMware Platfo

部署 nagios nrdp 插件过程中遇到的问题总结

在ubuntu 14.04 系统探索部署 nagios nrdp 插件过程中,遇到如下问题? 测试 http: ip /nrdp/ 提交结果的页面中,总是报如下错误: <result> <status>-1</status> <message>BAD COMMAND FILE</message> </result> <result> <status>-1</status> <message&g

kubeadm1.14.1 安装Metrics Server

Metrics API 介绍Metrics-Server之前,必须要提一下Metrics API的概念 Metrics API相比于之前的监控采集方式(hepaster)是一种新的思路,官方希望核心指标的监控应该是稳定的,版本可控的,且可以直接被用户访问(例如通过使用 kubectl top 命令),或由集群中的控制器使用(如HPA),和其他的Kubernetes APIs一样. 官方废弃heapster项目,就是为了将核心资源监控作为一等公民对待,即像pod.service那样直接通过api-

System Center 2012 R2 CM系列之部署Windows Server Update Services(WSUS)服务器

1. Windows更新服务器(Windows Server Update Service (WSUS))介绍 1) 技术概述: Windows Server Update Services (WSUS) 启用信息技术管理员部署最新的 Microsoft 产品更新.在 Windows Server 2012 中,WSUS 是可安装以管理和分配更新的服务器角色.WSUS 服务器可以作为组织内其他 WSUS 服务器的更新源.充当更新源的 WSUS 服务器被称为上游服务器.在 WSUS 实现过程中,网

如何部署Windows Server 2016 中的Storage Spaces Direct超聚合解决方案

客户环境: Component   Detail Platform Dell  PowerEdge R730xd (2U, 16 x 3.5" and 2 x 2.5" rear drives) CPU 2 x 338-BJCZ  Intel Xeon CPU E5-2620 v4 @2.10GHz Memory 8 x  16 GB RDIMM, 2400MT/s, Dual rank, x8 Data Width OS  drive 200GB  SSD NDC Intel  X5