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-apache的Deployment为例,设置 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-apache的Service,供客户端访问
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已经根据Pod的CPU使用率的提高而进行Pod自动扩容
停止负载
停止负载来结束我们的示例. 输入
# 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
更多学习文章在点击访问