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

简介: 概要 服务部署在多个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

部署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

各个集群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

配置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

查看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

可以看到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

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

总结

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

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
11月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1380 108
|
10月前
|
Kubernetes Devops Docker
Kubernetes 和 Docker Swarm:现代 DevOps 的理想容器编排工具
本指南深入解析 Kubernetes 与 Docker Swarm 两大主流容器编排工具,涵盖安装、架构、网络、监控等核心维度,助您根据团队能力与业务需求精准选型,把握云原生时代的技术主动权。
860 115
|
10月前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
1025 3
|
存储 负载均衡 测试技术
ACK Gateway with Inference Extension:优化多机分布式大模型推理服务实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with Inference Extension组件,在Kubernetes环境中为多机分布式部署的LLM推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
存储 Kubernetes API
在K8S集群中,如何正确选择工作节点资源大小? 2
在K8S集群中,如何正确选择工作节点资源大小?
|
Kubernetes Serverless 异构计算
基于ACK One注册集群实现IDC中K8s集群以Serverless方式使用云上CPU/GPU资源
在前一篇文章《基于ACK One注册集群实现IDC中K8s集群添加云上CPU/GPU节点》中,我们介绍了如何为IDC中K8s集群添加云上节点,应对业务流量的增长,通过多级弹性调度,灵活使用云上资源,并通过自动弹性伸缩,提高使用率,降低云上成本。这种直接添加节点的方式,适合需要自定义配置节点(runtime,kubelet,NVIDIA等),需要特定ECS实例规格等场景。同时,这种方式意味您需要自行
基于ACK One注册集群实现IDC中K8s集群以Serverless方式使用云上CPU/GPU资源
|
Kubernetes Ubuntu Shell
shell 脚本实现 k8s 集群环境下指定 ns 资源的 yaml 文件备份
在基于 `k8s` 平台的容器化部署环境中,有时候需要快速的实现部署文件的迁移备份,当 `k8s` 平台部署一个 `app` 时,都会相应的产生一堆 `yaml` 文件,如果 `yaml` 文件数量较少,我们可以人工手动的方式进行拷贝,但是当 `yaml` 文件数量多,并且该 `k8s` 平台部署了多个 `app` 时,如果在采用...
1030 0
shell 脚本实现 k8s 集群环境下指定 ns 资源的 yaml 文件备份
|
Kubernetes API 调度
在K8S集群中,如何正确选择工作节点资源大小?1
在K8S集群中,如何正确选择工作节点资源大小?

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版
  • 推荐镜像

    更多