k8s开发基础-Deployment的autoscale(需安装metric-server)和rollback

弹性伸缩的接口:

Deployment版本回滚接口:

下面是配置的过程:

# kubectl create deployment web --image=nginx:latest --replicas=2

# kubectl expose deployment/web --type=NodePort --port=1080 --target-port=80

deployment副本扩容和缩容

# kubectl scale deployment/test -n default --replicas=2 或者 kubectl patch -n default deployment/test -p '{"spec":{"replicas":2}}'

配置HPA自动扩缩容

1。修改每个 API Server 的 kube-apiserver.yaml 配置开启 Aggregator Routing

# vi /etc/kubernetes/manifests/kube-apiserver.yaml

- --enable-aggregator-routing=true            # 添加本行

修改 manifests 配置后 API Server 会自动重启生效。

 2.安装metrics-server-参见k8s部署dashboard

官网:

https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/metrics-server

下载六个文件并创建

# mkdir metrics-server; cd metrics-server

#wget https://github.com/kubernetes/kubernetes/blob/master/cluster/addons/metrics-server/auth-delegator.yaml

#wget https://github.com/kubernetes/kubernetes/blob/master/cluster/addons/metrics-server/auth-reader.yaml

#wget https://github.com/kubernetes/kubernetes/blob/master/cluster/addons/metrics-server/metrics-apiservice.yaml

#wget https://github.com/kubernetes/kubernetes/blob/master/cluster/addons/metrics-server/metrics-server-deployment.yaml

#wget https://github.com/kubernetes/kubernetes/blob/master/cluster/addons/metrics-server/metrics-server-service.yaml

#wget https://github.com/kubernetes/kubernetes/blob/master/cluster/addons/metrics-server/resource-reader.yaml

国内image:

registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6

registry.cn-hangzhou.aliyuncs.com/google_containers/addon-resizer:1.8.11

查看metrics-server服务状态:

[root@node2 ~]#  kubectl get pod -n kube-system | grep metrics-server
metrics-server-69b85598c-zl2gb   1/1     Running   1          2m12s

验证metric功能:

[root@node2 metrics-server]# kubectl top node
NAME      CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
node2     1256m        31%    1537Mi          26%       
node201   898m         22%    1263Mi          21%  

2.创建deployment的时候需要指定pod的cpu和memory资源限制,否则没有限制,会使用节点整体的资源,测试不出效果。

[root@node201 ~]# kubectl api-versions | grep autoscal
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2

注释:
autoscaling/v1只支持基于CPU指标的缩放;
autoscaling/v2beta1支持Resource Metrics(资源指标,如pod的CPU)和Custom Metrics(自定义指标)的缩放;
autoscaling/v2beta2支持Resource Metrics(资源指标,如pod的CPU)和Custom Metrics(自定义指标)和ExternalMetrics(额外指标)的缩放

Deployment的pod容器必须要配置资源的request,否则hpa会报错,官方都解决不了。看到github有bug没有解决,就是这个原因,bug场景的资源限制是0也就是没有限制。

# kubectl apply -f web-autoscale.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web-autoscale
  name: web-autoscale
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web-autoscale
  template:
    metadata:
      labels:
        app: web-autoscale
    spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: nginx
        resources:
          limits:
            cpu: 200m
          requests:
            cpu: 80m

[root@node201 ~]# kubectl autoscale deployment web-autoscale --min=1 --max=5 --cpu-percent=30
horizontalpodautoscaler.autoscaling/web-autoscale autoscaled

表示最小一个pods 最多5个pods cpu负载超过30%就触发扩容

故障处理: 没有安装metrics

[root@node201 ~]# kubectl get hpa
NAME   REFERENCE         TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
web-autoscale   Deployment/web-autoscale   <unknown>/30%   1         5         1          26s

# kubectl describe hpa/web-autoscale 可以看到报错信息

  Warning  FailedGetResourceMetric       2m19s (x119 over 32m)  horizontal-pod-autoscaler  failed to get cpu utilization: unable to get metrics for resource cpu: unable to fetch metrics from resource metrics API: the server could not find the requested resource (get pods.metrics.k8s.io)

ab压测一下

# kubectl expose deployment/web-autoscale --type=NodePort --port=1085 --target-port=80

# while true; do wget -q -O- http://192.168.56.201:32638/test/index.html; done

[root@node201 ~]# kubectl get hpa
NAME            REFERENCE                  TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
web-autoscale   Deployment/web-autoscale   180%/30%   1         5         4          22m

停掉wget:

deployment的版本回滚

改变images生成新的deployment的replicaset副本:

# kubectl set image deployment/web nginx=nginx:1.18.1 --record=true
# kubectl set image deployment/web nginx=nginx:1.19.1  --record=true   

change-cause标签:

# kubectl patch deployment/web --patch '{"metadata": {"annotations": {"kubernetes.io/change-cause": "nginx:1.8.1"}}}'
# kubectl annotate deployment/web kubernetes.io/change-cause='nginx:1.8.1'    

查看deployment所有的历史版本:             
# kubectl rollout history deployment/web

查看某一版本的详细信息:
# kubectl rollout history deployment/web --revision=6

回滚到某一版本
# kubectl rollout undo deployment/web --to-revision=5 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值