K8S集群基于metrics server的HPA测试 原创 ylw6006 2018-05-09 12:06:23 博主文章分类:Kubernetes ©著作权 文章标签 k8s hpa metrics server metrics 文章分类 运维 ©著作权归作者所有:来自51CTO博客作者ylw6006的原创作品,请联系作者获取转载授权,否则将追究法律责任 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 # cd yaml/heapster-influxdb/ # kubectl delete -f . 二、生成证书文件 这些证书文件主要用在Metrics API aggregator 上 # cat front-proxy-ca-csr.json { "CN": "kubernetes", "key": { "algo": "rsa", "size": 2048 } } # cat front-proxy-client-csr.json { "CN": "front-proxy-client", "key": { "algo": "rsa", "size": 2048 } } # cfssl gencert -initca front-proxy-ca-csr.json | cfssljson -bare front-proxy-ca # cfssl gencert -ca=front-proxy-ca.pem \ -ca-key=front-proxy-ca-key.pem \ -cOnfig=/etc/kubernetes/ca-config.json \ -profile=kubernetes \ front-proxy-client-csr.json | cfssljson -bare front-proxy-client # mv front-proxy* /etc/ssl/kubernetes # scp -rp /etc/ssl/kubernetes vm2:/etc/ssl/kubernetes # scp -rp /etc/ssl/kubernetes vm3:/etc/ssl/kubernetes 三、修改Master配置文件 1、kube-apiserver # cat /usr/lib/systemd/system/kube-apiserver.service [Unit] Description=Kubernetes API Server Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=network.target [Service] ExecStart=/usr/local/sbin/kube-apiserver \ --admission-cOntrol=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota \ --advertise-address=192.168.115.5 \ --bind-address=192.168.115.5 \ --insecure-bind-address=127.0.0.1 \ --authorization-mode=Node,RBAC \ --runtime-cOnfig=rbac.authorization.k8s.io/v1alpha1 \ --kubelet-https=true \ --enable-bootstrap-token-auth=true \ --token-auth-file=/etc/kubernetes/token.csv \ --service-cluster-ip-range=10.254.0.0/16 \ --service-node-port-range=8400-9000 \ --tls-cert-file=/etc/ssl/kubernetes/kubernetes.pem \ --tls-private-key-file=/etc/ssl/kubernetes/kubernetes-key.pem \ --client-ca-file=/etc/ssl/etcd/ca.pem \ --service-account-key-file=/etc/ssl/etcd/ca-key.pem \ --etcd-cafile=/etc/ssl/etcd/ca.pem \ --etcd-certfile=/etc/ssl/kubernetes/kubernetes.pem \ --etcd-keyfile=/etc/ssl/kubernetes/kubernetes-key.pem \ --etcd-servers=https://192.168.115.5:2379,https://192.168.115.6:2379,https://192.168.115.7:2379 \ --enable-swagger-ui=true \ --allow-privileged=true \ --apiserver-count=3 \ --audit-log-maxage=30 \ --audit-log-maxbackup=3 \ --audit-log-maxsize=100 \ --audit-log-path=/var/lib/audit.log \ --event-ttl=1h \ --requestheader-client-ca-file=/etc/ssl/kubernetes/front-proxy-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=/etc/ssl/kubernetes/front-proxy-client.pem \ --proxy-client-key-file=/etc/ssl/kubernetes/front-proxy-client-key.pem \ --runtime-cOnfig=api/all=true \ --enable-aggregator-routing=true \ --v=2 Restart=on-failure RestartSec=5 Type=notify LimitNOFILE=65536 [Install] WantedBy=multi-user.target 2、kube-control-manager # cat /usr/lib/systemd/system/kube-controller-manager.service [Unit] Description=Kubernetes Controller Manager Documentation=https://github.com/GoogleCloudPlatform/kubernetes [Service] ExecStart=/usr/local/sbin/kube-controller-manager \ --address=127.0.0.1 \ --master=http://127.0.0.1:8080 \ --allocate-node-cidrs=true \ --service-cluster-ip-range=10.254.0.0/16 \ --cluster-cidr=172.30.0.0/16 \ --cluster-name=kubernetes \ --cluster-signing-cert-file=/etc/ssl/etcd/ca.pem \ --cluster-signing-key-file=/etc/ssl/etcd/ca-key.pem \ --service-account-private-key-file=/etc/ssl/etcd/ca-key.pem \ --root-ca-file=/etc/ssl/etcd/ca.pem \ --leader-elect=true \ --v=2 \ --horizontal-pod-autoscaler-use-rest-clients=true Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target 3、重启服务 # systemctl daemon-reload # systemctl restart kube-apiserver.service # systemctl restart kube-controller-manager 四、部署metrics-server 1、下载docker镜像,并纳入本地仓库统一管理 # docker pull gcr.io/google_containers/metrics-server-amd64:v0.2.1 # docker tag gcr.io/google_containers/metrics-server-amd64:v0.2.1 \ registry.59iedu.com/google_containers/metrics-server-amd64:v0.2.1 # docker push registry.59iedu.com/google_containers/metrics-server-amd64:v0.2.1 2、获取yaml文件并修改 # git clone https://github.com/stefanprodan/k8s-prom-hpa # cd k8s-prom-hpa/ # cat metrics-server/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 containers: - name: metrics-server image: registry.59iedu.com/google_containers/metrics-server-amd64:v0.2.1 imagePullPolicy: Always volumeMounts: - mountPath: /etc/ssl/kubernetes/ name: ca-ssl command: - /metrics-server - --source=kubernetes.summary_api:'' - --requestheader-client-ca-file=/etc/ssl/kubernetes/front-proxy-ca.pem volumes: - name: ca-ssl hostPath: path: /etc/ssl/kubernetes # cat metrics-server/metrics-server-service.yaml apiVersion: v1 kind: Service metadata: name: metrics-server namespace: kube-system labels: kubernetes.io/name: "Metrics-server" spec: selector: k8s-app: metrics-server ports: - port: 443 protocol: TCP targetPort: 443 nodePort: 8499 type: NodePort 3、通过yaml文件创建对应的资源 # kubectl create -f ./metrics-server # kubectl get pod,svc -n kube-system 4、获取v1beta1.metrics.k8s.io并验证 # kubectl get apiservice # kubectl get apiservice v1beta1.metrics.k8s.io -o yaml 5、通过kubectl工具测试获取metrics数据 # wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm # rpm -ivh epel-release-latest-7.noarch.rpm # yum -y install jq # kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes" | jq 6、查看apiserver的日志信息 # journalctl -u kube-apiserver -f |grep metrics 五、创建HPA与测试 1、通过yaml文件创建hpa 设置tomcat-shopxx deployment的最大最小副本数,HPA对应的pod CPU和内存指标 # kubectl get hpa # kubectl get pod,svc # cd yaml/tomcat/ # cat hpa.yaml apiVersion: autoscaling/v2beta1 kind: HorizontalPodAutoscaler metadata: name: tomcat-shopxx-hpa spec: scaleTargetRef: apiVersion: extensions/v1beta1 kind: Deployment name: tomcat-shopxx minReplicas: 1 maxReplicas: 3 metrics: - type: Resource resource: name: cpu targetAverageUtilization: 80 - type: Resource resource: name: memory targetAverageValue: 200Mi # kubectl create -f hpa.yaml 2、获取HPA信息 # kubectl get hpa # kubectl describe hpa tomcat-shopxx-hpa 3、观察HPA自动扩展过程中的kube-controller-manager的日志 # journalctl -u kube-controller-manager -f # kubectl get hpa # kubectl get pod,deployment 下文将介绍基于prometheus实现自定义metrics的hpa,尽情关注! 参考: https://github.com/kubernetes-incubator/metrics-server https://kubernetes.io/docs/tasks/debug-application-cluster/core-metrics-pipeline/ https://www.cnblogs.com/fengjian2016/p/8819657.html 赞 收藏 评论 分享 举报 上一篇:K8S集群基于heapster的HPA测试 下一篇:K8S集群使用自定义metrics指标HPA测试 提问和评论都可以,用心的回复会被更多人看到 评论 发布评论 全部评论 () 最热 最新 相关文章 【k8s】搭建Kubernetes(k8s)集群出现NotReady的处理 k8s安装,节点一直处于NotReady状态,下载CNI插件处理 服务器 k8s Kubernetes rancher集群获取k8s的token 一、概述在使用Kubernetes(简称K8S)集群进行容器编排时,我们需要使用Token来进行身份认证和访问控制。Rancher是一个开源的容器管理平台,可以帮助我们快速构建和管理K8S集群。本文将介绍如何在Rancher集群中获取K8S的Token。二、步骤概览下表展示了获取K8S Token的步骤概览:步骤操作1登录到Rancher集群2打开目标集群的"项目"页面3点击"访问控制"选项卡4创 访问控制 示例代码 代码示例 k8s中部署etcd集群 yaml文件kind: StorageClassapiVersion: storage.k8s.io/v1metadata: name: local-storageprovisioner: kubernetes.io/no-provisionervolumeBindingMode: WaitForFirstConsumer---apiVersion: v1kind: Persi Pod etcd k8s K8S HPA 基于 Prometheus Metrics 自动扩展是一种根据资源使用情况自动扩展或缩小工作负载的方法。Kubernetes中的自动缩放有两个维度:Cluster Autoscaler处理节点扩展操作,Horizontal Pod... 运维 kubernetes docker java 编程语言 K8S集群基于heapster的HPA测试 本文将介绍基于heapster获取metric的HPA配置。在开始之前,有必要先了解一下K8S的HPA特性。1、HPA全称HorizontalPodAutoscaling,即pod的水平自动扩展。自动扩展主要分为两种,其一为水平扩展,针对于实例数目的增减;其二为垂直扩展,即单个实例可以使用的资源的增减。HPA属于前者。2、HPA是Kubernetes中实现POD水平自动伸缩的功能。云计算具有水平弹 k8s hpa heapster K8S集群使用自定义metrics指标HPA测试 本文介绍使用基于prometheus的自定义metric进行HPA。一般来说,前文介绍的根据CPU和内存做metric进行HPA就已经满足了绝大多数应用场景。现在主流公有云产商的弹性伸缩服务支持的metric类型也较为丰富。以华为云的弹性伸缩服务为例,指标主要涵盖:CPU、内存、网络、磁盘这些资源层面。针对应用级别的就比较少见了,因此本文将介绍基于http请求访问次数的HPA。一、创建pormet hpa custom k8s prometheus K8S集群基于metrics K8S集群基于metrics的实现流程如下所示:步骤 | 操作 | 代码示例----|-----|--------1 | 在K8S集群中部署metrics服务器 | `kubectl create -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml`该命令 应用程序 数据 代码示例 Kubernetes基于Metrics Server的HPA Kubernetes基于MetricsServer的HPA[TOC]1.环境说明和相关介绍我的kubernetes环境:kubeadm安装的kubernetes1.11HorizontalPodAutoscaler(HPA,Pod水平自动伸缩),根据资源利用率或者自定义指标自动调整replicationcontroller、deployment或replicaset,实现部署的自动扩展和缩减,让部 kubernetes hpa 基于metrics-server的HPA 基于metrics-server的HPA HPA metrics-server k8s metrics server # 从零开始学习Kubernetes Metrics Server作为一名经验丰富的开发者,你可能已经听说过Kubernetes Metrics Server,它是一个用于收集和存储Kubernetes集群中资源使用情况的工具。今天,我将会向你介绍如何实现Kubernetes Metrics Server。首先,让我们看一下整个过程的步骤:| 步骤 | 描述 Server bash github k8s安装metrics-server [root@k8s-n0 kubesphere-install]# pwd/opt/kubesphere-install[root@k8s-n0 kubesphere-install]# cat metrics-server/metrics-server.yaml ---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRole k8s k8s集群安装metrics 如何安装和配置Kubernetes(k8s)集群的Metrics======================================为了监控和分析Kubernetes集群的性能和健康状况,我们可以安装和配置Metrics Server。Metrics Server是一个Kubernetes组件,它收集和聚合集群中各种资源(如节点、Pod、容器等)的指标数据。在本文中,我将向你展示如何 Server Pod 正常运行 【K8S】K8s部署Metrics-Server服务 写在前面在新版的K8S中,系统资源的采集均使用Metrics-Server服务,可以通过Metrics-Server服务采集节点和Pod的内存、磁盘、CPU和网络的使用率等信息。读者可参考《【K8S】基于单Master节点安装K8S集群》一文搭建单Master节点的K8S集群。说的具体点:新版K8S资源使用情况的度量(如容器的 CPU 和内存使用)可以通过 Metrics API 获取... K8S 集群 k8s之核心指标API Metrics-Server部署及HPA Metrics-server简介Metrics-server是用来替换heapster获取集群上资源指标数据的,heapster从1.11开始逐渐被废弃了。在使用heapster时,获取资源指标是由heapster自已获取的,heapster有自已的获取路径,没有通过apiserver,后来k8s引入了资源指标API(MetricsAPI),于是资源指标的数据就从k8s的api中的直接获取,不必再 metrics-server metrics Metrics HPA kubernetes核心指标API k8s的metrics Kubernetes (K8S) 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。在K8S中,metrics 是一个非常有用的功能,可以用来监控和度量集群中的各种资源使用情况。在本篇文章中,我将向您介绍如何实现 K8S 的 metrics。### 流程概述以下是实现 K8S 的 metrics 的整个流程:| 步骤 | 描述 || ------ | ------ | 数据 bash Server k8s metrics-server 部署 监控 metrics-serverwget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yamlsed -i "s#k8s.gcr.io/metrics-server#registry.cn-hangzhou.aliyuncs.com/chenby#g" compon sed github vim k8s删除metrics-server # 从Kubernetes集群中删除metrics-server当您在使用Kubernetes集群时,可能会遇到一些需要删除已安装的组件的情况。metrics-server是Kubernetes中一个用于收集和存储集群指标数据的组件,如果您需要删除metrics-server,下面将详细介绍如何操作。## 操作步骤下面是删除metrics-server的操作步骤:| 步骤 bash Deployment YAML k8s集群节点维度HPA 在实际工作中,随着业务的不断发展,我们常常需要做一些扩容缩容操作。在node维度上,可以通过对特定的指标进行监控,在业务访问高峰期时对相应的资源进行扩容,并在业务高峰期结束后,再对已扩容资源进行缩容,从而避免资源的浪费。一、实现原理以阿里云主机为例,此方案适用于以云主机为基础搭建的K8s集群:1)准备适量已做好节点初始化的机器,并设置kubelet开机自启动(因为开机后会自动启动kubelet,从 选择器 云主机 最小值 k8s metrics 在Kubernetes(K8S)中,监控Kubernetes集群的性能和健康状况是至关重要的。为了实现这一目标,我们可以使用Kubernetes Metrics Server来收集和暴露集群的度量数据。本文将介绍如何实现K8S指标收集,以便进行后续的监控和分析。首先,让我们来了解一下整个实现K8S Metrics的流程:| 步骤 | 操作 ||------|------|| 1 | Server 数据 正常运行 k8s的hpa应用 K8S的HPA应用作为一名经验丰富的开发者,我将教你如何在Kubernetes(K8S)中应用Horizontal Pod Autoscaler(HPA)来自动调整部署的副本数量,确保应用程序能够灵活地响应流量的变化。下面是整个流程的步骤:| 步骤 | 操作 || ---- | ---- || 1 | 创建Deployment || 2 | 创建HorizontalPodAutosc Deployment Pod 应用程序