今日天气
  1. 博客/

初探 K8s VPA 垂直更改 Pod 资源请求

·643 字·2 分钟· ·
k8s vpa pod
Johny
作者
Johny
熟练的 云原生搬砖师
Table of Contents

背景
#

Vertical Pod Autoscaler(VPA)使用户无需设置 pod 最新的资源限制。 配置后它将根据资源实际使用情况自动设置 request ,从而允许在节点上进行适当的调度,以便为每个 Pod 提供适当的资源使用量。 使用叫做 VerticalPodAutoscalerCRD 资源对象配置自动伸缩,它允许指定哪些 pod 应用可以进行垂直自动伸缩,以及如何进行伸缩资源的设置。

项目详情

环境说明
#

  • kubernetes version: v1.20.4
  • 操作系统: centos7

安装
#

编写更新 openssl
#

在 Centos7 中使用默认的 openssl 进行安装时会提示安装异常,这里我们需要使用编译方式进行更新一下 openssl 的版本,更新1版本为: l-1.1.1k

wget http://mirrors.ibiblio.org/openssl/source/openssl-1.1.1k.tar.gz

tar xf openssl-1.1.1k.tar.gz \
&& cd  openssl-1.1.1k/

./config \
&& make -j$(nproc) \
&& make install

\mv /usr/bin/openssl{,.bak}

ln -s /usr/local/bin/openssl /usr/bin/openssl
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

openssl version
OpenSSL 1.1.1k  25 Mar 2021

安装 metric-server
#

Github 地址,选择和自己 k8s 集群匹配的版本进行安装即可,这里选择安装的是 v0.5.0

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.5.0/components.yaml

kubectl edit deployment metrics-server -n kube-system  # 编辑资源对象,添加跳过证书验证,修复导致 pod 无法正常启动
...
        - --cert-dir=/tmp
        - --secure-port=443
        - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
        - --kubelet-use-node-status-port
        - --metric-resolution=15s
        - --kubelet-insecure-tls
...     

watch kubectl get po -l k8s-app=metrics-server -n kube-system  # 等待 pod 启动完成

kubectl top node  # 执行如下命令有输出及完成
NAME    CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
node1   567m         7%     4009Mi          27%       
node2   613m         8%     5181Mi          35%       
node3   1446m        19%    1683Mi          11%       
node4   278m         3%     1380Mi          9%

安装 vpa
#

默认安装版本 0.9.2

git clone https://github.com/kubernetes/autoscaler.git

cd autoscaler/vertical-pod-autoscaler/ # 进入目录

./hack/vpa-up.sh

image-20210708153529190

等待 pod 启动完成

kubectl get po -n kube-system |grep vpa
vpa-admission-controller-6cd546c4f-dvcf9                   1/1     Running   0          72s
vpa-recommender-6855ff754-9q2dw                            1/1     Running   0          72s
vpa-updater-9fd7bfbd5-h7l7n                                1/1     Running   0          72s

测试 vpa 的使用
#

kubectl create ns vpa

kubectl apply -f examples/hamster.yaml -n vpa

kubectl get po hamster-96d4585b7-2pl4v  -n vpa -o yaml|grep -A 3 '    resources:'
    resources:
      requests:
        cpu: 100m
        memory: 50Mi

一分多钟后自动触发了更新机制

image-20210708154012735

 kubectl get po hamster-96d4585b7-l8xw6   -n vpa -o yaml|grep -A 3 '    resources:'
    resources:
      requests:
        cpu: 548m 
        memory: 262144k 

总结
#

vpa 可以设置 pod 请求的资源被动态的更改,目前是属于一个实验性的一个功能,如 vpa 触发更新时,会触发 pod 重建,新 pod 可能会被重新调度到新的节点。依旧是不适合有状态的应用进行使用,如果动态的更改 底层的 cgroup 资源限制,而不需要重启 pod 这样是不是更好呢?

相关文章

使用 Helm 配合 localPV 在 K8s 中部署 Mariadb 主程复制集群
·1640 字·4 分钟·
k8s helm mariadb localpv
Rancher 开启监控后,exporter/metrics 的添加说明 (二)
·2662 字·6 分钟·
devops k8s prometheus rancher prometheus operator k8s kubekey exporter metrics
Rancher 开启监控,及生产应用的优化配置工作说明 (一)
·2785 字·6 分钟·
devops k8s prometheus rancher prometheus operator k8s kubekey exporter
使用 Confluentinc 在 Kubernetes 集群中部署 Kafka 集群
·1133 字·3 分钟·
k8s kafka zookeeper helm
Rancher 单机部署,进行升级后,导致docker无法正常启动
·586 字·2 分钟·
k8s fix docker rancher
Coredns 出现间断性无法正常解析域名问题
·1536 字·4 分钟·
k8s coredns dns