1. Federated API types

查看已经注册的 API 可类型,执行命令 kubectl get FederatedTypeConfig -nkube-federation-system

# kubectl get FederatedTypeConfig -nkube-federation-system
NAME                                            AGE
applications.app.k8s.io                         15h
clusterrolebindings.rbac.authorization.k8s.io   15h
clusterroles.rbac.authorization.k8s.io          15h
configmaps                                      15h
configs.notification.kubesphere.io              15h
deployments.apps                                15h
globalrolebindings.iam.kubesphere.io            15h
globalroles.iam.kubesphere.io                   15h
groupbindings.iam.kubesphere.io                 15h
groups.iam.kubesphere.io                        15h
ingresses.extensions                            15h
jobs.batch                                      15h
limitranges                                     15h
namespaces                                      15h
persistentvolumeclaims                          15h
receivers.notification.kubesphere.io            15h
replicasets.apps                                15h
secrets                                         15h
serviceaccounts                                 15h
services                                        15h
statefulsets.apps                               15h
users.iam.kubesphere.io                         15h
workspacerolebindings.iam.kubesphere.io         15h
workspaceroles.iam.kubesphere.io                15h
workspaces.tenant.kubesphere.io                 15h

1.1 开启 Federated API types

可以使用 kubefedctl 命令开启任何 Kubernetes API 类型(包括 CRD)的联邦,如下所示。注意:CRD 的联邦需要启用 CRD Kubernetes 类型(customresourcedefinitions),然后联邦成员集群上的任何自定义 CRD。 如果 CRD Kubernetes 类型未启用且其 Federated 等效的 CRD 也未联邦,则向该集群的 propagation 将失败。

kubefedctl enable customresourcedefinitions
kubefedctl federate crd <target kubernetes API type>  # <target kubernetes API type> = mytype.mygroup.mydomain.io

<target kubernetes API type>  可以是下列中的:

  • the Kind (e.g. Deployment)
  • plural name (e.g. deployments)
  • group-qualified plural name (e.g deployment.apps), or
  • short name (e.g. deploy)

对于预期的目标 API 类型。

注意:要专门针对某个类型的某个 API 组,可以在 deployment.apps 中附加该组的名称。 对于 Pod 或 Service 等核心 Kubernetes 类型,这是不行的,因为没有分配给它们的特定 API 组。 因此,核心类型始终优先于来自另一个 API 组的其他同名类型。 有关可能命名冲突的影响的更多信息,请参阅使用非默认 API 组启用 API 类型部分。

kubefedctl 命令将会创建:

  • 以 Federated<Kind> 命名联邦类型的 CRD
  • 在 KubeFed 系统命名空间具有目标类型的组限定复数名称的 FederatedTypeConfig

FederatedTypeConfig 将联邦类型 CRD 与目标 kubernetes 类型相关联,从而能够将给定类型的联合资源 propaga 到成员集群。

用于命名 FederatedTypeConfig 的格式为 <target kubernetes API type name>.<group name>,但 kubernetes core group types 使用的名称格式为 <target kubernetes API type name>。

您还可以使用以下命令将 yaml 输出到 stdout,而不是将其应用到 API Server。

kubefedctl enable <target API type> --output=yaml

注意:API 类型的联邦要求 API 类型安装在所有成员集群上。 如果 API 类型未安装在成员集群上,则 propagation 到该集群将失败。

1.2 在所有成员集群上确认 API 类型的安装

# kubectl --context=kubernetes-admin api-resources --api-group=types.kubefed.io

1.3 在非默认的API Group 启用API Type

kubefedctl enable 用于启用复数名称(例如 deployments.example.com 和 deployments.apps)匹配的类型时,生成的联邦类型的 crd 名称也将匹配(例如 deployments.types.kubefed.io)。

kubefedctl enable --federated-group string 指定用于生成的联邦类型的 API 组的名称。 默认是 types.kubefed.io。 如果使用非默认组启用某种联邦类型,则需要更新 KubeFed 控制器管理器的 RBAC 权限以包含新组的权限。

例如,作为 KubeFed 控制平面部署的一部分,deployments.apps 默认启用。 要启用 deployments.example.com,应该:

kubefedctl enable deployments.example.com --federated-group kubefed.example.com
kubectl patch clusterrole kubefed-role --type='json' -p='[{"op": "add", "path": "/rules/1", "value": {"apiGroups": ["kubefed.example.com"],"resources": ["*"],"verbs": ["get","watch","list","update"]}
}]'

2. 联邦一个目标资源

除了启用和禁用上一节中指定的传播类型外,kubefedctl 还可用于联邦 API 类型的目标资源。 我们在这里定义了术语 federate,并在 kudefedctl 中使用了具有类似含义的命令关键字 federate。

kubefedctl federate 从 kubernetes 资源创建联邦资源。 联邦资源将嵌入 kubernetes 资源作为其模板,其 placement 将选择所有集群。

kubefedctl federate <target kubernetes API type> <target resource> [flags]

如果没有额外指定 --namespace,将根据客户端 kubeconfig 上下文在命名空间中搜索 <target resource>。 请注意,--namespace 标志在联邦命名空间本身时没有意义,即使指定也会被丢弃。

默认情况下,kubefedctl federate 在与目标资源相同的命名空间中创建联邦资源。 这要求目标类型已经为联邦启用(即通过 kubefedctl enable)。

如果指定了 --output=yaml,并且目标类型尚未启用联邦,kubefedctl federate 将在生成联邦资源时采用联邦类型的默认形式。 这可能与以非默认方式启用联邦类型的 kubefed 控制平面不兼容(例如,联邦类型的组已设置为 types.kubefed.io 以外的其他内容)。

3. Propagation status

当同步控制器协调联邦资源与成员集群时,传播状态将按照以下示例写入资源:

apiVersion: types.kubefed.io/v1beta1
kind: FederatedNamespace
metadata:name: mynsnamespace: myns
spec:placement:clusterSelector: {}
status:# The status True of the condition of type Propagation# indicates that the state of all member clusters is as# intended as of the last probe time.conditions:- type: Propagationstatus: TruelastTransitionTime: "2019-05-08T01:23:20Z"lastUpdateTime: "2019-05-08T01:23:20Z"# The namespace 'myns' has been verified to exist in the# following clusters as of the lastUpdateTime recorded# in the 'Propagation' condition. Since that time, no# change has been detected to this resource or the# resources it manages.clusters:- name: cluster1- name: cluster2

Overrides

Using Cluster Selector 使用集群选择器

除了通过联邦资源的 spec.placement.clusters 字段指定资源应该传播到的显式集群列表之外,还可以使用 spec.placement.clusterSelector 字段提供一个标签选择器来确定列表运行时的集群数量。

下列命令给 kubeFedcluster 打上标签:

kubectl label kubefedclusters -n kube-federation-system cluster1 foo=bar

Neither spec.placement.clusters nor spec.placement.clusterSelector is provided

在这种情况下,您可以按上述方式设置 spec: {} 或从 plcacement 策略删除 spec 字段。 资源不会传播到成员集群。

spec:
  placement: {}

  Both spec.placement.clusters and spec.placement.clusterSelector are provided

对于这种情况,spec.placement.clusterSelector 将被忽略,因为提供了 spec.placement.clusters。 这确保了运行时调度的结果优先于集群选择器的手动定义。

spec:placement:clusters:- name: cluster2- name: cluster1clusterSelector:matchLabels:foo: bar

如果 spec.placement.clusters 提供但为空,spec.placement.clusterSelector 也将被忽略。 在以下示例中,不会选择任何集群:

spec:placement:clusters: []clusterSelector:matchLabels:foo: bar

 spec.placement.clusters is not provided, spec.placement.clusterSelector is provided but empty

在这种情况下,资源将传播到所有成员集群。

spec:placement:clusterSelector: {}

  spec.placement.clusters is not provided, spec.placement.clusterSelector is provided and not empty

在这种情况下,资源只会传播到标有 foo:bar 的成员集群。

spec:placement:clusterSelector:matchLabels:foo: bar

Scheduling

KubeFed 提供了一种机制来将工作负载实例分散到不同的集群中,基于总副本数与集群的定义策略来将资源进行编排。编排策略是通过建立 ReplicaSchedulingPreference(RSP),由 KubeFed RSP Controller 监听与获取 RSP 资源来将工作负载实例建立到指定的集群上。

ReplicaSchedulingPreference(RSP)

ReplicaSchedulingPreference 提供了一种自动化机制,用于将 deployment 或 replicaset 基于联邦工作负载,其以总的副本书分配和维护到联合集群中。 这是基于用户给出的高级用户首选项。 这些首选项包括加权分布的语义和分布副本的限制(最小和最大)。 这些还包括允许动态重新分配副本的语义,以防某些副本 pod 在某些集群中保持未调度,例如由于该集群中的资源不足。

RSP 控制器在同步循环中工作,观察 RSP 资源和匹配的命名空间/名称对,针对的资源FederatedDeployment 或 FederatedReplicaset。

在所有可用集群分发所有副本

apiVersion: scheduling.kubefed.io/v1alpha1
kind: ReplicaSchedulingPreference
metadata:name: test-deploymentnamespace: test-ns
spec:targetKind: FederatedDeploymenttotalReplicas: 9clusters:"*":weight: 1

按照权重属性分发所有副本

apiVersion: scheduling.kubefed.io/v1alpha1
kind: ReplicaSchedulingPreference
metadata:name: test-deploymentnamespace: test-ns
spec:targetKind: FederatedDeploymenttotalReplicas: 9clusters:A:weight: 1B:weight: 2

以加权比例分发副本,还强制每个集群的副本限制。A获得4个,B获得5个副本。

apiVersion: scheduling.kubefed.io/v1alpha1
kind: ReplicaSchedulingPreference
metadata:name: test-deploymentnamespace: test-ns
spec:targetKind: FederatedDeploymenttotalReplicas: 9clusters:A:minReplicas: 4maxReplicas: 6weight: 1B:minReplicas: 4maxReplicas: 8weight: 2

参考:

https://github.com/kubernetes-sigs/kubefed/blob/master/docs/userguide.md

【kubernetes/k8s概念】多集群联邦 kubefed 用户向导相关推荐

  1. 构建高可靠hadoop集群之0-hadoop用户向导

    本文翻译自:http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html 基于2.8. ...

  2. Kubernetes(k8s)之在集群环境部署Prometheus(普罗米修斯监控)和集群的ui管理工具Grafana

    Prometheus Prometheus 演示环境 部署Prometheus和Grafana 测试 Prometheus Prometheus是一个开源系统监控和警报工具包. 现在是一个独立的开源项 ...

  3. KubeFed 集群联邦的演进和架构概览

    KubeFed 集群联邦的演进和架构概览 Kubernetes 集群联邦 Kubernetes 从 1.8 版本起就声称单集群最多可支持 5000 个节点和 15 万个 Pod,我相信很少有公司会部署 ...

  4. Kubernetes使用集群联邦实现多集群管理

    Kubernetes在1.3版本之后,增加了"集群联邦"Federation的功能.这个功能使企业能够快速有效的.低成本的跨区跨域.甚至在不同的云平台上运行集群.这个功能可以按照地 ...

  5. 阿里云上Kubernetes集群联邦

    摘要: kubernetes集群让您能够方便的部署管理运维容器化的应用.但是实际情况中经常遇到的一些问题,就是单个集群通常无法跨单个云厂商的多个Region,更不用说支持跨跨域不同的云厂商.这样会给企 ...

  6. 阿里云上Kubernetes集群联邦 1

    摘要: kubernetes集群让您能够方便的部署管理运维容器化的应用.但是实际情况中经常遇到的一些问题,就是单个集群通常无法跨单个云厂商的多个Region,更不用说支持跨跨域不同的云厂商.这样会给企 ...

  7. 【Linux云计算架构:第四阶段-Linux虚拟化-私有云-docker】第12章—— 搭建 Kubernetes 的 web 管理界面和基于 k8s 搭建+redis 集群案例

    13.1 部署 Kubernetes Dashboard web 界面 13.1.1 创建 dashboard-deployment.yaml deployment 配置文件 13.1.2 创建 da ...

  8. 企业实战-Kubernetes(十四)k8s高可用集群

    k8s高可用集群 1 使用pacemaker搭建k8s的高可用(haproxy的高可用) 安装并配置haproxy 安装并配置pacemaker 2 k8s集群部署 master准备 三个结点关闭交换 ...

  9. Kubernetes学习-K8S安装篇-集群安装网段划分

    Kubernetes学习-K8S安装篇-集群安装网段划分 1. 集群安装网段划分 2. 网段IP常用设置 3. 集群安装网段划分注意事项 1. 集群安装网段划分 集群安装时会涉及到三个网段: 宿主机网 ...

最新文章

  1. 如何从NumPy直接创建RNN?
  2. MySQL连表分组统计使用count查询出数据不准确问题解决方案
  3. 设计模式之_Iterator_02
  4. Weblogic EJB 学习笔记(3)精
  5. CVPR2021 | 深度解读RepVGG!
  6. 单元格内多个姓名拆分成一列_把订单按货品拆分成多行
  7. NKOJ1472 警卫安排
  8. 没有加载jawt导致java.lang.UnsatisfiedLinkError
  9. T-SQL笔记8:索引
  10. Xshell6及Xftp6的使用
  11. selenium chromedriver 无头浏览器检测
  12. FUP A17H/A17CH 微量高速冷冻离心机的优劣势
  13. Unity(数据库SQLite)
  14. 前沿|PaddlePaddle开源项目DeepNav“无人船”炼成记(二)
  15. 基于JAVA高校社区生鲜配送系统计算机毕业设计源码+数据库+lw文档+系统+部署
  16. Python Selenium爬虫实现歌曲免费下载
  17. 0 公式 0 基础学习电磁兼容 — 1. EMC 测试类型简介
  18. skycc淘宝客推广软件 V8.2免费版
  19. python-分分钟入门-基础语法
  20. [OpenGL] 屏幕后处理:景深效果

热门文章

  1. 多目标跟踪SOTA | TransTrack改进版,模型减小60%,复杂性降低80%!
  2. python3抓取杭州房价信息
  3. ADODB , ADODB_lite
  4. 昇腾Atlas200DK学习笔记(一)——环境部署
  5. C / C++ 计算程序运行的时间
  6. python中oo是什么意思_python中的OO
  7. 程序员埋逻辑炸弹,被判 6 个月
  8. CSS3|大数据热点图案例(带图+代码)
  9. 第三届全国大学生算法设计与编程挑战赛题解【金奖全国第九】
  10. E28 LoRa模块透传 定点传输 RSSI测试与MicroPython应用