kubernetes1.9部署metrics-server0.3.1、dashboard、heapster

10 篇文章 0 订阅
3 篇文章 0 订阅
简介

K8S从1.8版本开始,CPU、内存等资源的metrics信息可以通过 Metrics API来获取,用户可以直接获取这些metrics信息(例如通过执行kubect top命令),HPA使用这些metics信息来实现动态伸缩。本文介绍K8S集群基于metric server的HPA。在开始之前我们需要了解一下Metrics API和Metrics Server。

Metrics API:

1、通过Metrics API我们可以获取到指定node或者pod的当前资源使用情况,API本身不存储任何信息,所以我们不可能通过API来获取资源的历史使用情况。
2、Metrics API的获取路径位于:/apis/metrics.k8s.io/
3、获取Metrics API的前提条件是metrics server要在K8S集群中成功部署
4、更多的metrics资料请参考:https://github.com/kubernetes/metrics

Metrics server:

1、Metrics server是K8S集群资源使用情况的聚合器
2、从1.8版本开始,Metrics server默认可以通过kube-up.sh 脚本以deployment的方式进行部署,也可以通过yaml文件的方式进行部署
3、Metrics server收集所有node节点的metrics信息
heapster 已经被废弃了,后续版本中会使用 metrics-server代替,不过kubenetes如果是1.10之前的版本,使用Metrics Server 还是要和heapster 配合的。k8s v1.10版本之前仍然要通过heapster获取指标数据,否则即使部署了metrics-server,kubectl top这个指令仍然连接heapster

官网部署方法
git clone https://github.com/kubernetes-incubator/metrics-server
cd metrics-server
kubectl create -f deploy/1.8+/
kubectl -n kube-system get pods -l k8s-app=metrics-server
我的实际部署步骤
下载文件
[root@master01 1.8+]# ll
total 28
-rw-r--r-- 1 root root  384 Apr  9 14:03 aggregated-metrics-reader.yaml
-rw-r--r-- 1 root root  308 Apr  9 14:03 auth-delegator.yaml
-rw-r--r-- 1 root root  329 Apr  9 14:03 auth-reader.yaml
-rw-r--r-- 1 root root  298 Apr  9 14:03 metrics-apiservice.yaml
-rw-r--r-- 1 root root 1099 Apr 10 10:15 metrics-server-deployment.yaml
-rw-r--r-- 1 root root  249 Apr  9 14:03 metrics-server-service.yaml
-rw-r--r-- 1 root root  517 Apr 10 10:14 resource-reader.yaml
images

可以使用 registry.cn-beijing.aliyuncs.com/minminmsn/metrics-server:v0.3.1 感谢作者^^!
Dockerfile文件地址:https://github.com/minminmsn/k8s1.13/blob/master/metrics-server/Dockerfile

修改metrics-server-deployment.yaml
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: metrics-server
  namespace: kube-system
---
apiVersion: extensions/v1beta1
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: registry.cn-beijing.aliyuncs.com/minminmsn/metrics-server:v0.3.1  ## 修改镜像地址
        imagePullPolicy: Always
        command: ##新增
        - /metrics-server ##新增
        - --metric-resolution=30s ##新增
        - --kubelet-insecure-tls ##新增
        - --kubelet-preferred-address-types=InternalIP ##新增
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp
修改 resource-reader.yaml
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: system:metrics-server
rules:
- apiGroups:
  - ""
  resources:
  - pods
  - nodes
  - nodes/stats ##新增
  - namespaces  ##新增 
  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
部署
kubectl create -f .
报错
I0109 05:55:43.708300       1 serving.go:273] Generated self-signed cert (apiserver.local.config/certificates/apiserver.crt, apiserver.local.config/certificates/apiserver.key)
Error: cluster doesn't provide requestheader-client-ca-file

解决方法 开启聚合层,Enable apiserver flags,修改kube-apiserver配置,重启服务

[root@elasticsearch01 cfg]# tail /k8s/kubernetes/cfg/kube-apiserver
--etcd-cafile=/k8s/etcd/ssl/ca.pem \
--etcd-certfile=/k8s/etcd/ssl/server.pem \
--etcd-keyfile=/k8s/etcd/ssl/server-key.pem \
--requestheader-client-ca-file=/k8s/kubernetes/ssl/ca.pem \
--requestheader-allowed-names=aggregator \
--requestheader-extra-headers-prefix=X-Remote-Extra- \
--requestheader-group-headers=X-Remote-Group \
--requestheader-username-headers=X-Remote-User \
--proxy-client-cert-file=/k8s/kubernetes/ssl/kube-proxy.pem \
--proxy-client-key-file=/k8s/kubernetes/ssl/kube-proxy-key.pem"
(重点)修改kube-apiservice和kube-controller-manager.service开启聚合层

证书要准备好,我的证书(搭建k8s环境时候会生成证书,找到证书是难点。或者网上查找证书生成步骤、这里我不做多步骤啦):

[root@master01 heapster]# ll /etc/kubernetes/ssl/*
-rw-r--r-- 1 kube kube 1415 Apr 10 15:34 /etc/kubernetes/ssl/ca.pem  ##根证书
-rw------- 1 kube kube 1679 Apr  4  2018 /etc/kubernetes/ssl/kubernetes-client-proxy-key.pem ##proxy的key文件
-rw-r--r-- 1 kube kube 1562 Apr  4  2018 /etc/kubernetes/ssl/kubernetes-client-proxy.pem ##proxy的证书文件

注意证书的权限!!! 我的是kube用户chown kube:kube /etc/kubernetes/ssl
将这三个证书分发到其他node节点 scp etc/kubernetes/ssl/* node01:/etc/kubernetes/ssl

kube-apiservice文件:

新增以下几行

--requestheader-client-ca-file=/etc/kubernetes/ssl/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/ssl/kubernetes-client-proxy.pem   --proxy-client-key-file=/etc/kubernetes/ssl/kubernetes-client-proxy-key.pem  --runtime-config=api/all=true  --enable-aggregator-routing=true"
kube-controller-manager.service文件

新增一行:--horizontal-pod-autoscaler-use-rest-clients=true

 systemctl daemon-reload
 systemctl  restart kube-apiserver.service
 systemctl  restart kube-controller-manager

确认启动成功后重新部署etrics-server0.3.1

cd 1.8+/
kubectl create -f .
kubectl get pod,svc -n kube-system
[root@master01 1.8+]# kubectl  get pod -n kube-system 
NAME                                      READY     STATUS    RESTARTS   AGE
metrics-server-57596fd464-ms2zp           1/1       Running   0          39m
部署heapster

kubenetes 1.10后废弃了,k8s v1.10版本之前仍然要通过heapster获取指标数据,否则即使部署了metrics-server,kubectl top这个指令仍然连接heapster

创建heapster.yaml
[root@master01 heapster]# cat heapster.yaml 
apiVersion: v1
kind: ServiceAccount
metadata:
  name: heapster
  namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: heapster
subjects:
  - kind: ServiceAccount
    name: heapster
    namespace: kube-system
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: heapster
  namespace: kube-system
spec:
  replicas: 1
  template:
    metadata:
      labels:
        task: monitoring
        k8s-app: heapster
    spec:
      serviceAccountName: heapster
      containers:
      - name: heapster
        image: harbor.reg/qijin_product/heapster-amd64:v1.4.3
        imagePullPolicy: IfNotPresent
        command:
        - /heapster
       # - --source=kubernetes:https://kubernetes.default
       # - --sink=influxdb:http://monitoring-influxdb.kube-system.svc:8086
        - --source=kubernetes:http://10.1.11.11:8080?inClusterConfig=false  ##api-server 机器IP和端口
        - --sink=influxdb:http://monitoring-influxdb:8086
---
apiVersion: v1
kind: Service
metadata:
  labels:
    task: monitoring
    # For use as a Cluster add-on (https://github.com/kubernetes/kubernetes/tree/master/cluster/addons)
    # If you are NOT using this as an addon, you should comment out this line.
    kubernetes.io/cluster-service: 'true'
    kubernetes.io/name: Heapster
  name: heapster
  namespace: kube-system
spec:
  ports:
  - port: 80
    targetPort: 8082
  selector:
    k8s-app: heapster

如果要持久化数据还要安装influxdb,yaml文件去链接:https://pan.baidu.com/s/1WjCSZ9wQzJQ4Q0PCxXogZw 密码:6wtd下载

获取v1beta1.metrics.k8s.io并验证
[root@master01 1.8+]# kubectl get apiservice
NAME                                    AGE
v1.                                     1y
v1.apps                                 1y
v1.authentication.k8s.io                1y
v1.authorization.k8s.io                 1y
v1.autoscaling                          1y
v1.batch                                1y
v1.networking.k8s.io                    1y
v1.rbac.authorization.k8s.io            1y
v1.storage.k8s.io                       1y
v1alpha1.admissionregistration.k8s.io   1h
v1alpha1.rbac.authorization.k8s.io      1h
v1alpha1.scheduling.k8s.io              1h
v1alpha1.settings.k8s.io                1h
v1alpha1.storage.k8s.io                 1h
v1beta1.admissionregistration.k8s.io    1y
v1beta1.apiextensions.k8s.io            1y
v1beta1.apps                            1y
v1beta1.authentication.k8s.io           1y
v1beta1.authorization.k8s.io            1y
v1beta1.batch                           1y
v1beta1.certificates.k8s.io             1y
v1beta1.events.k8s.io                   1y
v1beta1.extensions                      1y
v1beta1.metrics.k8s.io                  40m  ### 说明部署成功
v1beta1.policy                          1y
v1beta1.rbac.authorization.k8s.io       1y
v1beta1.storage.k8s.io                  1y
v1beta2.apps                            1y
v2alpha1.batch                          1h
v2beta1.autoscaling                     1y


[root@master01 1.8+]# kubectl get apiservice v1beta1.metrics.k8s.io -o yaml 
apiVersion: apiregistration.k8s.io/v1beta1
kind: APIService
metadata:
  creationTimestamp: 2019-04-10T08:40:19Z
  name: v1beta1.metrics.k8s.io
  resourceVersion: "41675073"
  selfLink: /apis/apiregistration.k8s.io/v1beta1/apiservices/v1beta1.metrics.k8s.io
  uid: 459dc419-5b6c-11e9-bac9-005056b678c1
spec:
  caBundle: null
  group: metrics.k8s.io
  groupPriorityMinimum: 100
  insecureSkipTLSVerify: true
  service:
    name: metrics-server
    namespace: kube-system
  version: v1beta1
  versionPriority: 100
status:
  conditions:
  - lastTransitionTime: 2019-04-10T08:40:24Z
    message: all checks passed
    reason: Passed
    status: "True"
    type: Available
通过kubectl工具测试获取metrics数据
yum -y install jq
kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes" | jq

在这里插入图片描述
稍等一下查看pod的使用资源

[root@beta-k8s-master-1 ~]# kubectl top node
NAME              CPU(cores)   CPU%      MEMORY(bytes)   MEMORY%   
beta-k8s-node-1   131m         1%        7413Mi          46%       
beta-k8s-node-2   198m         2%        11421Mi         72%       
beta-k8s-node-3   219m         2%        10914Mi         69%       

[root@beta-k8s-master-1 ~]# kubectl top pod
NAME                                                CPU(cores)   MEMORY(bytes)   
frm-eureka-profile-a1-794995f789-fp5sd   18m          1731Mi                    
部署dashboard

下载地址:
链接:https://pan.baidu.com/s/18PTR648nYQQWEXBWasLamg 密码:gunr

最后上成果图

在这里插入图片描述
在这里插入图片描述

Kubernetes (k8s) 的 Metrics-Server 是一个独立的组件,用于收集和存储集群内各个节点和Pod的监控指标,如CPU、内存、网络I/O等。在 Kubernetes 1.24 版本部署 Metrics-Server,你可以按照以下步骤操作: 1. **安装依赖**: - 确保你的系统已经安装了 Kubernetes 工具(kubectl 和 kubelet),并且有可用的 API Server。 2. **获取镜像**: - 可以从官方 Docker Hub 获取 Metrics-Server 的镜像,例如 `gcr.io/k8s-minikube/metrics-server:v0.5.1` 或者最新的稳定版本。 3. **创建服务账户**: ```yaml apiVersion: v1 kind: ServiceAccount metadata: name: metrics-server namespace: kube-system ``` 4. **应用角色绑定**: ```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: metrics-server-cluster-rule subjects: - kind: ServiceAccount name: metrics-server namespace: kube-system spec: roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-reader ``` 5. **创建 Deployment**: 使用以下 YAML 配置文件(替换 `<image>` 为你需要的镜像名称): ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: metrics-server namespace: kube-system spec: replicas: 1 selector: matchLabels: app: metrics-server template: metadata: labels: app: metrics-server spec: serviceAccountName: metrics-server containers: - name: metrics-server image: <image> ports: - containerPort: 443 args: ["--kubelet-insecure-tls", "--kubelet-preferred-address-types=InternalIP"] ``` 6. **检查部署**: ``` kubectl apply -f metrics-server-deployment.yaml kubectl get pods -n kube-system | grep metrics-server ``` 7. **验证配置**: 检查 Metrics-Server 是否正常运行并能访问集群资源: ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值