概述
随着容器技术的发展和普及, 以 Kubernetes 为标准的容器技术已经成为云计算事实标准. 在业务形态和云灾备场景下, 需要服务进行多地域部署, 这就需要对 k8s 不同地域的集群进行管理. Federation(集群联邦) 是 k8s 社区中重要的多云管理项目, 实现了跨地区跨服务商管理多个 k8s 集群的功能.
目前社区有 Federation v1 和 v2 两个版本, v1 已被官方强烈推荐不使用, 下面介绍如何快速在阿里云 Kubernetes 容器服务上搭建和使用 Federation v2.
准备 Kubernetes 集群
需要准备两个 Kubernetes 集群, 可以通过容器服务管理控制台非常方便地快速创建 Kubernetes 集群. 具体过程可以参考创建 Kubernetes 集群.
部署 Federation v2
登录 [容器服务管理控制台] , 点击左侧的 [应用目录] .
点击进去, 编辑参数和选择部署集群 (需要部署在 federation 主集群上).
部署成功之后跳转至下面页面:
体验 Federation v2
确认本地已经安装 kubefedctl 工具, 并且已经配置好 kubeconfig, 配置如下图所示:
- kubectl config get-contexts
- CURRENT NAME CLUSTER AUTHINFO NAMESPACE
- * cluster1 cluster1 kubernetes-admin1
- cluster2 cluster2 kubernetes-admin2
以 cluster1 为主集群, 组建 federation 集群:
- kubefedctl join cluster1 --cluster-context cluster1 \
- --host-cluster-context cluster1 --add-to-registry --v=2
- kubefedctl join cluster2 --cluster-context cluster2 \
- --host-cluster-context cluster1 --add-to-registry --v=2
查看 join 结果:
- kubectl get federatedcluster -n federation-system
- NAME READY AGE
- cluster1 True 23s
- cluster2 True 10s
创建 federateddeployment 验证:
- 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
查看 cluster1 和 cluster2 deployment 情况:
- kubectl get deployment -n test-namespace --context cluster1
- NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
- test-deployment 2 2 2 2 71s
- kubectl get deployment -n test-namespace --context cluster2
- NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
- test-deployment 2 2 2 2 77s
说明可以通过 federateddeployment 来部署每个集群的 deployment.
总结
本文通过介绍如何在阿里云 Kubernetes 容器服务上搭建 Federation v2 环境, 体验使用 Federation v2 带来的多集群管理的便捷性.
来源: https://yq.aliyun.com/articles/701928