专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Kubernetes学习指南(三)--Pod水平自动伸缩

Kubernetes学习指南(三)–Pod水平自动伸缩

Pod 水平自动伸缩(Horizontal Pod Autoscaler)特性, 可以基于CPU利用率自动伸缩 replication controller、deployment和 replica set 中的 pod 数量,(除了 CPU 利用率)也可以 基于其他应程序提供的度量指标


安装指标收集组件Metrics server

下载项目

## 没有安装 git 要先安装
# yum install git -y

git clone https://github.com/kubernetes-sigs/metrics-server.git

添加参数

vim metrics-server/deploy/1.8+/metrics-server-deployment.yaml

      containers:
      - name: metrics-server
        image: k8s.gcr.io/metrics-server-amd64:v0.3.6
## 添加下面几行
        command:
          - /metrics-server
          - --kubelet-insecure-tls
          - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP
          - --v=2

开始安装

# kubectl apply -f metrics-server/deploy/1.8+/

clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
serviceaccount/metrics-server created
deployment.apps/metrics-server created
service/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created

或者直接使用修改完成的版本

kubectl apply -f https://raw.githubusercontent.com/charSLee013/Kubernetes-learn/master/chapter03/metrics-server-1.8.yaml

查看机器的负载情况

#kubectl top node
NAME        CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
master001   131m         13%    1166Mi          67%
node1       78m          7%     922Mi           53%
node2       80m          8%     934Mi           53%


创建自动扩容和缩容Pod

下面通过为一个Deployment设置HPA,然后使用一个客户端为其进行压力测试,对HPA的用法进行实例

php-apacheDeployment为例,设置 cpu request = 200m,未设置 limit 上限的值

cat  <<EOF > php-apache-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  replicas: 1
  selector:
    matchLabels:
      app: php-apache
  template:
    metadata:
      name: php-apache
      labels:
        app: php-apache
    spec:
      containers:
        - image: k8s.gcr.io/hpa-example
          name: php-apache
          ports:
          - containerPort: 80
            protocol: TCP
          resources:
            requests:
              cpu: 200m
EOF

kubectl apply -f php-apache-deployment.yaml

再创建一个php-apacheService,供客户端访问

cat <<EOF >php-apache-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: php-apache
spec:
  ports:
    - port: 80
  selector:
    app: php-apache
EOF

kubectl apply -f php-apache-service.yaml

创建一个HPA控制器

使 Pod 的副本数量在维持在1到10之间 大致来说,HPA 将通过增加或者减少 Pod 副本的数量(通过 Deployment )以保持所有 Pod 的平均CPU利用率在50%以内

cat <<EOF >php-apache-hpa.yaml
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
EOF

kubectl apply -f php-apache-hpa.yaml

查看已经创建的HPA

# kubectl get hpa
NAME         REFERENCE               TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   <unknown>/50%   1         10        0          10s

创建前30秒CPU指标都是 如果超过时间后还是 ,检查下metrics-server 是否运行成功

小提示

## 下面这条命令可以实时监控HPA负载情况
watch -n 1 kubectl get hpa


开始负载

另外启动一个容器,并通过一个循环向 php-apache 服务器发送无限的查询请求

kubectl run -i --tty load-generator --image=busybox /bin/sh

while true; do wget -q -O- http://php-apache; done

或者直接对Service的虚拟ClusterIP地址进行访问

# kubectl get svc php-apache

NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
php-apache   ClusterIP   10.96.173.5   <none>        80/TCP    21m

## 增加负载
while true; do wget -q -O- http://10.96.173.5; done

过几分钟后,可以观察到HPA控制器收集到的Pod CPU使用率

NAME         REFERENCE               TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   448%/50%   1         10        1          23m

再过一会查看下php-apache的副本数量变化

# kubectl get deployment php-apache

NAME         READY   UP-TO-DATE   AVAILABLE   AGE
php-apache   6/9     9            6           3m18s

可以查看HPA已经根据PodCPU使用率的提高而进行Pod自动扩容

停止负载

停止负载来结束我们的示例. 输入 + C / + C 来终止负载 然后等待几分钟后查看负载情况

# kubectl get hpa

NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   1%/50%   1         10        1          31m

可以看到HPA根据Pod CPU使用率的降低对副本数量进行了缩容操作


一键安装metrics server命令

kubectl apply -f https://raw.githubusercontent.com/charSLee013/Kubernetes-learn/master/chapter03/metrics-server-1.8.yaml

一键构建测试环境

kubectl apply -f https://raw.githubusercontent.com/charSLee013/Kubernetes-learn/master/chapter03/test-php-apache-hpa.yaml


更多学习文章在点击访问

文章永久链接:https://tech.souyunku.com/44184

未经允许不得转载:搜云库技术团队 » Kubernetes学习指南(三)--Pod水平自动伸缩

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们