通过HPA进行Pod水平弹性伸缩
1. 创建实验资源
开始实验之前,您需要先创建云服务器ECS和ACK集群资源。
说明:在实验资源创建过程中,ECS会安装命令行工具kubectl并连接ACK集群,方便您在后续实验中通过ECS中的Kubernetes命令行工具kubectl来管理ACK集群以及应用。
- 在实验室页面,单击创建资源。
- (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、用户信息等)。
说明:资源创建过程需要7~10分钟。
2. 安装组件ack-alibaba-cloud-metrics-adapter
本步骤指导您如何通过容器服务管理控制台在k8s集群中,安装组件ack-alibaba-cloud-metrics-adapter。
- 双击打开远程桌面的Chromium网页浏览器。
- 在RAM用户登录框中单击下一步,并复制粘贴页面左上角的子用户密码到用户密码输入框,单击登录。
- 复制下方地址,在Firefox浏览器打开新页签,粘贴并访问容器服务管理控制台。
https://cs.console.aliyun.com/
- 在集群列表页面,找到云起实验室分配给您的集群资源,单击集群ID。
说明:您可以在云产品资源列表中查看到实验室分配给您的集群资源。
- 在左侧导航栏中,选择市场>应用市场。
- 在应用市场页面的应用目录区域,应用场景选择弹性伸缩。
- 在应用市场页面的应用目录区域,单击ack-alibaba-cloud-metrics-adapter。
- 在ack-alibaba-cloud-metrics-adapter页面,单击右上角的一键部署。
- 在创建面板中,集群选择为云起实验室为您分配的集群资源,单击下一步。
说明:您可以在云产品资源列表中查看到实验室分配给您的集群资源。
- 在创建面板中,单击确定。
- 在左侧导航栏中,选择应用>Helm。
返回如下页面,您可以看到状态为已部署,表示ack-alibaba-cloud-metrics-adapter已成功部署。
3. 部署Nginx Deploymenet应用
本步骤指导你如何部署Nginx Deployment应用到k8s集群中,并使用Ingress实现Nginx Deployment应用的外部访问。
- 在实验室页面右侧的功能栏中,单击图标,切换至Web Terminal。
- 执行如下命令,创建名为nginx-deployment-svc.yaml的YAML文件。
vi nginx-deployment-svc.yaml
- 按i键进入编辑模式,将如下代码复制到文件中。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment-basic labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginx spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: ClusterIP
- 按ECS键退出编辑模式,输入:wq,然后回车保存并退出文件。
- 执行如下命令,部署Deployement应用。
kubectl apply -f nginx-deployment-svc.yaml
- 执行如下命令,创建名为nginx-svc-ingress.yaml的Ingress YAML文件。
vi nginx-svc-ingress.yaml
- 按i键进入编辑模式,将如下代码复制到文件中,并将hots参数中的集群id修改为k8s集群id。
说明:您可在云产品资源列表中查看k8s集群id。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nginx-handsonack labels: app: my-app spec: rules: - host: nginx.集群id.cn-shanghai.alicontainer.com http: paths: - backend: service: name: nginx port: number: 80 path: / pathType: Prefix
- 按ECS键退出编辑模式,输入:wq,然后回车保存并退出文件。
- 执行如下命令,部署Ingress资源。
kubectl apply -f nginx-svc-ingress.yaml
- 将如下命令中的集群id修改为k8s集群id,并执行,进行测试。
说明:您可在云产品资源列表中查看k8s集群id。
curl nginx.集群id.cn-shanghai.alicontainer.com
返回结果如下,表示您Deployment应用部署成功。
4. 部署HPA水平扩缩策略
本步骤指导您如何为Nginx Deployment应用部署HPA水平扩缩策略。
- 执行如下命令,创建名为nginx-hpa.yaml的YAML文件。
vi nginx-hpa.yaml
- 按i键进入编辑模式,将如下代码复制到文件中。并将两个sls.project参数中的集群id修改为k8s集群id。
说明:您可在云产品资源列表中查看k8s集群id。
apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: ingress-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx-deployment-basic minReplicas: 2 maxReplicas: 10 metrics: - type: External external: metric: name: sls_ingress_qps selector: matchLabels: # default ingress log project is k8s-log-clusterId sls.project: "k8s-log-集群id" # default ingress logstre is nginx-ingress sls.logstore: "nginx-ingress" # namespace-svc-port sls.ingress.route: "default-nginx-80" target: type: AverageValue averageValue: 10 - type: External external: metric: name: sls_ingress_latency_p9999 selector: matchLabels: # default ingress log project is k8s-log-clusterId sls.project: "k8s-log-集群id" # 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:ture target: type: Value # sls_ingress_latency_p9999 > 10ms value: 10
参数说明:
sls_ingress_qps与sls_ingress_latency_p9999是本实验实现伸缩使用的两个指标。在target的type中:
- 为sls_ingress_qps设置的是AverageValue,表示QPS要除以Pod的数目进行判断。
- 为sls_ingress_latency_p9999设置的是Value,表示无需除以Pod的数目。
- 按ECS键退出编辑模式,输入:wq,然后回车保存并退出文件。
- 执行如下命令,下发HPA策略。
kubectl apply -f nginx-hpa.yaml
- 执行如下命令,查看HPA状态。
kubectl get hpa
返回结果如下,您可查看到HPA状态。
5. 通过ab工具进行压测
本步骤指导您如何使用ab工具进行压测,并观察Nginx Deployment应用的HPA状态、pods数量和状态。
- 执行如下命令,安装ab工具。
yum install httpd-tools -y
- 将如下命令中的集群id修改为k8s集群id,并执行,进行压测。
说明:您可在云产品资源列表中查看k8s集群id。
ab -t 300 -c 10 nginx.集群id.cn-shanghai.alicontainer.com/
- 执行如下命令,查看HPA状态。
kubectl get hpa
返回结果如下,您可查看到HPA状态。
- 查看pods数量和状态。
kubectl get pods
返回结果如下,您可查看到Nginx deployment已经根据阿里云指标进行了HPA弹性伸缩。
实验链接:https://developer.aliyun.com/adc/scenario/f09ade45b65844aabe5c00ee64a33897