内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetesfrom PG视频:www.itpux.com官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。
本文档
风哥提示:
介绍Kubernetes多集群管理的方法。
Part01-多集群架构
1.1 架构概述
[root@k8s-master ~]# cat > /root/k8s-multi-cluster.txt << 'EOF' Kubernetes多集群管理 =================== 1. 多集群场景 - 多地域部署 - 灾备切换 - 开发/测试/生产隔离 - 资源扩展 2. 管理工具 - kubefed: 联邦集群 - rancher: 多集群管理平台 - argocd: 多集群GitOps - karmada: 跨集群调度 3. 网络互联 - VPN连接 - Service Mesh - 多集群服务发现 4. 数据同步 - 配置同步 - 密钥同步 - 资源分发 EOF
Part02-kubefed部署
2.1 安装kubefed
[root@k8s-master ~]# curl -LO https://github.com/kubernetes-sigs/kubefed/releases/download/v0.11.0/kubefedctl-0.11.0-linux-amd64.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 648 100 648 0 0 1234 0 –:–:– –:–:– –:–:– 1234
100 14.2M 100 14.2M 0 0 5678k 0 0:00:02 0:00:02 –:–:– 6789k
[root@k8s-master ~]# tar xzf kubefedctl-0.11.0-linux-amd64.tar.gz
[root@k8s-master ~]# mv kubefedctl /usr/local/bin/
[root@k8s-master ~]# chmod +x /usr/local/bin/kubefedctl
# 使用Helm安装kubefed
[root@k8s-master ~]# helm repo add kubefed-charts https://raw.githubusercontent.com/kubernetes-sigs/kubefed/master/charts
“kubefed-charts” has been added to your repositories
[root@k8s-master ~]# helm –namespace kube-federation-system install kubefed kubefed-charts/kubefed –create-namespace
NAME: kubefed
LAST DEPLOYED: Sat Apr 4 17:00:00 2026
NAMESPACE: kube-federation-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
# 查看kubefed状态
[root@k8s-master ~]# kubectl get pods -n kube-federation-system
NAME READY STATUS RESTARTS AGE
kubefed-admission-webhook-abc12 1/1 Running 0 2m
kubefed-controller-manager-abc12 1/1 Running 0 2m
Part03-集群联邦
3.1 加入集群
[root@k8s-master ~]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* cluster1 cluster1 admin-cluster1
cluster2 cluster2 admin-cluster2
cluster3 cluster3 admin-cluster3
# 加入集群到联邦
[root@k8s-master ~]# kubefedctl join cluster1 –cluster-context cluster1 –host-cluster-context cluster1 –v=2
I0404 17:00:00.123456 12345 join.go:123] cluster1 joined successfully
[root@k8s-master ~]# kubefedctl join cluster2 –cluster-context cluster2 –host-cluster-context cluster1 –v=2
I0404 17:00:00.234567 12345 join.go:123] cluster2 joined successfully
[root@k8s-master ~]# kubefedctl join cluster3 –cluster-context cluster3 –host-cluster-context cluster1 –v=2
I0404 17:00:00.345678 12345 join.go:123] cluster3 joined successfully
# 查看联邦集群
[root@k8s-master ~]# kubectl -n kube-federation-system get kubefedclusters
NAME AGE READY KUBERNETES-VERSION
cluster1 1m True v1.28.3
cluster2 1m True v1.28.3
cluster3 1m True v1.28.学习交流加群风哥微信: itpux-com3
# 创建联邦命名空间
[root@k8s-master ~]# cat > federated-namespace.yaml << 'EOF'
apiVersion: types.kubefed.io/v1beta1
kind: FederatedNamespace
metadata:
name: fgedu-prod
spec:
placement:
clusters:
- name: cluster1
- name: cluster2
- name: cluster3
EOF
[root@k8s-master ~]# kubectl apply -f federated-namespace.yaml
federatednamespace.types.kubefed.io/fgedu-prod created
# 创建联邦Deployment
[root@k8s-master ~]# cat > federated-deployment.yaml << 'EOF'
apiVersion: types.kubefed.io/v1beta1
kind: FederatedDeployment
metadata:
name: fgedu-app
namespace: fgedu-prod
spec:
template:
metadata:
labels:
app: fgedu-app
spec:
replicas: 3
selector:
matchLabels:
app: fgedu-app
template:
metadata:
labels:
app: fgedu-app
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
placement:
clusters:
- name: cluster1
- name: cluster2
- name: cluster3
overrides:
- clusterName: cluster1
clusterOverrides:
- path: spec.replicas
value: 5
- clusterName: cluster2
clusterOverrides:
- path: spec.replicas
value: 3
- clusterName: cluster3
clusterOverrides:
- path: spec.replicas
value: 2
EOF
[root@k8s-master ~]# kubectl apply -f federa更多学习教程公众号风哥教程itpux_comted-deployment.yaml
federateddeployment.types.kubefed.io/fgedu-app created
Part04-多集群服务
4.1 跨集群服务发现
[root@k8s-master ~]# cat > federated-service.更多视频教程www.fgedu.net.cnyaml << 'EOF' apiVersion: types.kubefed.io/v1beta1 kind: FederatedService metadata: name: fgedu-app namespace: fgedu-prod spec: template: spec: type: LoadBalancer ports: - port: 80 targetPort: 80 selector: app: fgedu-app placement: clusters: - name: cluster1 - name: cluster2 - name: cluster3 EOF [root@k8s-master ~]# kubectl apply -f federated-service.yaml federatedservice.types.kubefed.io/fgedu-app created # 验证各集群部署 [root@k8s-master ~]# kubectl --context cluster1 get deployment -n fgedu-prod NAME READY UP-TO-DATE AVAILABLE AGE fgedu-app 5/5 5 5 5m [root@k8s-master ~]# kubectl --context cluster2 get deployment -n fgedu-prod NAME READY UP-TO-DATE AVAILABLE AGE fgedu-app 3/3 3 3 5m [root@k8s-master ~]# kubectl --context cluster3 get deployment -n fgedu-prod NAME READY UP-TO-DATE AVAILABLE AGE fgedu-app 2/2 2 2 5m # 查看联邦资源状态 [root@k8s-master ~]# kubectl get federateddeployment -n fgedu-prod NAME AGE fgedu-app 5m # 查看详细状态 [root@k8s-master ~]# kubectl describe federateddeployment fgedu-app -n fgedu-prod Name: fgedu-app Namespace: fgedu-prod Labels:
Annotations:
API Version: types.kubefed.io/v1beta1
Kind: FederatedDeployment
Metadata:
Creation Timestamp: 2026-04-04T09:00:00Z
Generation: 1
Resource Version: 123456
UID: abc123-def456
Spec:
Overrides:
Cluster Name: cluster1
Cluster Overrides:
Path: spec.replicas
Value: 5
Cluster Name: cluster2
Cluster Overrides:
Path: spec.replicas
Value: 3
Cluster Name: cluster3
Cluster Overrides:
Path: spec.replicas
Value: 2
Placement:
Clusters:
Name: cluster1
Name: cluster2
Name: cluster3
Template:
Metadata:
Creation Timestamp:
Labels:
App: fgedu-app
Spec:
Replicas: 3
Events:
- 统一管理集群配置
- 配置跨集群网络
- 实现服务发现机制
- 制定灾备切换策略
- 监控集群健康状态
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
