kubernetes
  • Introduction
  • 安装
    • 组件端口
    • 二进制安装
    • Kubeadm
      • 安装单Master集群
      • 安装高可用集群(手动分发证书)
      • 安装高可用集群(自动上传证书)
      • 安装ETCD集群
      • 安装高可用集群(外部ETCD)
    • 启动参数解析
      • ETCD相关参数
  • 负载均衡
    • Service
    • Ingress
    • 安装MetalLB
    • Nginx-ingress-controller
      • 转发TCP与UDP服务
      • 启动参数
      • 自定义Nginx模板
  • 存储
    • Volume
    • PV与PVC
    • StorageClass
    • Local-PV
      • Static-Provisioner
    • 实践
      • Ceph-RBD
      • NFS
  • 有状态服务
    • Mysql实践
    • Operator
      • Etcd
      • Zookeeper
      • Mysql
  • 认证与授权
    • 认证
      • 实践
    • 授权
  • Helm
    • 安装
    • Chart
      • 依赖
    • Helm命令
    • Repository
  • 日志
  • 监控
    • Prometheus体系
      • Prometheus
        • 内置函数
        • 配置
          • 规则文件
        • PromQL
      • Exporter
        • Metrics
      • Grafana
        • 配置
      • AlertManager
        • 配置
    • 容器监控
      • Cadvisor的指标
      • k8s中部署Prom与Cadvisor
  • Istio
  • 资源预留
    • imagefs与nodefs
    • 总结
  • 集群联邦
    • 联邦DNS原理
    • 联邦DNS安装
    • 安装federation-v1
  • Other
    • ImagePullSecret
    • QOS
    • Apiserver的代理
    • 资源配额
Powered by GitBook
On this page
  • 准备三个集群
  • 安装kubectl
  • 部署coredns-provider
  • 获取kubefed
  • 部署kubefed的control plane
  • 添加集群
  • 发布Deployment
  • 跨集群服务发现
  • 跨集群负载均衡
  • FAQ
  • Reference

Was this helpful?

  1. 集群联邦

安装federation-v1

准备三个集群

准备三个kubernetes集群,它们的用处分别为

  • f-cluster:用来部署kubefed的组件, 192.168.1.103

  • a-cluster:联邦下的一个集群 192.168.1.101

  • b-cluster:联邦下的一个集群 192.168.1.102

安装kubectl

安装好kubectl并设置好kubeconfig,使用其能连上三个kubernetes集群,kubeconfig文件的内容应该如下:

apiVersion: v1
kind: Config
preferences: {}

clusters:
  - name: f-cluster
    cluster:
      server: https://192.168.1.103:6443
      certificate-authority-data: xxxxxxxxxxx
  - name: a-cluster
    cluster:
      server: https://192.168.1.101:6443
      certificate-authority-data: xxxxxxxxxxx
  - name: b-cluster
    cluster:
      server: https://192.168.1.102:6443
      certificate-authority-data: xxxxxxxxxxx

users:
  - name: f-admin
    user: 
      client-key-data: xxxxxxxxxxx
      client-certificate-data: xxxxxxxxxxxxx
  - name: a-admin
    user: 
      client-key-data: xxxxxxxxxxx
      client-certificate-data: xxxxxxxxxxxxx
  - name: b-admin
    user: 
      client-key-data: xxxxxxxxxxx
      client-certificate-data: xxxxxxxxxxxxx

contexts:
  - name: f-context
    context:
      cluster: f-cluster
      user: f-admin
  - name: a-context
    context:
      cluster: a-cluster
      user: a-admin
  - name: b-context
    context:
      cluster: b-cluster
      user: b-admin

current-context: f-context

执行命令kubectl config get-clusters查看集群信息

$ kubectl config getc-clusters
NAME
b-cluster
f-cluster
a-cluster

执行kubectl config get-contexts查看上下文信息

$ kubectl config get-contexts
CURRENT   NAME        CLUSTER     AUTHINFO   NAMESPACE
          a-context   a-cluster   a-admin    
          b-context   b-cluster   b-admin    
*         f-context   f-cluster   f-admin

部署coredns-provider

### deperecated
coredns将数据存储在etcd中,所以我们先部署etcd集群,这里使用helm来部署:

$ helm install --namespace federation --name etcd-operator stable/etcd-operator
$ helm upgrade --namespace federation --set cluster.enabled=true etcd-operator stable/etcd-operator


部署成功后,便可以在集群中通过`http://etcd-cluster.federation:2379`来访问该etcd服务

coredns将数据存储在etcd中,所以我们先部署etcd集群,这里我们额外先部署好,假设coredns的etcd的URL为http://192.168.1.103:3379:

接下来,我们也用helm来部署coredns服务:

$ helm install --namespace federation --name coredns -f Values.yaml stable/coredns

Values.yaml文件的内容如下:

isClusterService: false
serviceType: "NodePort"
plugins:
  kubernetes:
    enabled: false
  etcd:
    enabled: true
    zones:
    - "example.com."
    endpoint: "http://192.168.1.103:3379"

检查coredns与etcd的pod有正常运行

获取kubefed

从github上下载kubefed的压缩包(https://github.com/kubernetes-retired/federation/releases),比如我们下载的是release_v1.9.0-alpha.3_federation-client-linux-amd64.tar然后解压

$ tar -xzvf release_v1.9.0-alpha.3_federation-client-linux-amd64.tar
$ sudo cp federation/client/bin/kubefed /usr/local/bin
$ sudo chmod +x /usr/local/bin/kubefed

部署kubefed的control plane

control-plane的apiserver需要使用etcd存储数据,我们先提前安装好一个etcd集群供它使用,假设etcd服务的地址为http://192.168.1.103:4379

接下来,你们执行以下命令来创建一个名字叫federation的集群联邦

$ kubefed init federation \
  --host-cluster-context=f-context \
  --dns-provider="coredns" \
  --dns-zone-name="example.com." \
  --dns-provider-config="coredns-provider.conf" \
  --api-server-service-type="NodePort" \
  --etcd-servers="http://192.168.1.103:4379"

其中coredns-provider.conf的内容如下:

[Global]
etcd-endpoints = http://192.168.1.103:3379
zones = example.com.

添加集群

执行以下命令添加两个集群到联邦中

$ kubefed join a-cluster --cluster-context=a-context --host-cluster-context=f-context

$ kubefed join b-cluster --cluster-context=b-context --host-cluster-context=f-context

然后执行以下命令查看联邦中的集群

$ kubectl get cluster

发布Deployment

通过联邦apiserver发布一个Deployment

apiVersion: v1
kind: Deployment
metadata: 
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
$ kubectl create -f nginx-deployment.ymal

查看a集群中的pod数目

$ kubectl get pod --context=a-context

查看b集群中的pod数目(在b集群上执行)

$ kubectl get pod --context=b-context

跨集群服务发现

to be continued

跨集群负载均衡

to be continued

FAQ

Q: 集群之间的网络怎么打通?

Reference

Previous联邦DNS安装NextOther

Last updated 5 years ago

Was this helpful?

https://www.kubernetes.org.cn/2987.html
https://yq.aliyun.com/articles/401059
https://www.yangcs.net/posts/federation/