基于阿里云组件指标的容器水平伸缩

文章目录

    • 前置条件:
    • 操作:
      • step1:创建nginx的deployment
      • step2:创建hpa
      • step3:查看ingress的相关指标
      • step4:创建ingress路由
      • step5:压测访问
    • 分析:

前置条件:

1、阿里云ack集群
2、已配置安装好ingress的日志
参考链接:
https://help.aliyun.com/document_detail/151555.html

操作:

以nginx服务为例

step1:创建nginx的deployment

cat nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
spec:
  ports:
    - port: 80
      protocol: TCP
      targetPort: 80
  selector:
    app: nginx
  type: ClusterIP
kubectl apply -f nginx-deployment.yaml

基于阿里云组件指标的容器水平伸缩_第1张图片

step2:创建hpa

cat nginx-hpa.yaml

apiVersion: autoscaling/v2beta2   #v1只支持cpu和内存,v2支持自定义指标
kind: HorizontalPodAutoscaler
metadata:
  name: ingress-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: External
      external:
        metric:
          name: sls_ingress_qps
          selector:
            matchLabels:
              sls.project: "ex-beta"   #日志服务的日志库名称,必填。
              sls.logstore: "nginx-ingress"  #日志服务的Project名称,必填。
              sls.ingress.route: "default-nginx-80"  #必填,参数的格式为:
<namespace>-<svc>-<port>,例如default-nginx-80
        target:
          type: AverageValue
          averageValue: 1
    - type: External
      external:
        metric:
          name: sls_ingress_latency_p9999
          selector:
            matchLabels:
              # default ingress log project is k8s-log-clusterId
              sls.project: "ex-beta"
              # default ingress logstre is nginx-ingress
              sls.logstore: "nginx-ingress"
              # namespace-svc-port
              sls.ingress.route: "default-nginx-80"
              # sls vpc endpoint, default true
              # sls.internal.endpoint:true
        target:
          type: Value
          # sls_ingress_latency_p9999 > 10ms
          value: 1

step3:查看ingress的相关指标

kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/" | grep sls_ingress_qps
kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/" | grep sls_ingress_latency_p9999

step4:创建ingress路由

目的是通过ingress路由访问的请求流转到sls中的ingress-nginx中,进而为hpa获取数值做铺垫。

1> 阿里云界面创建路由
基于阿里云组件指标的容器水平伸缩_第2张图片
在这里插入图片描述
2> 访问测试
基于阿里云组件指标的容器水平伸缩_第3张图片

step5:压测访问

压测中

压测中的ingress的大盘展示

压测结束

静默期过后,pod会自动收缩
基于阿里云组件指标的容器水平伸缩_第4张图片

分析:

如果hpa服务正常,但是压测一直没反应,需要排查
第一、查看sls的ingress-nginx日志,查看是否有日志
第二、ingress的概览界面,然后通过浏览器的’检查’(windows是F12)-网络-然后查看alibaba-log-configuration.json,查看配置的logstore是否是我们在nginx-hpa/.yaml中配置的,如果不一样,显然是hpa中配置错误。

都到这儿了,更多文章,详见个人微信公众号ALL In Linux,来扫一扫吧!
基于阿里云组件指标的容器水平伸缩_第5张图片

你可能感兴趣的:(k8s,k8s)