惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
宝玉的分享
宝玉的分享
量子位
Recent Announcements
Recent Announcements
Martin Fowler
Martin Fowler
J
Java Code Geeks
V
Visual Studio Blog
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
S
SegmentFault 最新的问题
B
Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 【当耐特】
小众软件
小众软件
The Cloudflare Blog
Y
Y Combinator Blog
I
InfoQ
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
GbyAI
GbyAI
IT之家
IT之家

博客园 - 勤劳の洗碗机

pyinstaller打包exe故障解析 curl 访问k8s api statefulset 及storageclass hadoop 伪分布式 完全分布式 及HA部署 LDAP部署及实践 docker 制作自己的mysql镜像 k8s 压测工具之perf-test mysql相关(三)、主从复制 shell执行mysql脚本 分布式minio image-syncer 误删libc.so.6文件补救 docker 使用bind 动态扩容pvc k8s备份工具之velero jmeter使用 docker 制作ssh镜像 docker 制作自定义的nginx镜像 docker部署sharding-proxy
k8s 之HPA应用
勤劳の洗碗机 · 2020-12-02 · via 博客园 - 勤劳の洗碗机

1、创建测试deployment

apiVersion: v1
kind: Service
metadata:
  name: my-app
  namespace: default
spec:
  type: NodePort
  selector: 
    app: my-app
    release: canary
  ports:
  - name: http
    nodePort: 30327
    port: 80
  
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deploy
  namespace: default
spec:
  replicas: 3
  selector: 
    matchLabels:
      app: my-app
      release: canary
  template:
    metadata:
      labels:
        app: my-app
        release: canary
    spec:
      containers:
      - name: my-app
        image: ikubernetes/myapp:v2
        ports: 
        - name: http
          containerPort: 80
        resources:
requests:
cpu: 128m
memory: 128Mi
limits:
cpu: 128m
memory: 128Mi
kubectl create -f app.yaml
[root@10 ingress]#  kubectl get pod | grep my-app
my-app-deploy-76f86b954b-5r5n7                                    1/1     Running            0          3m25s
my-app-deploy-76f86b954b-8n2dp                                    1/1     Running            0          3m25s
my-app-deploy-76f86b954b-d95d8                                    1/1     Running            0          3m25s
[root@10 ingress]# kubectl get svc | grep my-app 
my-app                                                NodePort       192.168.192.192   <none>        80:30327/TCP                                                   3m29s
[root@10 ingress]# 

2、创建HPA

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: my-app-hpa # 名称
  namespace: default #k8s命名空间
spec:
  maxReplicas: 10  # 最大副本数
  minReplicas: 3   # 最小副本数
  scaleTargetRef:   
    apiVersion: apps/v1beta1
    kind: Deployment  
    name: my-app-deploy   # 监控名为my-app-deploy的Deployment
  targetCPUUtilizationPercentage: 20  # cpu 阈值
kubectl create -f hap.yaml

[root@10 zhangpan]# kubectl get hpa
NAME         REFERENCE                  TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
my-app-hpa   Deployment/my-app-deploy   <unknown>/80%   2         10        3          77s
[root@10 zhangpan]# 

也可以直接用命令创建hpa

kubectl autoscale deployment myapp --min=2 --max=10 --cpu-percent=20

如果出现unknown,可以查看原始deployment的resource有没有设置cpu的限制,或者没有找到deployment,也有可能是由于heapster组件没有安装,也有可能是数据没有检测到,默认heapster采集时间为1分,需要稍等一会看一下状态。

可以用kubectl describe hpa my-app-hpa 查看具体原因

正常后显示如下:

[root@10 zhangpan]# kubectl get hpa
NAME         REFERENCE                  TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
my-app-hpa   Deployment/my-app-deploy   0%/20%    2         10        2          6m29s
[root@10 zhangpan]#