(三)Kubernetes部署HPA动态扩容
Kubernetes部署HAP-Pod动态扩缩容1、pod资源限制(1)资源限制计算在K8s的资源: CPU: 我们知道2核2线程的CPU,可被系统识别为4个逻辑CPU,在K8s中对CPU的分配限制是对逻辑CPU做分片限制的。 也就是说分配给容器一个CPU,实际是分配一个逻辑CPU。 而且1个逻辑CPU还可被单独划分子单位,即 1个逻辑CPU,还可被划分为1000个millicore(毫核)
·
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
- 扩容:当CUP或者内存超过50%,HPA会根据自身算法进行扩容,启动Pod,达到满足资源的pod数量
- 缩容:当CUP或者内存低于50%,HPA会根据自身算法进行缩容,停止Pod,达到满足资源的pod数量
更多推荐
已为社区贡献3条内容
所有评论(0)