如何将指标服务器部署到Kubernetes集群
Kubernetes Metrics Server是资源使用数据的群集聚合器。
其工作是从每个节点上的Kubelet曝光的摘要API中收集指标。
资源使用指标,例如Container CPU和内存使用情况有用在诊断奇怪的资源利用率时都有用。
所有这些指标都可以通过Metrics API在Kubernetes中提供。
指标API具有当前由给定节点或者给定POD使用的资源量。
由于它不存储度量标准值,因此Metrics服务器用于此目的。
部署yamls文件是在Metrics Server项目源代码中安装的。
指标服务器要求
Metrics Server对群集和网络配置具有特定要求。
这些要求不是所有群集分布的默认值。
请确保在使用Metrics服务器之前,群集分发支持这些要求:
必须从kube-apiserver到达Metrics服务器,kube-apiserver必须正确配置为启用聚合pardernode必须具有kubelet授权,配置为匹配Metrics Server ContionContainer运行时必须实现容器度量RPC
将标准服务器部署到Kubernetes
下载列表文件。
wget kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml
通过编辑文件将设置修改为喜好。
vim components.yaml
一旦我们需要自定义,需要在Kubernetes集群中部署Metrics-Server。
如果我们有多个Kubernetes集群,请切换到正确的群集:轻松使用Kubectl&Kubectx管理多个Kubernetes集群。
应用Metrics Server Manifests,可在Metrics Server上发布,使其通过URL可安装:
kubectl apply -f components.yaml
以下是正在创建的资源的输出。
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created serviceaccount/metrics-server created deployment.apps/metrics-server created service/metrics-server created clusterrole.rbac.authorization.k8s.io/system:metrics-server created clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
使用以下命令验证Metrics-Server部署是否运行所需的POD:
$kubectl get deployment metrics-server -n kube-system NAME READY UP-TO-DATE AVAILABLE AGE metrics-server 1/1 1 1 7m23s $kubectl get pods -n kube-system | grep metrics metrics-server-7cb45bbfd5-kbrt7 1/1 Running 0 8m42s
确认指标服务器处于活动状态。
$kubectl get apiservice v1beta1.metrics.k8s.io -o yaml apiVersion: apiregistration.k8s.io/v1 kind: APIService metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"apiregistration.k8s.io/v1beta1","kind":"APIService","metadata":{"annotations":{},"name":"v1beta1.metrics.k8s.io"},"spec":{"group":"metrics.k8s.io","groupPriorityMinimum":100,"insecureSkipTLSVerify":true,"service":{"name":"metrics-server","namespace":"kube-system"},"version":"v1beta1","versionPriority":100}} creationTimestamp: "2017-08-12T11:27:13Z" name: v1beta1.metrics.k8s.io resourceVersion: "130943" selfLink: /apis/apiregistration.k8s.io/v1/apiservices/v1beta1.metrics.k8s.io uid: 83c44e41-6346-4dff-8ce2-aff665199209 spec: group: metrics.k8s.io groupPriorityMinimum: 100 insecureSkipTLSVerify: true service: name: metrics-server namespace: kube-system port: 443 version: v1beta1 versionPriority: 100 status: conditions: - lastTransitionTime: "2017-08-12T11:27:18Z" message: all checks passed reason: Passed status: "True" type: Available
也可以使用kubectl top命令访问度量标准API。
这使得调试自动阶层的管道更容易。
$kubectl top --help Display Resource (CPU/Memory/Storage) usage. The top command allows you to see the resource consumption for nodes or pods. This command requires Metrics Server to be correctly configured and working on the server. Available Commands: node Display Resource (CPU/Memory/Storage) usage of nodes pod Display Resource (CPU/Memory/Storage) usage of pods Usage: kubectl top [flags] [options] Use "kubectl <command> --help" for more information about a given command. Use "kubectl options" for a list of global command-line options (applies to all commands).
要显示群集节点资源使用 - CPU/Memory/Storate将运行命令:
$kubectl top nodes NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% ip-192-168-138-244.eu-west-1.compute.internal 50m 2% 445Mi 13% ip-192-168-176-247.eu-west-1.compute.internal 58m 3% 451Mi 13%
类似的命令可以用于Pods。
$kubectl top pods -A NAMESPACE NAME CPU(cores) MEMORY(bytes) kube-system aws-node-glfrs 4m 51Mi kube-system aws-node-sgh8p 5m 51Mi kube-system coredns-6987776bbd-2mgxp 2m 6Mi kube-system coredns-6987776bbd-vdn8j 2m 6Mi kube-system kube-proxy-5glzs 1m 7Mi kube-system kube-proxy-hgqm5 1m 8Mi kube-system metrics-server-7cb45bbfd5-kbrt7 1m 11Mi
我们还可以访问使用kubectl get -raw来拉动群集中所有节点的原始资源使用度量。
$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": "ip-192-168-176-247.eu-west-1.compute.internal", "selfLink": "/apis/metrics.k8s.io/v1beta1/nodes/ip-192-168-176-247.eu-west-1.compute.internal", "creationTimestamp": "2017-08-12T11:44:41Z" }, "timestamp": "2017-08-12T11:44:17Z", "window": "30s", "usage": { "cpu": "55646953n", "memory": "461980Ki" } }, { "metadata": { "name": "ip-192-168-138-244.eu-west-1.compute.internal", "selfLink": "/apis/metrics.k8s.io/v1beta1/nodes/ip-192-168-138-244.eu-west-1.compute.internal", "creationTimestamp": "2017-08-12T11:44:41Z" }, "timestamp": "2017-08-12T11:44:09Z", "window": "30s", "usage": { "cpu": "47815890n", "memory": "454944Ki" } } ] }
其他自定义
这些是在在Kubernetes上安装Metrics Server之前可以进行的额外自定义。
设置标志
Metrics Server支持所有标准的Kubernetes API服务器标志以及标准的Kubernetes glog
记录标志。
最常用的是: --logtostderr
:记录标准错误而不是容器中的文件。
你一般想要这个。 --v=<X>
:设置日志详细程度。
除非我们遇到错误,否则运行日志级别1或者2通常是一个好主意。
在日志级别10中,将报告大量的诊断信息,包括API请求和响应主体,以及来自Kubelet的原始度量结果。 --secure-port=<port>
:设置安全端口。
如果我们未作为root运行,则我们需要将此设置为默认值以外的东西(端口443)。 --tls-cert-file
那 --tls-private-key-file
:服务证书和密钥文件。
如果未指定,将生成自签名证书。
在生产中使用非自签名证书。 --kubelet-certificate-authority
:用于验证Kubelet的服务证书的CA证书的路径。
要更改度量标准服务器行为的其他标志是: --metric-resolution=<duration>
:从kubelets刮擦度量的间隔(默认为60s)。 --kubelet-insecure-tls
:跳过验证Kubelet CA证书。 --kubelet-port
:用于连接kubelet的端口(默认到默认安全kubelet端口,10250)。 --kubelet-preferred-address-types
:连接到Kubelet时要考虑Kubelet节点地址类型。
设置节点地址类型顺序
我将修改部署列表文件以添加在连接到Kubelet时考虑不同的Kubelet节点地址类型的顺序。
vim components.yaml
修改如下:
............... containers: - name: metrics-server image: k8s.gcr.io/metrics-server-amd64:v0.3.6 args: - --cert-dir=/tmp - --secure-port=4443 - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
禁用Inecure CA证书验证
如果我们正在使用自签名证书,则可以使用-kubelet-iNecure-TLS标志来跳过验证Kubelet CA证书。
............... containers: - name: metrics-server image: k8s.gcr.io/metrics-server-amd64:v0.3.7 args: - --cert-dir=/tmp - --secure-port=4443 - --kubelet-insecure-tls - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
测试指标服务器安装
允许显示节点的资源使用 - CPU/Memory/Storage:
$kubectl top nodes NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% k8smaster01.theitroad.com 196m 4% 1053Mi 14% k8sworker01.theitroad.com 107m 2% 2080Mi 27% k8sworker02.theitroad.com 107m 2% 2080Mi 27% k8sworker03.theitroad.com 107m 2% 2080Mi 27%
我们可以为PODS做同样的事情 - 显示默认命名空间中所有窗格的指标
$kubectl top pods NAMESPACE NAME CPU(cores) MEMORY(bytes) kube-system calico-kube-controllers-5c45f5bd9f-dk8jp 1m 11Mi kube-system calico-node-4h67w 32m 27Mi kube-system calico-node-99vkm 35m 27Mi kube-system calico-node-qdqb8 21m 27Mi kube-system calico-node-sd9r8 21m 43Mi kube-system coredns-6955765f44-d4g99 2m 12Mi kube-system coredns-6955765f44-hqc4q 2m 11Mi kube-system kube-proxy-h87zf 1m 12Mi kube-system kube-proxy-lcnvx 1m 14Mi kube-system kube-proxy-x6tfx 1m 16Mi kube-system kube-proxy-xplz4 1m 16Mi kube-system metrics-server-7bd949b8b6-mpmk9 1m 10Mi
更多命令选项检查:
kubectl top pod --help kubectl top node --help