帖子

安装 KEDA 和 HTTP Add-on,让 k3s 支持扩缩容至0,节省更多服务器资源

安装 KEDA 和 HTTP Add-on,让 k3s 支持扩缩容至0,节省更多服务器资源

  1. 安装 KEDA 核心组件
# 添加 KEDA Helm 仓库
helm repo add kedacore https://kedacore.github.io/charts
helm repo update

# 创建命名空间并安装 KEDA (降低资源请求以适应资源受限环境)
# 官方默认值: operator 100m CPU/256Mi 内存, metricServer 100m CPU/256Mi 内存
# 调整后配置:
#   - operator: 降低内存请求到 128Mi, CPU 保持 100m
#   - metricServer: 降低 CPU 到 50m, 内存到 64Mi
kubectl create namespace keda
helm install keda kedacore/keda --namespace keda \
  --set resources.operator.requests.cpu=100m \
  --set resources.operator.requests.memory=128Mi \
  --set resources.operator.limits.cpu=500m \
  --set resources.operator.limits.memory=512Mi \
  --set resources.metricServer.requests.cpu=50m \
  --set resources.metricServer.requests.memory=64Mi \
  --set resources.metricServer.limits.cpu=500m \
  --set resources.metricServer.limits.memory=512Mi

# 验证 KEDA 安装结果
# 预期输出: 应该看到 keda-operator 和 keda-metrics-apiserver 两个 Pod 处于 Running 状态
kubectl get pods -n keda
  1. 安装 KEDA HTTP Add-on
# 安装 HTTP Add-on (降低资源请求以适应资源受限环境)
# 官方默认值: operator/interceptor 各 250m CPU, 20Mi 内存
# 调整后配置: 降低 CPU 请求到 50m, 内存请求到 64Mi
helm install http-add-on kedacore/keda-add-ons-http --namespace keda \
   --set interceptor.resources.requests.cpu=50m \
   --set interceptor.resources.requests.memory=64Mi \
   --set interceptor.resources.limits.cpu=500m \
   --set interceptor.resources.limits.memory=256Mi \
   --set operator.resources.requests.cpu=50m \
   --set operator.resources.requests.memory=64Mi \
   --set operator.resources.limits.cpu=500m \
   --set operator.resources.limits.memory=256Mi \
   --set scaler.grpcHealthProbe.enabled=false

# 验证 HTTP Add-on 安装
# 预期输出: 应该看到 keda-add-ons-http-interceptor 和 keda-add-ons-http-operator 两个 Pod
kubectl get pods -n keda | grep http

  1. 验证完整安装
# 查看所有 KEDA 相关资源
kubectl get all -n keda

# 查看 CRD
kubectl get crd | grep keda
  1. 测试

kubectl apply -f test.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
   name: http-app
spec:
   replicas: 0
   selector:
      matchLabels:
         app: http-app
   template:
      metadata:
         labels:
            app: http-app
      spec:
         containers:
         - name: http-app
           image: python:3.9-alpine
           command:
           - python
           - -c
           - |
             from http.server import HTTPServer, BaseHTTPRequestHandler
             import time

             class SlowHandler(BaseHTTPRequestHandler):
                 def do_GET(self):
                     time.sleep(5)  # 延迟 0.5 秒,产生积压
                     self.send_response(200)
                     self.send_header('Content-type', 'text/plain')
                     self.end_headers()
                     self.wfile.write(b'Hello, KEDA!\n')

                 def log_message(self, format, *args):
                     pass  # 禁用日志输出

             print('Server starting on port 5678...')
             HTTPServer(('0.0.0.0', 5678), SlowHandler).serve_forever()
           ports:
           - containerPort: 5678
---
apiVersion: v1
kind: Service
metadata:
   name: http-app-service
spec:
   selector:
      app: http-app
   ports:
      - protocol: TCP
        port: 80
        targetPort: 5678
   type: ClusterIP
---
apiVersion: http.keda.sh/v1alpha1
kind: HTTPScaledObject
metadata:
   name: http-app-scaledobject
spec:
   hosts:
      - http-app-service.default.svc.cluster.local
   scaleTargetRef:
      name: http-app
      service: http-app-service
      port: 80
   replicas:
      min: 0  # 默认部署 0 个副本, 实现 scale to zero
      max: 5  # 最大扩容到 5 个副本
   targetPendingRequests: 2
   scaledownPeriod: 30

# 创建一个临时 Pod 进行测试
kubectl run ab-test2 --image=httpd:alpine --rm -it --restart=Never -- \
    ab -t 60 -n1000000 -c 100000 -k -r -H "Host: http-app-service.default.svc.cluster.local" \
    http://keda-add-ons-http-interceptor-proxy.keda.svc.cluster.local:8080/

  1. 卸载
helm uninstall keda -n keda
helm uninstall http-add-on -n keda

其他注意事项: 删除时如果卡住,可通过 claude code 进行排查和处理。这是参考命令: kubectl patch httpscaledobject <资源名> -n <命名空间> -p '{"metadata":{"finalizers":null}}' --type=merge

https://discuss.plugins-world.cn/post/u2si9uNl

未登录无法操作

登录 注册

评论 0

列表为空,暂无内容