k8s HorizontalPodAutoscaler

k8s的HorizontalPodAutoscaler通过kubectl创建并存储到etcd,apiserver接收到创建请求后存入etcd。HPA控制器每30秒同步检查监控数据,基于Heapster的指标决定是否调整Pod数量,依据Deployment等资源类型进行伸缩,并更新到apiserver和etcd。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

k8s scale其实就是调用apiserver提供的api接口,然后更新replicationcontroller,然后由rc controler进行控制pod的数量。

 

HorizontalPodAutoscaler:

客户端;

    通过kubectl创建一个horizontalPodAutoscaler对象,并存储到etcd中

服务端:

    api server:负责接受创建hpa对象,然后存入etcd

    hpa controler和其他的controler类似,每30s同步一次,将已经创建的hpa进行一次管理(从heapster获取监控数据,查看是否需要scale, controler的store中就保存着从始至终创建出来的hpa,当做一个缓存),watch hpa有变化也会运行。从heapster中获取scale数据,和hpa对比,计算cup利用率等信息,然后重新调整scale。根据hpa.Spec.ScaleTargetRef.Kind(例如Deployment,然后deployment控制器在调整pod数量),调整其值,发送到apiserver存储到etcd,然后更新hpa到etcd.

 

if rescale {
   scale.Spec.Replicas = desiredReplicas
  //调整绑定hpa的资源的值,比如deployment
   _, err = a.scaleNamespacer.Scales(hpa.Namespace).Update(hpa.Spec.ScaleTargetRef.Kind, scale)
   if err != nil {
      a.eventRecorder.Eventf(hpa, api.EventTypeWarning, "FailedRescale", "New size: %d; reason
### 使用 Kubernetes 替代 Nacos 实现服务发现和服务管理 在微服务架构中,Kubernetes (k8s) 提供了一套强大的工具集来管理和编排容器化应用。为了替代 Nacos 的功能,特别是服务发现和服务管理方面,可以通过以下方式利用 k8s: #### 1. 利用 Kubernetes Service 进行服务暴露与访问控制 Kubernetes 中的 `Service` 资源对象允许定义一组逻辑上的 Pod 集合及其访问策略。这相当于实现了基本的服务注册和发现机制。 ```yaml apiVersion: v1 kind: Service metadata: name: my- protocol: TCP port: 80 targetPort: 9376 ``` 上述 YAML 文件定义了一个名为 `my-service` 的服务,它会自动将流量路由到带有标签 `app=MyApp` 的所有 Pod 上[^1]。 #### 2. 应用 ConfigMap 和 Secret 来处理配置数据 对于动态配置管理的需求,可以借助于 Kubernetes 内置的支持——ConfigMap 或者 Secret 对象存储应用程序所需的环境变量或其他静态/敏感信息。 ```bash kubectl create configmap game-config --from-literal=special.level=true --from-file=config.yaml=path/to/config/file ``` 此命令创建了一个新的 ConfigMap 名为 `game-config` 并填充了一些键值对作为初始内容。 #### 3. 借助 Ingress 控制器实现外部请求入口 Ingress 是一种 API 对象,提供了 HTTP(S) 访问集群内部服务的能力,并支持基于路径、主机名等多种规则匹配模式;配合合适的 Ingress Controller 可以为用户提供更加灵活高效的负载均衡解决方案。 ```yaml apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/rewrite-target: / name: example-ingress spec: rules: - host: hello-world.info http: paths: - backend: serviceName: service-one servicePort: 80 path: /serviceone ``` 这段代码片段展示了如何设置一个简单的 Ingress 规则,使得来自特定域名下的 URL 请求能够被正确转发给对应的目标服务实例。 #### 4. 自动扩展与健康检查保障高可用性 通过 HorizontalPodAutoscaler (HPA),可以根据 CPU利用率或者其他自定义指标自动调整副本数量以应对不同级别的工作负载变化情况。同时,Liveness Probe 和 Readiness Probe 功能可以帮助检测并移除不可用节点,确保整个系统的稳定运行状态。 综上所述,在不改变原有业务逻辑的基础上迁移至 K8S 生态圈内完成类似 NACOS 所提供的一系列特性并非难事。当然实际操作过程中还需要考虑更多细节因素比如安全性加固措施等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值