1、Prometheus‌:提供实时监控数据,是动态调度的基础。

下载prometheus.tgz
mkdir prometheus & tar -xvf prometheus.tgz -C prometheus
helm install prometheus -n crane-tool \ #指定安装到crane-tool命名空间
    --set pushgateway.enabled=false \ #禁用Pushgateway组件
    --set alertmanager.enabled=false \ 禁用Alertmanager告警功能
    --set server.persistentVolume.enabled=false \ #禁用Prometheus数据持久化(数据仅存于内存)
    -f /prometheus/override_values.yaml \ #使用自定义配置文件
    --create-namespace  prometheus/ #--create-namespace如果命名空间不存在则自动创建,prometheus/指定使用的Helm Chart仓库和名称

2、Crane‌:基于Prometheus数据优化调度,提升资源利用率。

下载crane.tgz
mkdir crane & tar -xvf crane.tgz -C crane
helm install crane -n crane-tool --create-namespace crane/

3、fAdvisor‌:提供容器级指标,间接支持调度。

下载fadvisor.tgz
mkdir fadvisor & tar -xvf fadvisor.tgz -C fadvisor
helm install fadvisor -n crane-tool --create-namespace fadvisor/

4、Scheduler‌:原生调度器需结合外部工具(如Crane)实现更智能的调度。

下载scheduler.tgz
mkdir scheduler & tar -xvf scheduler.tgz -C scheduler 
helm install scheduler -n crane-tool --create-namespace scheduler/
以上这些工具协同工作,可显著提升Kubernetes集群的调度效率和资源利用率。

5、传入调度器参数替换默认调度器
{{- if .Values.env.open.SCHEDULER_NAME }}
    schedulerName: "{{ .Values.env.open.SCHEDULER_NAME }}"
{{- end }}
#Pod的Values配置
env:
  open:
    SCHEDULER_NAME: crane-scheduler
此参数将启用crane调度,否则将会继续用K8s默认调度器。

6、启动配置文件 
    JAVA_OPTS: >-
      -XX:+UseG1GC #启用G1垃圾回收器减少停顿时间
      -XX:NativeMemoryTracking=summary #追踪JVM内存使用
      -Xmx12288m  #设置JVM堆内存的最大可用空间
      -Xms2048m   #设置JVM启动时分配初始堆内存大小
      -Dspring.profiles.active=docker #激活SpringBoot的Docker配置文件,确保应用在容器环境中的正确运行
      -XX:+HeapDumpOnOutOfMemoryError #在OOM时自动生成堆转储文件,便于分析内存泄露

7、内存回收参数:为了避免扎堆回收导致CPU飙升,分钟和秒数是随机的
指定JVM在每日的6:00、12:00、18:00和23:00执行Full GC(完全垃圾回收)操作。
清理(Old Generation)内存,释放长期未使用的对象。优化内存布局,减少碎片化。
预防OOM(内存溢出),确保应用稳定运行。
JVM_FULLGC_EXECUTE_HOUR: 6,12,18,23

8、资源请求和限制相关配置
调度器行为‌:
当requests < limits时,Pod属于‌Burstable‌等级,资源紧张时可能被限制在requests范围内。
当1:1(requests = limits)比例可避免此类问题,Pod属于‌Guaranteed QoS等级‌确保Pod在limits范围内运行。
resources:
  limits:
    cpu: 4
    memory: 12Gi
  requests:
    cpu: 100m
    memory: 12Gi

9、健康检查参数
## Liveness 和 Readiness 探针相关配置
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/
#livenessProbe:失败时重启容器,解决应用假死问题
#readinessProbe:失败时暂停流量,保护应用免受过载影响

livenessProbe:                 #存活探针,用于检测容器是否健康运行
  initialDelaySeconds: 180     #容器启动后延迟多少秒开始执行第一次探测默认为0秒。这个参数用于给足容器足够的启动时间。
  periodSeconds: 30            #探测的时间间隔,即每隔多少秒执行一次探测,默认为10秒‌
  timeoutSeconds: 3            #单次探测的超时时间
  successThreshold: 1          #只需要1次成功的探测,即可将容器状态标记为"成功"‌。
  failureThreshold: 6          #探测失败的阈值,即连续失败多少次后认为探测失败,默认为3次‌

readinessProbe:                #就绪指针,用于检测容器是否已经准备好接收外部请求
  initialDelaySeconds: 5       #容器启动后延迟多少秒开始执行第一次探测默认为0秒。这个参数用于给足容器足够的启动时间。
  periodSeconds: 15            #探测的时间间隔,即每隔多少秒执行一次探测,默认为10秒‌
  timeoutSeconds: 3            #单次探测的超时时间
  successThreshold: 1          #只需要1次成功的探测,即可将容器状态标记为"成功"‌。
  failureThreshold: 3          #探测失败的阈值,即连续失败多少次后认为探测失败,默认为3次‌

更多推荐