1.手动扩缩容
编辑一个yaml文件
vi deployment-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:lables:app: nginxname: nginxnamespace: default
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx-containerPort: 80
执行yaml生成一下pod
kubectl create -f deployment-nginx.yaml
kubectl get pod -o wide -l app=nginx -n default
kubectl get deployment -o wide -n default
可以看到三个pod都正常启动了,接下来执行一下手动扩缩容的操作
扩容到5个pod
kubectl scale deployment nginx --replicas=5 -n default
kubectl get pod -o wide -n default
可以看到扩容了两个新的pod出来
缩容至2个pod
kubectl scale deployment nginx --replicas=2 -n default
kubectl get pod -o wide -n default -l app=nginx
可以看到pod的数量缩小为了两个
也可以使用edit命令去做pod的扩缩容,效果是和scale命令一样的,只是scale是专门手动扩缩容pod的命令,edit是手动更新yaml配置的,更新后配置文件的内容自动生效
扩容至3个pod
kubectl edit deployment nginx
kubectl get pod -n default
可以看到扩容成了三个pod
2.自动扩缩容HPA
要实现扩缩容得先安装Metrics Server服务,因为自动扩缩容是通过监控容器得cpu或者memory得上限来实现弹性伸缩的,在 Kubernetes 集群中,Metrics Server 是一个用于收集和聚合集群内部组件的性能指标数据的服务。它可以收集 CPU 使用率、内存使用率、网络 I/O 等指标,并将这些指标暴露给 Kubernetes API Server,以供其他组件使用,在弹性伸缩中,Metrics Server 可以帮助 Kubernetes 自动地监测集群中各个 Pod 的资源使用情况,并根据配置的规则进行自动扩展或缩减
2.1部署Metrics Server服务
从github上下载yaml文件
wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.5.0/components.yaml
修改yaml文件配置
vi components.yaml
修改deployment中的配置配置检查时间间隔和忽略证书验证
- --metric-resolution=15s
- --kubelet-insecure-tls修改镜像源为阿里云的镜像源
image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.5.0
使用yaml文件创建服务
kubectl create -f components.yaml
查看Metrics Server的pod状态
kubectl get pod -n kube-system |grep metrics
如果pod启动不起来可以使用以下命令查看错误的日志(pod名称要根据自己查询出来的填写)
kubectl describe pod metrics-server-dcdc8968b-b5lbc -n kube-system
查看是否获取到监控的值
kubectl top node
至此Metrics Server服务配置完成
接下来尝试一下配置自动弹性伸缩
修改一下之前的yaml
vi deployment-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata: labels:app: nginxname: nginxnamespace: default
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec: containers:- name: nginximage: nginximagePullPolicy: Alwaysports:- containerPort: 80resources:requests: #容器初始值大小memory: 50Micpu: 0.5limits: #容器限制最大值memory: 100Micpu: 1
重载一下yaml文件配置
kubectl apply -f deployment-nginx.yaml
配置service服务暴露端口
kubectl expose deployment nginx --port=8080 --target-port=80 --type=NodePort
这个命令的效果是创建一个 Service 对象,该对象将端口 8080 映射到 Deployment 中的容器的端口 80,并将 Service 对象的 IP 地址和随机端口号分配给集群节点的 IP 地址和端口号
查看暴露的端口
kubectl get service
配置hpa
kubectl autoscale deployment nginx --min=3 --max=10 --cpu-percent=10
这里为了测试cpu上限设置低一点为10%
用多几台主机使用以下命令访问暴露的端口
while true;do curl -s 10.1.60.119:30537 >> /dev/null;done
查看一下hpa
kubectl get hpa
可以看到监控的cpu使用率已经涨上去了,但是还没有创建新的容器,需要等一会
查看deployment、hpa、pod
kuebctl get deployment
kubectl get hpa
kubectl get pod -n default -l app=nginx
可以看到pod数据已经扩容了,变成了7个pod
kubectl get hpa
再次查看hpa可以看到pod数量扩容后,cpu使用率降了下来
现在把所有的访问取消掉,等一会在观察,会看到pod的数量回落
kubectl get hpa
kubectl get pod -n default -l app=nginx
可以看到pod的数量回落到了3个
至此hpa配置完成