容器服务kubernetes federation v2实践三:基于ReplicaSchedulingPreference的集群调度

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 概要 服务部署在多个k8s集群中,往往希望服务跨多个集群进行调度设置。在federation v2中,可以通过ReplicaSchedulingPreference来满足联邦集群的调度设置。

概要

服务部署在多个k8s集群中,往往希望服务跨多个集群进行调度设置。在federation v2中,可以通过ReplicaSchedulingPreference来满足联邦集群的调度设置。下面通过一个简单例子来介绍federation v2中ReplicaSchedulingPreference的用法。

原理分析

federation-controller-manager监听到ReplicaSchedulingPreference变化的时候,通过分析调度配置,生成FederatedDeployment(并且会监听该变化,进行终态保持,即要修改各个集群Deployment只能修改ReplicaSchedulingPreference),然后FederatedDeployment监听到变化会生成各个集群的Deployment。
image

环境准备

参考阿里云Kubernetes容器服务上体验Federation v2,完成两个集群的join,并配置好kubeconfig, 如下:

kubectl config get-contexts
CURRENT   NAME       CLUSTER    AUTHINFO            NAMESPACE
*         cluster1   cluster1   kubernetes-admin1
          cluster2   cluster2   kubernetes-admin2
AI 代码解读

部署FederatedDeployment

执行如下yaml:

apiVersion: v1
kind: Namespace
metadata:
  name: test-namespace

---

apiVersion: types.federation.k8s.io/v1alpha1
kind: FederatedNamespace
metadata:
  name: test-namespace
  namespace: test-namespace
spec:
  placement:
    clusterNames:
    - cluster1
    - cluster2

---

apiVersion: types.federation.k8s.io/v1alpha1
kind: FederatedDeployment
metadata:
  name: test-deployment
  namespace: test-namespace
spec:
  template:
    metadata:
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx
            name: nginx
            resources:
              limits:
                cpu: 500m
              requests:
                cpu: 200m
  placement:
    clusterNames:
    - cluster1
    - cluster2
AI 代码解读

各个集群Deployment情况如下:

kubectl get deployment test-deployment -n test-namespace --context cluster1
NAME              DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
test-deployment   2         2         2            2           8h

kubectl get deployment test-deployment -n test-namespace --context cluster2
NAME              DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
test-deployment   2         2         2            2           8h
AI 代码解读

配置ReplicaSchedulingPreference

apiVersion: scheduling.federation.k8s.io/v1alpha1
kind: ReplicaSchedulingPreference
metadata:
  name: test-deployment
  namespace: test-namespace
spec:
  targetKind: FederatedDeployment
  totalReplicas: 5
  clusters:
    "cluster1":
       weight: 1
       minReplicas: 1
    "cluster2":
       weight: 1
       minReplicas: 1
AI 代码解读

查看FederatedDeployment详情:

Name:         test-deployment
Namespace:    test-namespace
Labels:       <none>
Annotations:  <none>
API Version:  types.federation.k8s.io/v1alpha1
Kind:         FederatedDeployment
Metadata:
  Creation Timestamp:  2019-05-16T02:39:09Z
  Finalizers:
    federation.k8s.io/sync-controller
  Generation:        1
  Resource Version:  218975248
  Self Link:         /apis/types.federation.k8s.io/v1alpha1/namespaces/test-namespace/federateddeployments/test-deployment
  UID:               c82681b0-7783-11e9-bcd8-e6193977a31d
Spec:
  Overrides:
    Cluster Name:  cluster2
    Cluster Overrides:
      Path:        spec.replicas
      Value:       3
    Cluster Name:  cluster1
    Cluster Overrides:
      Path:   spec.replicas
      Value:  4
  Placement:
    Cluster Names:
      cluster2
      cluster1
  Template:
    Metadata:
      Labels:
        App:  nginx
    Spec:
      Replicas:  2
      Selector:
        Match Labels:
          App:  nginx
      Template:
        Metadata:
          Labels:
            App:  nginx
        Spec:
          Containers:
            Image:  nginx
            Name:   nginx
AI 代码解读

可以看到FederatedDeployment信息已经被修改,查看各个集群Deployment详情:

kubectl get deployment test-deployment -n test-namespace --context cluster1
NAME              DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
test-deployment   4         4         4            4           9h

kubectl get deployment test-deployment -n test-namespace --context cluster2
NAME              DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
test-deployment   3         3         3            3           9h
AI 代码解读

可以看到通过配置ReplicaSchedulingPreference来配置集群调度策略,当然还有其他的一些属性可以配置,比如每个集群的调度权重、最小副本数和最大副本数。

总结

在Federation v2联邦集群中,可以通过ReplicaSchedulingPreference来配置各个集群的调度策略,统一管理各个集群服务的分布。

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
钧博
+关注
目录
打赏
0
0
0
0
54637
分享
相关文章
容器技术实践:在Ubuntu上使用Docker安装MySQL的步骤。
通过以上的操作,你已经步入了Docker和MySQL的世界,享受了容器技术给你带来的便利。这个旅程中你可能会遇到各种挑战,但是只要你沿着我们划定的路线行进,你就一定可以达到目的地。这就是Ubuntu、Docker和MySQL的灵魂所在,它们为你开辟了一条通往新探索的道路,带你亲身感受到了技术的力量。欢迎在Ubuntu的广阔大海中探索,用Docker技术引领你的航行,随时准备感受新技术带来的震撼和乐趣。
31 16
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
ACK Gateway with AI Extension:面向Kubernetes大模型推理的智能路由实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with AI Extension组件,在Kubernetes环境中为大语言模型(LLM)推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
ACK Gateway with AI Extension:大模型推理的模型灰度实践
本文介绍了如何使用 ACK Gateway with AI Extension 组件在云原生环境中实现大语言模型(LLM)推理服务的灰度发布和流量分发。该组件专为 LLM 推理场景设计,支持四层/七层流量路由,并提供基于模型服务器负载感知的智能负载均衡能力。通过自定义资源(CRD),如 InferencePool 和 InferenceModel,可以灵活配置推理服务的流量策略,包括模型灰度发布和流量镜像。
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
部署应用到阿里云容器服务 Kubernetes| 学习笔记
快速学习部署应用到阿里云容器服务 Kubernetes。
228 0
部署应用到阿里云容器服务 Kubernetes| 学习笔记
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
47 33

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版