文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何使用 K8s 实现跨集群管理,这篇文章告诉你了!

2024-12-01 16:52

关注

一但集群进行联邦后,就可以利用 Federation API资源来统一管理多个集群的Kubernetes API资源,如定义Deployment如何部署到不同集群上,其集群所需的副本数等。

通过集群联邦,我们可以:

简化管理多个集群的Kubernetes 组件,如Deployment, Service 等

在多个集群之间分散工作负载,以提升应用的可靠性

跨集群的资源编排,依据编排策略在多个集群进行应用部署

在不同集群中,能更快速更容易地迁移应用

跨集群的服务发现,服务可以实现地理位置感知,以降低延迟(不一定必须用kubefed实现)

实践多云(Multi-cloud)或混合云(Hybird Cloud)的部署

使用场景

这篇文章主要记录跨集群资源同步的内容,跨集群服务发现的开新的文章记录。

二、安装

Federation v2 的安装分两个部分,一是 Controller Plan 和 kubefedctl。其中 Controller Plan是基于 helm 安装的,所以我们先安装helm。

helm 安装

可自行查找文档安装。

Controller Plan

Controller Plan 可以使用 Helm 部署(目前 Helm 还是使用 v2 版本),参考官方安装文档:https://github.com/kubernetes-sigs/kubefed/blob/master/charts/kubefed/README.md

添加源

$ helm repo add kubefed-charts https://raw.githubusercontent.com/kubernetes-sigs/kubefed/master/charts

搜索

$ helm search repo kubefed

安装

$ helm --namespace kube-federation-system upgrade -i kubefed kubefed-charts/kubefed --version=0.6.1 --create-namespace

Release "kubefed" does not exist. Installing it now.
NAME: kubefed
LAST DEPLOYED: Wed Aug 5 16:03:46 2020
NAMESPACE: kube-federation-system
STATUS: deployed
REVISION: 1
TEST SUITE: None

kubefedctl

kubefedctl 是一个二进制程序,可以在 Github 的 Release 页面找到最新版本的下载地址:https://github.com/kubernetes-sigs/kubefed/releases

$ wget https://github.com/kubernetes-sigs/kubefed/releases/download/v0.6.1/kubefedctl-0.6.1-linux-amd64.tgz
$ tar -zxvf kubefedctl-0.6.1-linux-amd64.tgz
$ mv kubefedctl /usr/local/bin/

三、集群操作

在主集群上设置从集群context信息

参考我先前的文章 《kubernetes switch context》

kubectl config get-contexts
kubectl config use-context n1
kubectl config use-context context-cluster1-admin

从集群加入主集群

基本使用方式为:

kubefedctl join <集群名称CLUSTER> --cluster-context <要接入集群的 context NAME> --host-cluster-context <HOST 集群的 context name>

例如:

kubefedctl join n1 --cluster-context n1 --host-cluster-context context-cluster1-admin --v=2
kubefedctl join n2 --cluster-context n2 --host-cluster-context context-cluster1-admin --v=2

从集群解绑

kubefedctl unjoin n2 --cluster-context n2 --host-cluster-context context-cluster1-admin --v=2

获得集群信息

Kubefed 是利用 CRD 来存储自己所需要的数据,因此当使用 kubefedctl join 后,可以在 host cluster 查看到集群信息:

$ kubectl -n kube-federation-system get kubefedclusters

kubefedctl join 命令只是将 Kubeconfig 里的配置转化为 KubeFedCluster 自定义资源存储到 kube-federation-system 命名空间中。

kubectl -n kube-federation-system get kubefedclusters -oyaml n1

四、跨集群同步资源

启用资源联邦化

对于 KubeFed 来说,资源管理分两类,一是资源的类型管理,另一个是被联邦(federated)的资源管理。

对于资源类型,kubefedctl 提供了 enable 来使新的资源可以被联邦管理:

kubefedctl enable <target kubernetes API type>

其中可以使用以下的描述:

因为 Kubefed 是通过 CRD 管理资源,因此,当 enable 执行之后可以看到 Host Cluster 中新增了一种名为 federatedvirtualservices 的 CRD:

$ kubectl get crd | grep federated

默认已启用的联邦资源:

也可以对自定义CRD资源启用联邦。kubefedctl enable 完成了资源类型的管理,对于需要被联邦的资源管理编辑基于新创建的 CRD 展开的。

不过要部署资源之前,需要先创建 federatednamespaces ,多集群的资源只会部署到被 kubefed 管理的 namespace 中。

资源操作示例

使用官方的demo,可以快速体验示例:https://github.com/kubernetes-sigs/kubefed/tree/master/example/sample1

创建ns

kubectl apply -f example/sample1/namespace.yaml -f example/sample1/federatednamespace.yaml

创建测试资源

kubectl apply -R -f example/sample1

注意,官方特地留了一个资源让我们手动enable,运行上面命令后会出现如下提示:

unable to recognize "example/sample1/federated.yaml": no matches for kind "Federated" in version "types.kubefed.io/v1beta1",

需要对ClusterRoleBinding 类型启用联邦化。

kubefedctl enable ClusterRoleBinding

kubectl apply -R -f example/sample1

最后在n1 n2集群上运行结果如下:

确认正常运行:

常用命令备忘

helm list --all-namespaces

// 安装集群

helm --namespace kube-federation-system-666 upgrade -i kubefed kubefed --version=0.3.0 --create-namespace

kubefedctl join <cluster name> --cluster-context <context name> --host-cluster-context <context name> --v=2

// context
kubectl config get-contexts
kubectl config use-context n1
kubectl config use-context context-cluster1-admin

// get cluster
kubectl -n kube-federation-system get kubefedclusters // 获得集群信息
kubectl api-resources | grep kubefed // 查看集群得api信息

$ helm --namespace kube-federation-system upgrade -i kubefed kubefed-charts/kubefed --version=0.6.1 --create-namespace

kubefedctl unjoin n1 --cluster-context n1 --host-cluster-context m1 --v=2
kubectl config get-contexts

// 卸载集群
kubectl -n kube-federation-system delete FederatedTypeConfig --all
helm --namespace kube-federation-system uninstall kubefed


来源:高效运维内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯