k8s 自动伸缩 pod(HPA)
上一篇简单说了一下使用 kubeadm 安装 k8s。今天说一下 k8s 的一个神奇的功能:HPA (Horizontal Pod Autoscaler)。
HPA 依赖 metrics-server 获取 pod 的指标。所以我们要先安装 metrics-server 插件。
1. metrics-server 安装
1.1 下载 yaml 文件和 image
1 2 3 4 5 6 7 | # 在 k8s master 节点执行 mkdir metrics-server cd metrics-server wget https: //github .com /kubernetes-sigs/metrics-server/releases/download/v0 .3.7 /components .yaml docker pull ninejy /metrics-server :v0.3.7 docker tag ninejy /metrics-server :v0.3.7 k8s.gcr.io /metrics-server/metrics-server :v0.3.7 |
1.2 安装
1 2 3 4 5 6 7 | # 修改 components.yaml 文件,在 args 下面添加以下两行内容,不校验证书,不然会报 x509 错误 - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP - --kubelet-insecure-tls kubectl apply -f components.yaml kubectl get pod -n kube-system # 列出的 pod 中有 metrics-server-xxxxxxx,并且是 Running状态,就说明 metrics-server 安装好了 |
1.3 问题
此时执行命令 `kubectl top nodes` 应该不会有结果。查看metrics-server pod 的日志,会有找不到主机 k8s-master01,k8s-node01的错误。这是因为主机名、IP的映射关系是我们在 hosts 文件里写的。需要在 coredns 的配置中加上这两个主机名、IP的对应关系记录。
1 2 3 4 5 6 7 | kubectl edit configmap coredns -n kube-system # 添加以下内容,然后 按键盘 Esc 输入 :wq 保存退出 hosts { 192.168.0.3 k8s-master01 192.168.0.6 k8s-node01 fallthrough } |
之后再执行 `kubectl top nodes` 就应该会有类似下图内容了
这样 metrics-server 就算安装好了。
2. 测试 HPA
2.1 deploymet/service/hpa yaml 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | # cat hpa-cpu.yaml apiVersion: apps /v1 kind: Deployment metadata: name: deployment-hpa-cpu spec: replicas: 1 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: ninejy /hpacpu :latest ports: - containerPort: 8080 resources: limits: cpu: 50m memory: 10Mi requests: cpu: 50m memory: 10Mi --- apiVersion: v1 kind: Service metadata: name: myapp namespace: default spec: type : ClusterIP selector: app: myapp ports: - name: http port: 80 targetPort: 8080 --- apiVersion: autoscaling /v1 kind: HorizontalPodAutoscaler metadata: name: deployment-hpa-cpu namespace: default spec: maxReplicas: 5 minReplicas: 1 scaleTargetRef: apiVersion: apps /v1 kind: Deployment name: deployment-hpa-cpu targetCPUUtilizationPercentage: 80 |
这里我们限制每个 pod 最多使用一核 cpu 的 50/1000,当 pod 使用 cpu 的百分比大于最大限制的 80% 就会触发 pod 扩容,最多扩展到 5 个 pod.
2.2 创建 deploymet/service/hpa
1 | kubectl apply -f hpa-cpu.yaml |
2.3 测试 HPA
1 2 3 4 5 6 7 8 | # 开三个 k8s-master01 窗口,分别执行下面三条命令 watch kubectl get pods watch kubectl top pods ip=$(kubectl get svc | grep myapp | awk '{print $3}' ) for i in ` seq 1 100000`; do curl $ip?a=$i; done |
切换窗口查看,过一会就会有 pod 数量增加,说明 HPA 生效了。停掉 curl 的那条命令,过一会,pod 数量又会恢复到 1 个了。
以上就是 k8s HPA 的基本使用。HPA 也可以使用内存和其他自定义的指标,也可以组合使用。根据这些指标的值和设定的阈值进行 pod 的数量的增减。
更多内容可以参考 k8s 官网:
https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗