苏州建设网站制作,网站设计培训学校找哪家,网站运作方式,织梦做的网站打包在dw修改Pod 自动扩容#xff1a;可以根据 CPU 使用率或自定义指标#xff08;metrics#xff09;自动对 Pod 进行扩/缩容。 控制管理器每隔30s#xff08;可以通过–horizontal-pod-autoscaler-sync-period修改#xff09;查询metrics的资源使用情况
支持三种metrics类型 预定义…Pod 自动扩容可以根据 CPU 使用率或自定义指标metrics自动对 Pod 进行扩/缩容。 控制管理器每隔30s可以通过–horizontal-pod-autoscaler-sync-period修改查询metrics的资源使用情况
支持三种metrics类型 预定义metrics比如Pod的CPU以利用率的方式计算自定义的Pod metrics以原始值raw value的方式计算自定义的object metrics 支持两种metrics查询方式Heapster和自定义的REST API支持多metrics 通常用于 Deployment不适用于无法扩/缩容的对象如 DaemonSet 实现 cpu 或内存的监控首先有个前提条件是该对象必须配置了 resources.requests.cpu 或 resources.requests.memory 才可以可以配置当 cpu/memory 达到上述配置的百分比后进行扩容或缩容 1.创建一个 HPA
#修改配置文件 #加入资源限制
[rootk8s-master deployments]# vi nginx-deploy.yamlapiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx-deployname: nginx-deploynamespace: default
spec:replicas: 1revisionHistoryLimit: 10selector:matchLabels:app: nginx-deploystrategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:labels:app: nginx-deployspec:containers:- image: nginx:1.7.9imagePullPolicy: IfNotPresentname: nginx#加入资源限制resources:limits:cpu: 200mmemory: 128Mirequests:cpu: 10mmemory: 128Mi restartPolicy: AlwaysterminationGracePeriodSeconds: 30# 更新操作
[rootk8s-master deployments]# kubectl replace -f nginx-deploy.yaml
deployment.apps/nginx-deploy replaced# 查看 只有一个副本
[rootk8s-master deployments]# kubectl get deploy nginx-deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 1/1 1 1 18h创建一个 HPA
先准备一个好一个有做资源限制的 deployment执行命令 kubectl autoscale deploy nginx-deploy --cpu-percent20 --min2 --max5通过 kubectl get hpa 可以获取 HPA 信息
[rootk8s-master deployments]# kubectl autoscale deploy nginx-deploy --cpu-percent20 --min2 --max5
horizontalpodautoscaler.autoscaling/nginx-deploy autoscaled
#现在再次查看 副本自动扩容到了2个
[rootk8s-master deployments]# kubectl get deploy nginx-deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 2/2 2 2 18h
未安装 Metrics Server 查看 pod 内存、CPU 将报错
[rootk8s ~]# kubectl top pods --all-namespaces
error: Metrics API not availablePod 的水平自动缩放前提需要安装插件metrics-server
2.Metrics Server安装
一、使用阿里云的components.yaml配置文件
aliyun-components.yaml
[rootk8s-master ~]# rz
[rootk8s-master ~]# ls
aliyun-components.yaml anaconda-ks.cfg
#查看文件
[rootk8s-master ~]# cat aliyun-components.yaml
二、执行安装命令
[rootk8s-master ~]# kubectl apply -f aliyun-components.yaml 执行完输出内容:
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
service/metrics-server created
deployment.apps/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
三、查看效果验证是否安装成功
[rootk8s-master ~]# kubectl get svc metrics-server -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
metrics-server ClusterIP 10.105.89.80 none 443/TCP 152m
# 使用kubectl top node 查看资源使用情况
[rootk8s-master ~]# kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8s-master 91m 4% 912Mi 24%
k8s-node1 31m 1% 756Mi 20%
[rootk8s-master ~]# kubectl top pods --all-namespaces
NAMESPACE NAME CPU(cores) MEMORY(bytes)
kube-flannel kube-flannel-ds-8fxmx 3m 18Mi
kube-flannel kube-flannel-ds-xfmpr 4m 20Mi
kube-system coredns-65c54cc984-7vd4t 1m 17Mi
kube-system coredns-65c54cc984-qqv8m 1m 16Mi
kube-system etcd-k8s-master 9m 67Mi
kube-system kube-apiserver-k8s-master 34m 228Mi
kube-system kube-controller-manager-k8s-master 12m 49Mi
kube-system kube-proxy-l99bw 1m 17Mi
kube-system kube-proxy-x8tdf 1m 16Mi
kube-system kube-scheduler-k8s-master 2m 20Mi
kube-system metrics-server-b9f7b695f-bljhg 3m 20Mi 至此,metrics-server安装完成
[rootk8s-master deployments]# kubectl top pods
NAME CPU(cores) MEMORY(bytes)
nginx-deploy-56696fbb5-4ksdj 0m 1Mi
nginx-deploy-56696fbb5-wtjtq 0m 1Mi 3.创建一个servie
[rootk8s-master deployments]# kubectl create -f nginx-svc.yaml
service/nginx-svc createdapiVersion: v1
kind: Service
metadata:name: nginx-svclabels: app: nginx
spec:selector:app: nginx-deployports:- port: 80targetPort: 80name: webtype: NodePort
[rootk8s-master deployments]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-svc NodePort 10.100.220.235 none 80:31590/TCP 55s
[rootk8s-master deployments]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deploy-56696fbb5-4ksdj 1/1 Running 0 37m 10.244.1.46 k8s-node1 none none
nginx-deploy-56696fbb5-wtjtq 1/1 Running 0 40m 10.244.1.45 k8s-node1 none none4.测试
找到对应服务的 service编写循环测试脚本提升内存与 cpu 负载
[rootk8s-node1 ~]# while true; do wget -q -O- http://10.100.220.235 /dev/null ; done[rootk8s-master deployments]# kubectl top pods
NAME CPU(cores) MEMORY(bytes)
nginx-deploy-56696fbb5-4ksdj 0m 1Mi
nginx-deploy-56696fbb5-bdkx2 2m 1Mi
nginx-deploy-56696fbb5-wtjtq 0m 1Mi
nginx-deploy-56696fbb5-zrdb7 0m 1Mi
#400%/20%
[rootk8s-master deployments]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
nginx-deploy Deployment/nginx-deploy 400%/20% 2 5 2 67m#查看已经扩容到5个副本了
[rootk8s-master deployments]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 5/5 5 5 19h#暂停之前死循环的命令 等一会再次查看
[rootk8s-master deployments]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
nginx-deploy Deployment/nginx-deploy 0%/20% 2 5 5 69m
#pod变化
[rootk8s-master deployments]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deploy-c4986b7f-8tplt 1/1 Running 0 6m24s
nginx-deploy-c4986b7f-qltv6 1/1 Running 0 7m2s
#deployment变化
[rootk8s-master deployments]# kubectl get deploy nginx-deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 2/2 2 2 19h#发现已经自动完整了扩容缩容