1.HPA简介
ai '讲一下hpa'
Horizontal Pod Autoscaling,简称HPA 自动水平伸缩,还有一个vpa纵向扩容。
自动水平伸缩,是指运行在k8s上的应用负载(POD),可以根据资源使用率进行自动扩容、缩容,它依赖metrics-server服务pod使用资源指标收集;我们知道应用的资源使用率通常都有高峰和低谷,所以k8s的HPA特性应运而生;它也是最能体现区别于传统运维的优势之一,不仅能够弹性伸缩,而且完全自动化!
2.弹性伸缩自动化实践
注意事项
使用HPA前我们要确保K8s集群的dns服务和metrics服务是正常运行的,并且我们所创建的服务需要配置指标分配
创建一个带有小资源分配的request参数yaml实例:
cat > web.yaml <<-'EOF'
# cat web.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: web
name: web
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- image: nginx:1.21.6
name: nginx
resources:
limits: # 因为我这里是测试环境,所以这里CPU只分配50毫核(0.05核CPU)和20M的内存
cpu: "50m"
memory: 20Mi
requests: # 保证这个pod初始就能分配这么多资源
cpu: "50m"
memory: 20Mi
EOF
执行并创建服务:
kubectl apply -f web.yaml
kubectl expose deployment web --port 80 --target-port 80
#查看标签匹配结果
kubectl get svc -o wide
kubectl get pod -l app=web
3.创建hpa规则
ai 快速掌握hpa
ai '创建一个hpa规则'
kubectl autoscale deployment web --max=5 --min=2 --cpu-percent=30
#等待一会,可以看到相关的hpa信息(K8s上metrics服务收集所有pod资源的时间间隔大概在60s的时间)
kubectl get hpa -w
#删除命令如下:
kubectl delete horizontalpodautoscalers.autoscaling web
#删除pod熟练测试 最小pod数两
kubectl scale --replicas=1 deployment web
模拟业务流量增长,看看hpa自动伸缩的效果。开启另外一个终端运营工具容器测试
ai 'kubectl运行一个工具pod测试专用'
kubectl run -it --rm busybox --image=registry.cn-shanghai.aliyuncs.com/acs/busybox:v1.29.2 -- sh
while :;do wget -q -O- http://web;done
#等待2 ~ 3分钟,注意k8s为了避免频繁增删pod,对副本的增加速度有限制
kubectl get hpa web -w
#看下hpa的描述信息下面的事件记录
kubectl describe hpa web
#停掉压测,观察下HPA的自动收缩功能5分钟左会有收缩
4.kubernetes yaml导入导出
Kubernetes集群资源通过yaml导入导出的方法
1.导出某个Deployment的YAML文件
<deployment-name>是您想要导出的Deployment的名称,此命令将导出Deployment的完整YAML文件,包括所有注释和注释行
kubectl get deployment <deployment-name> -n <namespace> -o yaml > <deployment-name>.yaml
2.只想导出Deployment的规范部分
kubectl get deployment <deployment-name> -n <namespace> -o yaml | grep -v '^\s*#' > <deployment-name>.yaml
3.集群configMap,deployment,service,secret等导出和导入的方法,以service为例,其他同理:
单个service:
导出: kubectl get service serviceName -o yaml > backup.yaml
导入: kubectl create -f backup.yaml
所有service:
导出: kubectl get service -o yaml > backup.yaml
导入: kubectl create -f backup.yaml