https://zhuanlan.zhihu.com/p/415594861
https://zhuanlan.zhihu.com/p/379361295
https://www.cnblogs.com/larrydpk/p/14953946.html 比较好
https://github.com/kedacore/keda
https://blog.csdn.net/qq_50573146/article/details/124925310 生产环境中HPA的使用注意事项
其它HPA参考Crane EHPA https://blog.csdn.net/yunxiao6/article/details/126666885
keda支持以下metrics
一、下载和安装方法:
mkdir /data/keda -p
cd /data/keda
wget https://github.com/kedacore/keda/releases/download/v2.7.1/keda-2.7.1.yaml
kubectl apply -f keda-2.7.1.yaml
#以下两个yaml文件为测试作准备
wget https://raw.githubusercontent.com/LarryDpk/pkslow-samples/master/kubernetes/keda/src/main/kubernetes/deploy-consumer.yaml
wget https://raw.githubusercontent.com/LarryDpk/pkslow-samples/master/kubernetes/keda/src/main/kubernetes/deploy-publisher-job.yaml
二、部暑(以rabbitmq进行测试)
#添加 kubernetes-dashboard helm chart
helm repo add bitnami https://charts.bitnami.com/bitnami
# 更新下仓库
helm repo update
#指定变量
pro=rabbitmq
chart_version=9.1.4
mkdir -p /data/$pro
cd /data/$pro
#下载charts
helm pull bitnami/$pro --version=$chart_version
#提取values.yaml文件
tar zxvf $pro-$chart_version.tgz --strip-components 1 $pro/values.yaml
cat > /data/$pro/start.sh << EOF
helm upgrade --create-namespace --install --wait $pro $pro-$chart_version.tgz \
-f values.yaml \
-n base
EOF
- 配置values.yaml
#选择部分配置
auth:
username: rabbitmq
password: "Rabbitmq123456"
erlangCookie: "34534flkWERfs223S23dqaEE"
replicaCount: 1
resources:
requests:
cpu: 1000m
memory: 2Gi
persistence:
enabled: false #当有存储卷时设置为true
ingress:
enabled: true
hostname: rabbitmq.kids.cn
#需要关闭两个health,不然启动不成功
livenessProbe:
enabled: true
readinessProbe:
enabled: true
metrics:
enabled: true
- 启动
bash /data/rabbitmq/start.sh
- 验证
kubectl get all -n base
NAME READY STATUS RESTARTS AGE
pod/rabbitmq-0 1/1 Running 0 16m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/rabbitmq ClusterIP 10.128.125.10 <none> 5672/TCP,4369/TCP,25672/TCP,15672/TCP 16m
service/rabbitmq-headless ClusterIP None <none> 4369/TCP,5672/TCP,25672/TCP,15672/TCP 16m
NAME READY AGE
statefulset.apps/rabbitmq 1/1 16m
三、验证keda
cat > rabbit-comsuer.yaml << 'EOF'
apiVersion: v1
kind: Secret
metadata:
name: rabbitmq-consumer-secret
namespace: base
data:
RabbitMqHost: YW1xcDovL3JhYmJpdG1xOlJhYmJpdG1xMTIzNDU2QHJhYmJpdG1xLmJhc2Uuc3ZjLmNsdXN0ZXIubG9jYWw6NTY3Mg==
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: rabbitmq-consumer
namespace: base
labels:
app: rabbitmq-consumer
spec:
selector:
matchLabels:
app: rabbitmq-consumer
template:
metadata:
labels:
app: rabbitmq-consumer
spec:
containers:
- name: rabbitmq-consumer
image: jeffhollan/rabbitmq-client:dev
imagePullPolicy: Always
command:
- receive
args:
- "amqp://rabbitmq:Rabbitmq123456@rabbitmq.base.svc.cluster.local:5672"
---
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: rabbitmq-consumer
namespace: base
spec:
scaleTargetRef:
name: rabbitmq-consumer
pollingInterval: 5 # Optional. Default: 30 seconds
cooldownPeriod: 30 # Optional. Default: 300 seconds
maxReplicaCount: 30 # Optional. Default: 100
triggers:
- type: rabbitmq
metadata:
queueName: hello
queueLength: "5"
authenticationRef:
name: rabbitmq-consumer-trigger
---
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
name: rabbitmq-consumer-trigger
namespace: base
spec:
secretTargetRef:
- parameter: host
name: rabbitmq-consumer-secret
key: RabbitMqHost
EOF
kubectl apply -f rabbit-comsuer.yaml
cat > /data/rabbitmq/rabbitmq-publisher.yaml << 'EOF'
apiVersion: batch/v1
kind: Job
metadata:
name: rabbitmq-publish
namespace: base
spec:
template:
spec:
containers:
- name: rabbitmq-client
image: jeffhollan/rabbitmq-client:dev
imagePullPolicy: Always
command: ["send", "amqp://rabbitmq:Rabbitmq123456@rabbitmq.base.svc.cluster.local:5672", "3000000"]
restartPolicy: Never
backoffLimit: 4
EOF
kubectl apply -f rabbitmq-publisher.yaml
- 创建了很30个consumer进行消费
HPA查询,pod已扩容到30个