注意:本文k8s的版本,使用的是V1.16.2
1. 手动命令扩容与缩容
#kubectl scale deployment/nginx-pod --replicas=2 #nginx-pod 是部署应用的名称,可以通过kubectl get deployment获取得到
#以下是相关命令
#kubectl get deployment
#kubectl describe service/nginx-pod #可以查看pods服务的详细情况
扩容与缩容命令相同,唯一改变的就是replicas的值,根据实际情况修改
2. 通过dashboard扩容与缩容
在deployments栏,找到需要操作的应用,点击最右边的"三点",然后会弹出 选择框,选择“sacle“,输入对应的数目即可。dashboard的安装详见
3. 根据cpu的利用率来自动扩容与缩容
官方文档:**https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/**
自动扩容与缩容的命令:
#kubectl autoscale deployment nginx-pod --cpu-percent=20 --min=1 --max=10
#上面参数意义:集群中至少维持1个pod,最多维持10个pods,进行扩容缩容是按照cpu的阈值来进行,这里设定20%,当然k8s不会按照20%这个值严格执行,例如k8s会认为15%-25%都是正常的,不会进行扩容与缩容
执行完上面的命令,k8s不能正常扩容与缩容:
#kubectl get hpa
从上图可以看到,targets一栏中出现了unknown,我们需要修改配置文件和安装指标采集工具。
1)配置文件,可以通过修改该应用的部署yaml文件,也可以通过dashboards修改,加入resource
ps: cpu单位后缀m代表“千分之一核心”,因此该资源对象指定容器进程需要50/1000的核心(5%)并且允许最多使用100/1000核心(10%)
#docker inspect 2cbd02547130 --format '{{.HostConfig.CpuShares}}' #查看资源的限制,2cbd……130是容器id
#值为51 #为什么51,而不是50?cpu控制组和docker都将核划分为1024个共享,而kubernetes将其划分为1000……
2)从某个版本(v1.9.0)后,不再支持从heapster获取指标监控来源,改成了metrics-server。下面首先讲解安装步骤:
a)在nodes上下载metrics-server镜像
docker pull bluersw/metrics-server-amd64:v0.3.6 #也可使用 mirrorgooglecontainers/metrics-server-amd64:v0.3.6
docker tag bluersw/metrics-server-amd64:v0.3.6 k8s.gcr.io/metrics-server-amd64:v0.3.6
b)需要下载部署文件,然后部署,文件列表如下:
这些文件可以用其它方法一个一个拉取,我这里使用下载metrics-server源码,文件夹里面全部包含
#git clone https://github.com/kubernetes-incubator/metrics-server.git
#metrics-server/deploy/1.8+/ #该目录下包含步骤4中全部文件
#vim metrics-server-deployment.yaml #在该文件中添加内容
image: k8s.gcr.io/metrics-server-amd64 #在image下添加以下内容
imagePullPolicy: IfNotPresent #如果本地存在就从本地启动,否则从官网上拉取镜像再启动
command:
- /metrics-server
- --metric-resolution=30s
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP
#kubectl create -f .
到此 metrics-server已经安装完毕,可以查看该pods运行情况#kubtctl get pods -A
3)使用命令#kubectl get hpa,再次查看,targets一栏中显示正常了。
4)进行压测,观察pods数量的变化,经过脚本压测,一切正常。