Kubernetes 中的水平 pod 自动缩放
Horizontal pod autoscaling in Kubernetes
我有一个集群,可根据我的 pods 的 CPU 使用情况进行扩展。文档指出我应该通过缩放到快速来防止抖动。我想尝试一下自动缩放速度,但我似乎找不到在哪里应用以下标志:
- --horizontal-pod-autoscaler-downscale-delay
- --horizontal-pod-autoscaler-upscale-delay
我的目标是将冷却计时器设置得低于 5m 或 3m,有谁知道这是怎么做到的或者我在哪里可以做到找到关于如何配置这个的文档?此外,如果必须在 hpa 自动缩放 YAML 文件中配置它,有谁知道应该为此使用什么定义,或者我在哪里可以找到有关如何配置 YAML 的文档?
This is a link to the Kubernetes documentation about scaling cooldowns i used.
HPA 控制器是控制器管理器的一部分,您需要将标志传递给它,另请参阅 docs。这不是你通过 kubectl 做的事情。它是控制平面(主)的一部分,因此取决于您如何设置 Kubernetes and/or 您正在使用的产品。例如,在 GKE 中无法访问控制平面,在 Minikube 中你需要通过 ssh 进入节点等。
这里的所有讨论都是我的经验,它对我有用,也许它可以帮助别人。
ssh
到主节点并像下面那样编辑 /etc/kubernetes/manifests/kube-controller-manager.manifest
command:
- /hyperkube
- controller-manager
- --kubeconfig=/etc/kubernetes/kube-controller-manager-kubeconfig.yaml
- --leader-elect=true
- --service-account-private-key-file=/etc/kubernetes/ssl/service-account-key.pem
- --root-ca-file=/etc/kubernetes/ssl/ca.pem
- --cluster-signing-cert-file=/etc/kubernetes/ssl/ca.pem
- --cluster-signing-key-file=/etc/kubernetes/ssl/ca-key.pem
- --enable-hostpath-provisioner=false
- --node-monitor-grace-period=40s
- --node-monitor-period=5s
- --pod-eviction-timeout=5m0s
- --profiling=false
- --terminated-pod-gc-threshold=12500
- --horizontal-pod-autoscaler-downscale-delay=2m0s
- --horizontal-pod-autoscaler-upscale-delay=2m0s
- --v=2
- --use-service-account-credentials=true
- --feature-gates=Initializers=False,PersistentLocalVolumes=False,VolumeScheduling=False,MountPropagation=False
引用部分是我添加的参数。无需重新启动 kubelet 服务即可更新。
如果您没有发现此值已更新,您可以重新启动 systemctl restart kubelet
。
注意: 我已经使用 kubespray
创建了 HA 集群
希望这可以成为某人的救星。
谢谢!
如果您使用 kubeadm 设置集群,则将这些参数添加到 controllerManagerExtraArgs 下的 kubeadm 主配置文件中。
示例如下
apiVersion: kubeadm.k8s.io/v1alpha1
kind: MasterConfiguration
kubernetesVersion: ${k8s_version}
cloudProvider: vsphere
api:
advertiseAddress: ${k8s_master_ip}
controlPlaneEndpoint: ${k8s_master_lb_hostname}
apiServerCertSANs:
- ${k8s_master_lb_ip}
- ${k8s_master_ip0}
- ${k8s_master_ip1}
- ${k8s_master_ip2}
- ${k8s_master_lb_hostname}
apiServerExtraArgs:
endpoint-reconciler-type: lease
requestheader-allowed-names:
cloud-config: /etc/vsphere/config
enable-admission-plugins: "NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority"
controllerManagerExtraArgs:
horizontal-pod-autoscaler-use-rest-clients: true
horizontal-pod-autoscaler-downscale-delay: 5m0s
horizontal-pod-autoscaler-upscale-delay: 2m0s
etcd:
endpoints:
- https://${k8s_master_ip0}:2379
- https://${k8s_master_ip1}:2379
- https://${k8s_master_ip2}:2379
caFile: /etc/kubernetes/pki/etcd/ca.pem
certFile: /etc/kubernetes/pki/etcd/client.pem
keyFile: /etc/kubernetes/pki/etcd/client-key.pem
..
..
..
我有一个集群,可根据我的 pods 的 CPU 使用情况进行扩展。文档指出我应该通过缩放到快速来防止抖动。我想尝试一下自动缩放速度,但我似乎找不到在哪里应用以下标志:
- --horizontal-pod-autoscaler-downscale-delay
- --horizontal-pod-autoscaler-upscale-delay
我的目标是将冷却计时器设置得低于 5m 或 3m,有谁知道这是怎么做到的或者我在哪里可以做到找到关于如何配置这个的文档?此外,如果必须在 hpa 自动缩放 YAML 文件中配置它,有谁知道应该为此使用什么定义,或者我在哪里可以找到有关如何配置 YAML 的文档? This is a link to the Kubernetes documentation about scaling cooldowns i used.
HPA 控制器是控制器管理器的一部分,您需要将标志传递给它,另请参阅 docs。这不是你通过 kubectl 做的事情。它是控制平面(主)的一部分,因此取决于您如何设置 Kubernetes and/or 您正在使用的产品。例如,在 GKE 中无法访问控制平面,在 Minikube 中你需要通过 ssh 进入节点等。
这里的所有讨论都是我的经验,它对我有用,也许它可以帮助别人。
ssh
到主节点并像下面那样编辑 /etc/kubernetes/manifests/kube-controller-manager.manifest
command:
- /hyperkube
- controller-manager
- --kubeconfig=/etc/kubernetes/kube-controller-manager-kubeconfig.yaml
- --leader-elect=true
- --service-account-private-key-file=/etc/kubernetes/ssl/service-account-key.pem
- --root-ca-file=/etc/kubernetes/ssl/ca.pem
- --cluster-signing-cert-file=/etc/kubernetes/ssl/ca.pem
- --cluster-signing-key-file=/etc/kubernetes/ssl/ca-key.pem
- --enable-hostpath-provisioner=false
- --node-monitor-grace-period=40s
- --node-monitor-period=5s
- --pod-eviction-timeout=5m0s
- --profiling=false
- --terminated-pod-gc-threshold=12500
- --horizontal-pod-autoscaler-downscale-delay=2m0s - --horizontal-pod-autoscaler-upscale-delay=2m0s
- --v=2
- --use-service-account-credentials=true
- --feature-gates=Initializers=False,PersistentLocalVolumes=False,VolumeScheduling=False,MountPropagation=False
引用部分是我添加的参数。无需重新启动 kubelet 服务即可更新。
如果您没有发现此值已更新,您可以重新启动 systemctl restart kubelet
。
注意: 我已经使用 kubespray
创建了 HA 集群希望这可以成为某人的救星。
谢谢!
如果您使用 kubeadm 设置集群,则将这些参数添加到 controllerManagerExtraArgs 下的 kubeadm 主配置文件中。 示例如下
apiVersion: kubeadm.k8s.io/v1alpha1
kind: MasterConfiguration
kubernetesVersion: ${k8s_version}
cloudProvider: vsphere
api:
advertiseAddress: ${k8s_master_ip}
controlPlaneEndpoint: ${k8s_master_lb_hostname}
apiServerCertSANs:
- ${k8s_master_lb_ip}
- ${k8s_master_ip0}
- ${k8s_master_ip1}
- ${k8s_master_ip2}
- ${k8s_master_lb_hostname}
apiServerExtraArgs:
endpoint-reconciler-type: lease
requestheader-allowed-names:
cloud-config: /etc/vsphere/config
enable-admission-plugins: "NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority"
controllerManagerExtraArgs:
horizontal-pod-autoscaler-use-rest-clients: true
horizontal-pod-autoscaler-downscale-delay: 5m0s
horizontal-pod-autoscaler-upscale-delay: 2m0s
etcd:
endpoints:
- https://${k8s_master_ip0}:2379
- https://${k8s_master_ip1}:2379
- https://${k8s_master_ip2}:2379
caFile: /etc/kubernetes/pki/etcd/ca.pem
certFile: /etc/kubernetes/pki/etcd/client.pem
keyFile: /etc/kubernetes/pki/etcd/client-key.pem
..
..
..