Horizontal Pod Autoscing:pod的水平自动伸缩,这是k8s自带的模块
pod占用cpu比率到达一定的阀值,会触发伸缩机制
replication controller 副本控制器 pod的副本数
deployment controller 节点控制器 部署pod
hpa控制数量以及控制部署pod
1、hpa基于kube-controll-manager服务,周期的检测pod的cpu使用率 默认30秒
2、hpa和replication controller,deployment controller,都属于k8s的资源对象,通过跟踪分析副本控制器和deployment的pod负载变化,针对性地调整目标pod的副本数
阀值:正常情况下,pod的副本数,以及达到阀值之后,pod的扩容最大数量
3、metrics-server 部署到集群中,对外提供度量的数据
把写好的yaml文件拖到opt目录下
运行
kubectl apply -f components.yaml
查看
kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-7f89b7bc75-bfs8z 1/1 Running 0 11m
coredns-7f89b7bc75-dx2qz 1/1 Running 1 25d
etcd-master01 1/1 Running 3 25d
kube-apiserver-master01 1/1 Running 2 7d17h
kube-controller-manager-master01 1/1 Running 5 25d
kube-flannel-ds-btmh8 1/1 Running 1 25d
kube-flannel-ds-plv26 1/1 Running 4 25d
kube-flannel-ds-qjkv2 1/1 Running 2 25d
kube-proxy-46rbj 1/1 Running 3 25d
kube-proxy-khngm 1/1 Running 1 25d
kube-proxy-lq8lh 1/1 Running 2 25d
kube-scheduler-master01 1/1 Running 6 25d
metrics-server-55b9df7b6-95b7d 1/1 Running 0 4m1s
metrics-server-55b9df7b6-9ffjz 1/1 Running 0 4m1s
metrics-server-55b9df7b6-c9sfz 1/1 Running 0 4m1s
查看node节点使用情况
kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
master01 147m 3% 2143Mi 58%
node01 60m 1% 490Mi 13%
node02 73m 1% 2046Mi 55%
1、定义pod的时候必须要有资源限制,否则HPA无法进行监控
2、扩容是即时的,只要超过阀值会立刻扩容,不是立刻扩容到最大副本数,他会在最小值和最大值波动,如果扩容的数量满足了需求,不会在扩容
3、缩容是缓慢的,如果业务的峰值较高,回收的策略太积极的话,可能会产生业务的崩溃,缩容的速度是比较慢的
周期性的获取数据,缩容的机制问题
1、手动方式,修改控制器的副本数
kubectl scale deployment nginx1 --replicas=4
修改yaml文件,apply -f部署更新
2、自动扩缩容
hpa hpa的监控的是cpu
1、pod的资源限制
2、命名空间资源限制
lucky-cloud项目---部署在test1的命名空间,如果lucky-cloud不做限制,或者命名空间不做限制,他依然会占满所有集群资源
k8s集群部署pod的最大数量:10000
bustbox:就是最小化的cents 4M
有哪些服务会部署在k8s当中
中间件:
kafka 6
Redis 3
业务服务:
自定义的镜像创建的容器
pluigs
前端:
nginx 3-6
mysql是实机部署
命名空间限制
apiVersion: apps/v1
kind: Deployment
metadata:
name: centos-name
namespace: test1
labels:
test: centos2
spec:
replicas: 1
selector:
matchLabels:
test: centos2
template:
metadata:
labels:
test: centos2
spec:
containers:
- name: centos1
image: centos:7
command: ["/bin/bash","-c","yum -y install epel-release; yum -y install stress; sleep 3600"]
resources:
limits:
cpu: "1"
memory: 512Mi
---
apiVersion: v1
kind: ResourceQuota
metadata:
name: ns-resource
namespace: test1
spec:
hard:
pods: "3"
requests.cpu: "2"
requests.memory: 1Gi
limits.cpu: "4"
limits.memory: 2Gi
configmaps: "10"
#在当前名空间能创建最大的ConfigMap的数量10个
persistentvolumeclaims: "4"
#当前命名空间只能使用4个pvc
secrets: "9"
#创建加密的sercets,只能9个
services: "5"
#创建service只能5个
services.nodeports: "2"
#只能创nodeport,svc只能创建2个
kubectl describe ns test1
Name: test1
Labels:
Annotations:
Status: Active
Resource Quotas
Name: ns-resource
Resource Used Hard
-------- --- ---
configmaps 1 10
limits.cpu 1 4
limits.memory 512Mi 2Gi
persistentvolumeclaims 0 4
pods 1 3
requests.cpu 1 2
requests.memory 512Mi 1Gi
secrets 1 9
services 0 5
services.nodeports 0 2
No LimitRange resource.
pod资源限制
apiVersion: apps/v1
kind: Deployment
metadata:
name: centos-pod
namespace: test2
labels:
test: centos3
spec:
replicas: 1
selector:
matchLabels:
test: centos3
template:
metadata:
labels:
test: centos3
spec:
containers:
- name: centos2
image: centos:7
command: ["/bin/bash","-c","yum -y install epel-release; yum -y install stress; sleep 3600"]
---
apiVersion: v1
kind: LimitRange
#表示使用limitrange来进行资源控制的类型
metadata:
name: test1-limit
namespace: test2
spec:
limits:
- default:
memory: 512Mi
cpu: "1"
defaultRequest:
memory: 256Mi
cpu: "0.5"
type: Container
#命名空间创建的pod进行限制,default:limit
# defaultRequest:Request
#type: Container pod
HPA自动扩缩容
命名空间
第一种
ResourceQuota
可以对命名空间进行资源限制
第二种
LimitRange
直接声明在名空间当中创建的pod,容器的资源限制,这是一种统一限制,所有的pod都受这个条件的制约
pod资源限制 一般是我们创建的时候声明好的,必加选项
pod的资源限制
resources: limit
命名空间资源限制 对命名空间使用cpu和内存一定会做限制
ResourceQuota
核心:防止整个集群的资源被一个服务或者一个命名空间占满
命名空间统一资源限制
LimitRange