【云原生】kubernetes v1.18部署Metrics-Server:v0.3.6

news/2024/6/3 4:15:34 标签: kubernetes, 云原生, 容器

文章目录

      • 一、概述
      • 二、部署metrics-server

一、概述

介绍 Metrics Server 前首先介绍一下 Heapster,该工具是用于 Kubernetes 集群监控和性能分析工具,可以收集节点上的指标数据,例如,节点的 CPU、Memory、Network 和 Disk 的 Metric 数据。不过在 Kubernetes V1.11 版本后将被逐渐废弃。而 Metrics Server 正是 Heapster 的代替者。

Metrics Server 是 Kubernetes 集群核心监控数据的聚合器,Metrics Server 从 Kubelet 收集资源指标,并通过 Merics API 在 Kubernetes APIServer 中提供给缩放资源对象 HPA 使用。也可以通过 Metrics API 提供的 Kubectl top 查看 Pod 资源占用情况,从而实现对资源的自动缩放。

需要注意的是:

  1. metric-server提供的是实时的指标(实际是最近一次采集的数据,保存在内存中),并没有数据库来存储;
  2. 这些数据指标并非由metric-server本身采集,而是由每个节点上的cadvisor采集,metric-server只是发请求给cadvisor并将metric格式的数据转换成aggregate api;
  3. 由于需要通过aggregate api来提供接口,需要集群中的kube-apiserver开启该功能

二、部署metrics-server

  1. 创建components.yaml文件,将内容复制进去vim components.yaml
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: system:aggregated-metrics-reader
  labels:
    rbac.authorization.k8s.io/aggregate-to-view: "true"
    rbac.authorization.k8s.io/aggregate-to-edit: "true"
    rbac.authorization.k8s.io/aggregate-to-admin: "true"
rules:
- apiGroups: ["metrics.k8s.io"]
  resources: ["pods", "nodes"]
  verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: metrics-server:system:auth-delegator
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:auth-delegator
subjects:
- kind: ServiceAccount
  name: metrics-server
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: metrics-server-auth-reader
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: extension-apiserver-authentication-reader
subjects:
- kind: ServiceAccount
  name: metrics-server
  namespace: kube-system
---
apiVersion: apiregistration.k8s.io/v1beta1
kind: APIService
metadata:
  name: v1beta1.metrics.k8s.io
spec:
  service:
    name: metrics-server
    namespace: kube-system
  group: metrics.k8s.io
  version: v1beta1
  insecureSkipTLSVerify: true
  groupPriorityMinimum: 100
  versionPriority: 100
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: metrics-server
  namespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
        image: mirrorgooglecontainers/metrics-server-amd64:v0.3.6
        imagePullPolicy: IfNotPresent
        command:
        - /metrics-server
        - --kubelet-preferred-address-types=InternalIP
        - --kubelet-insecure-tls
        - --v=2
        args:
          - --cert-dir=/tmp
          - --secure-port=4443
        ports:
        - name: main-port
          containerPort: 4443
          protocol: TCP
        securityContext:
          readOnlyRootFilesystem: true
          runAsNonRoot: true
          runAsUser: 1000
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp
      nodeSelector:
        kubernetes.io/os: linux
        kubernetes.io/arch: "amd64"
---
apiVersion: v1
kind: Service
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    kubernetes.io/name: "Metrics-server"
    kubernetes.io/cluster-service: "true"
spec:
  selector:
    k8s-app: metrics-server
  ports:
  - port: 443
    protocol: TCP
    targetPort: main-port
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: system:metrics-server
rules:
- apiGroups:
  - ""
  resources:
  - pods
  - nodes
  - nodes/stats
  - namespaces
  - configmaps
  verbs:
  - get
  - list
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: system:metrics-server
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:metrics-server
subjects:
- kind: ServiceAccount
  name: metrics-server
  namespace: kube-system

网上有很多是通过从github上下载yaml文件内容,然后进行更改的,但是实际执行起来就会出现这样那样的问题,要不是镜像拉不下来,要不各种报错,这个yaml文件内容已经是经过修改的,可以直接执行,即可成功。

  1. 执行components.yaml
kubectl apply -f components.yaml
  1. 验证Metrics Server组件部署成功
  • 查看原生apiserver是否有metrics.k8s.io/v1beta1
[root@k8s-master1 ~]# kubectl api-versions|grep metrics
metrics.k8s.io/v1beta1

可以看到metrics.k8s.io/v1beta1群组已经注册到原生apiserver上。

  • 查看metrics server pod是否运行正常
[root@k8s-master1 ~]# kubectl get pods -n kube-system |grep metrics
metrics-server-5dfbdf76fd-hrjdl       1/1     Running   1          12h

可以看到对应pod已经正常运行,接着查看pod日志kubectl logs -f pod/[pod名称] -n kube-system,只要metrics server pod没有出现错误日志,或者无法注册等信息,就表示pod里的容器运行正常。

  • 使用kubectl top 命令查看pod的cpu ,内存占比,看看对应命令是否可以正常执行。
[root@k8s-master1 ~]# kubectl top nodes
NAME          CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
k8s-master1   295m         7%     866Mi           11%
k8s-master2   273m         6%     1147Mi          14%
k8s-master3   233m         5%     669Mi           8%
k8s-node1     92m          2%     483Mi           6%

http://www.niftyadmin.cn/n/229087.html

相关文章

说走就走的旅行?你需要一个旅行必备清单

可能很多朋友都不用清单这个东西,更别说清单模版了。那清单真的好用吗?说实话,当你真的用清单来整理自己的日常工作,乃至生活琐事后,你就会发现你的时间多了,想要完成的事,大部分都可以按时完成…

工作中经常使用shell脚本

在工作中我们常用shell脚本处理一些问题,今天在来一些这里整理了一些工作中常用的简单shell脚本。 1.更新脚本 #!/bin/bash apt-get update DEBIAN_FRONTEND=noninteractive apt-get -y upgrade # 更新软件包并自动升级 2.文件夹同步 #!/bin/bash SRC_DIR=/home/user/fo…

第八回:如何使用Stack Widget

文章目录概念介绍使用方法示例代码我们在上一章回中介绍了GirdView Widget,本章回中将介绍 Stack这种Widget,闲话休提,让我们一起Talk Flutter吧。概念介绍 在Flutter中Stack主要用来叠加显示其它的Widget,类似我们日常生活中的楼层或者说PS…

1 Go语言开发环境搭建详细教程【Go语言教程】

Go语言开发环境搭建【Win、Linux、Mac】 1 SDK下载 官网地址:golang.org,因为一些原因国内可能无法访问。可以使用下面第二个链接。国内地址访问:https://golang.google.cn/dl或者https://www.golangtc.com/download 根据自己操作系统版本,下…

数据结构刷题笔记 | 数组、字符串、链表、栈、队列、数、图

本篇为笔者学习数据结构时,在牛客网站的刷题笔记。 数据结构分为: 逻辑结构【面向问题的】 集合结构线性结构(一对一)树形结构(一对多的层次关系)图形结构(多对多) 物理结构&#x…

银行数字化转型导师坚鹏:银行数字化转型痛点、路径与对策

银行数字化转型痛点、路径与对策课程背景: 很多银行存在以下问题: 不知道银行数字化转型? 不清楚数字化转型对银行发展有什么影响? 不知道数字化转型对银行有什么机遇? 学员收获: 学习银行数字化转型的发展现状与成…

python os模块获取文件路径

1、# 获取当前工作目录的上一级目录 dir_path os.path.dirname(os.path.abspath(.)) 2、获取当前路径: # 获取当前脚本文件的绝对路径 script_path os.path.abspath(__file__)# 获取程序所在目录 dir_path os.path.dirname(script_path)3、获取当前路径的文件名…

可以顺畅使用不输Chatgpt的AI

一前言 虽然chatgpt不错,但是如果在咱们国家,想使用起来还是有一定的门槛的,又要科学上网,又要申请账号,申请账号还要申请虚拟手机号接收验证码,难道就没有适合普通人使用的AI了吗,直到我发现了…