Kubernetes部署HAP-Pod动态扩缩容

1、pod资源限制

(1)资源限制计算

在K8s的资源:
 CPU:
  我们知道2核2线程的CPU,可被系统识别为4个逻辑CPU,在K8s中对CPU的分配限制是对逻辑CPU做分片限制的。
  也就是说分配给容器一个CPU,实际是分配一个逻辑CPU。
  而且1个逻辑CPU还可被单独划分子单位,即 1个逻辑CPU,还可被划分为1000个millicore(毫核), 简单说就是1个逻辑CPU,继续逻辑分割为1000个豪核心。
  豪核:可简单理解为将CPU的时间片做逻辑分割,每一段时间片就是一个豪核心。
  所以:500m 就是500豪核心,即0.5个逻辑CPU.

​ 内存:
  K,M,G,T,P,E #通常这些单位是以1000为换算标准的。
  Ki, Mi, Gi, Ti, Pi, Ei #这些通常是以1024为换算标准的。

(2)在资源清单中配置
containers:
- name: iids-flat-config
  image: 123.56.18.37:25100/iids/iids-flat-config:1.0.0
  imagePullPolicy: Always
  resources:
      requests:  #是需求限制,也叫软限制
        cpu: "500m"
        memory: "512Mi"
      limits: #最大限制,也叫硬限制
        cpu: "500m"
        memory: "512Mi"
#通常来说:Limits >= Requests,并且requests 和 limits 通常要一起配置,若只配置了requests,而不配置limits,则很可能导致Pod会吃掉所有资源。

详细资料:查阅 https://www.cnblogs.com/wn1m/p/11291235.html

2、部署k8s资源监控 metrics-server

(1)下载metrics-server资源清单
git clone -b v0.3.6 https://gitee.com/five-root/metrics-server.git
(2) 修改镜像

将国外镜像改为国内镜像,打开metrics-server\deploy\1.8+,修改metrics-server-deployment.yaml

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: metrics-server
  namespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      hostNetwork: true  #修改此处
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6  #修改为国内镜像
        imagePullPolicy: Always
	   #添加下列两项参数
        args:
          - --kubelet-insecure-tls
          - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp
(3)启动metrics-server
#跳转资源清单目录
cd 资源清单目录路径
#启动所有资源清单
kubectl apply -f .
#查看
get pod -n kube-system
coredns-7ff77c879f-nvv8g            1/1     Running            10         18d
coredns-7ff77c879f-vbdlm            1/1     Running            9          18d
etcd-k8smaster                      1/1     Running            10         18d
kube-apiserver-k8smaster            1/1     Running            0          3h44m
kube-controller-manager-k8smaster   1/1     Running            11         18d
kube-flannel-ds-7mmvf               1/1     Running            2          18d
kube-flannel-ds-tp9vs               1/1     Running            12         18d
kube-proxy-k5sb7                    1/1     Running            2          18d
kube-proxy-zcbgz                    1/1     Running            9          18d
kube-scheduler-k8smaster            1/1     Running            11         18d
metrics-server-5f55b696bd-d279n     1/1     Running            0          39m 
#出现metrics-server-123123123说明metrics-server启动成功
#查看k8s资源情况
kubectl top node #查看node资源
kubectl top pod -n 命名空间  #查看pod资源

3、微服务创建HPA

(1)创建微服务HPA资源清单

​ vim iids-app-config.yml

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: iids-app-config
  namespace: iids
spec:
  minReplicas: 2   #至少1个副本
  maxReplicas: 5   #最多5个副本
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: iids-app-config #创建的deploment文件里面的name
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageUtilization: 50  #注意此时是根据使用率,也可以根据使用量:targetAverageValue
  - type: Resource
    resource:
      name: memory
      targetAverageUtilization: 50  #注意此时是根据使用率,也可以根据使用量:targetAverageValue
(2)启动HPA
#启动HPA
kubectl apply -f iids-app-config.yml
#查看HPA
kubectl get hpa -n iids
NAME              REFERENCE                    TARGETS           MINPODS   MAXPODS   REPLICAS   AGE
iids-app-config   Deployment/iids-app-config   36%/50%, 0%/50%   2         5         3          5h43m
  1. 扩容:当CUP或者内存超过50%,HPA会根据自身算法进行扩容,启动Pod,达到满足资源的pod数量
  2. 缩容:当CUP或者内存低于50%,HPA会根据自身算法进行缩容,停止Pod,达到满足资源的pod数量
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐