k8s 弹性伸缩的使用

1.手动扩缩容

编辑一个yaml文件

vi deployment-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  lables:
     app: nginx
  name: nginx
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: 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: nginx
  name: nginx
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec: 
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: Always
        ports:
        - containerPort: 80
        resources:
          requests:   #容器初始值大小
            memory: 50Mi
            cpu: 0.5
          limits:    #容器限制最大值
            memory: 100Mi
            cpu: 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配置完成

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值