跳转至

1. 在luffy命名空间创建nginx的deploy资源

0. 创建hpa目录

mkdir -p /k8s/hpa/nginx
cd /k8s/hpa/nginx

1. 创建基于nginx的deployment的yaml文件

vim deploy-nginx.yaml
########################################

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: luffy
spec:
  replicas: 1   #指定Pod副本数
  selector:             #指定Pod的选择器
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:   #给Pod打label
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: 100Mi
            cpu: 50m
          limits:
            memory: 500Mi
            cpu: 100m

2. 创建nginx的svc

vim svc-nginx.yaml
###########################

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: luffy
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: ClusterIP

3. 创建nginx资源

kubectl apply -f .

4. 查看pod

kubectl -n luffy get pod
root@k8s-master:/k8s/hpa/nginx# vim deploy-nginx.yaml
root@k8s-master:/k8s/hpa/nginx#
root@k8s-master:/k8s/hpa/nginx# vim svc-nginx.yaml
root@k8s-master:/k8s/hpa/nginx#
root@k8s-master:/k8s/hpa/nginx# kubectl apply -f .
deployment.apps/nginx created
service/nginx created
root@k8s-master:/k8s/hpa/nginx# kubectl -n luffy get pod
NAME                           READY   STATUS    RESTARTS   AGE
nginx-79585d8b96-fx8th         1/1     Running   0          10s

2. 测试hpa动态扩容

1. 创建deployment的hpa

cd /k8s/hpa/nginx
vim hpa-nginx.yaml
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-nginx
  namespace: luffy
spec:
  maxReplicas: 3
  minReplicas: 1
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx
  metrics:
    - type: Resource
      resource:
        name: memory
        target:
          type: Utilization
          averageUtilization: 80
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 20

2. 生成hpa

kubectl apply -f hpa-nginx.yaml
kubectl -n luffy get hpa
root@k8s-master:/k8s/hpa/nginx# vim hpa-nginx.yaml
root@k8s-master:/k8s/hpa/nginx#
root@k8s-master:/k8s/hpa/nginx# kubectl apply -f hpa-nginx.yaml
horizontalpodautoscaler.autoscaling/hpa-nginx created
root@k8s-master:/k8s/hpa/nginx#
root@k8s-master:/k8s/hpa/nginx# kubectl -n luffy get hpa
NAME        REFERENCE          TARGETS                        MINPODS   MAXPODS   REPLICAS   AGE
hpa-nginx   Deployment/nginx   <unknown>/80%, <unknown>/20%   1         3         0          8s

3. 验证:

1. 切换到slave节点或其他机器操作

2. 安装压力测试工具

#slave1节点

#安装ab命令
sudo apt-get install apache2-utils

3. 查看service的IP

#master

#查看svcIP
kubectl -n luffy get svc nginx
root@k8s-master:/k8s/hpa/nginx# kubectl -n luffy get svc nginx
NAME    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
nginx   ClusterIP   10.106.50.133   <none>        80/TCP    3m58s

4. 手动将deployment副本数调为1

# 为了更快看到效果,先调整副本数为1
kubectl -n luffy scale deploy nginx --replicas=1

5. 监控hpa状态

#master节点

# 查看hpa状态
kubectl -n luffy get hpa -w
root@k8s-master:/k8s/hpa/nginx# kubectl -n luffy get hpa -w
NAME        REFERENCE          TARGETS          MINPODS   MAXPODS   REPLICAS   AGE
hpa-nginx   Deployment/nginx   2%/80%, 0%/20%   1         3         1          3m51s

6. 监控pod数量

#查看pod数量
kubectl -n luffy get pod -w
root@k8s-master:~# kubectl -n luffy get pod -w
NAME                           READY   STATUS    RESTARTS   AGE
nginx-79585d8b96-fx8th         1/1     Running   0          5m29s

7. 模拟大量用户访问

#slave1

# 模拟1000个用户并发访问页面10万次
ab -n 100000 -c 1000 http://10.106.50.133:80/index.html
root@k8s-worker-node1:~# ab -n 100000 -c 1000 http://10.106.50.133:80/index.html
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 10.106.50.133 (be patient)
Completed 10000 requests

8. 查看hpa状态和pod数量

#hpa资源满了,当ab命令结束后,又降下来了
root@k8s-master:/k8s/hpa/nginx# kubectl -n luffy get hpa -w
NAME        REFERENCE          TARGETS          MINPODS   MAXPODS   REPLICAS   AGE
hpa-nginx   Deployment/nginx   2%/80%, 0%/20%   1         3         1          3m51s

hpa-nginx   Deployment/nginx   3%/80%, 22%/20%   1         3         1          5m31s
hpa-nginx   Deployment/nginx   3%/80%, 22%/20%   1         3         2          5m46s

hpa-nginx   Deployment/nginx   3%/80%, 0%/20%    1         3         2          6m31s
#又动态的启动了一个pod,ab命令结束一段时间后,关掉了一个pod
root@k8s-master:~# kubectl -n luffy get pod -w
NAME                           READY   STATUS    RESTARTS   AGE
nginx-79585d8b96-fx8th         1/1     Running   0          5m29s

nginx-79585d8b96-m95pn         0/1     Pending   0          0s
nginx-79585d8b96-m95pn         0/1     Pending   0          0s
nginx-79585d8b96-m95pn         0/1     ContainerCreating   0          0s
nginx-79585d8b96-m95pn         1/1     Running             0          2s

最后更新: 2022-02-22 04:55:01