k8s之federation

集群信息

角色 版本 节点 IP
cluster192 kubernets 1.13.0 master-192 172.30.81.192
cluster194 kubernets 1.12.3 node-194,master-193 172.30.81.193,172.30.81.194
federation kubefed v1.9.0-alpha.3 ; kubectl v1.10.0 主集群cluster192
[root@master-192 kube-calico]# kubectl config get-contexts 
CURRENT   NAME      CLUSTER      AUTHINFO               NAMESPACE
*         c192      cluster192   kubernetes-admin-192   
          c194      cluster194   kubernetes-admin-194   

[root@master-192 kube-calico]# kubectl get node --context=c192
NAME         STATUS    ROLES     AGE       VERSION
master-192   Ready     master    5m        v1.13.0

[root@master-192 kube-calico]# kubectl get node --context=c194
NAME       STATUS    ROLES     AGE       VERSION
node-193   Ready     worker    14d       v1.12.3
ubuntu     Ready     master    14d       v1.12.3

安装federation集群

1.kubefed初始化集群

[root@master-192 kube-calico]# cat /root/federation/coredns-provider.conf 
[Global]
etcd-endpoints = http://172.30.81.192:2379
zones = xiaotech.com.
coredns-endpoints = 10.96.0.10:53
[root@master-192 kube-calico]# kubefed init federation \
>   --host-cluster-context=c192 \
>   --dns-provider="coredns" \
>   --dns-zone-name="xiaotech.com." \
>   --apiserver-enable-basic-auth=true \
>   --apiserver-enable-token-auth=true \
>   --dns-provider-config="/root/federation/coredns-provider.conf" \
>   --apiserver-arg-overrides="--anonymous-auth=false,--v=4" \
>   --api-server-service-type="NodePort" \
>   --api-server-advertise-address="172.30.81.192" \
>   --image=docker.io/xiaotech/fcp-amd64:v1.9.0-alpha.3 \
>   --etcd-image=registry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64:3.1.12 \
>   --etcd-persistent-storage=false
Creating a namespace federation-system for federation system components... done
Creating federation control plane service... done
Creating federation control plane objects (credentials, persistent volume claim)...Creating federation component deployments... done
Updating kubeconfig... done
Waiting for federation control plane to come up...... done
Federation API server is running at: 172.30.81.192:32709

2.查看federation的相关信息

新建了federation-system的namespace

[root@master-192 kube-calico]# kubectl get ns
NAME                STATUS    AGE
default             Active    8m
federation-system   Active    1m
kube-public         Active    8m
kube-system         Active    8m

该namespace下有apiserver和controller-manager两个deploy

[root@master-192 federation]# kubectl -n federation-system get deploy
NAME                 DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
apiserver            1         1         1            1           8m
controller-manager   1         1         1            1           8m

新加了apiserver的service ,federation的context可以看到对应接口

[root@master-192 federation]# kubectl -n federation-system get svc
NAME        TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE
apiserver   NodePort   10.104.202.7           443:31082/TCP   8m

[root@master-192 federation]# kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://172.30.81.192:6443
  name: cluster192
- cluster:
    certificate-authority-data: REDACTED
    server: https://172.30.81.194:6443
  name: cluster194
- cluster:
    certificate-authority-data: REDACTED
    server: https://172.30.81.192:31082
  name: federation

查看集群信息

[root@master-192 federation]# kubectl get cluster --context=federation
No resources found.

当前集群空,我们只是把federation的控制组件部署在了cluster192中

3.federation添加集群

添加192集群

[root@master-192 kube-calico]# kubefed join cluster192 --cluster-context=c192 --host-cluster-context=c192  --context=federation
cluster "cluster192" created
[root@master-192 kube-calico]# 
[root@master-192 kube-calico]# 
[root@master-192 kube-calico]# kubectl get cluster --context=federation 
NAME         AGE
cluster192   7s

[root@master-192 kube-calico]# kubefed join cluster194 --host-cluster-context=c192 --cluster-context=c194  --context=federation
cluster "cluster194" created
[root@master-192 kube-calico]# 
[root@master-192 kube-calico]# 
[root@master-192 kube-calico]# kubectl get cluster --context=federation 
NAME         AGE
cluster192   17s
cluster194   8s

4.修改默认的context为federation

[root@master-192 kube-calico]# kubectl config use-context federation 
Switched to context "federation".
[root@master-192 kube-calico]# kubectl config get-contexts 
CURRENT   NAME         CLUSTER      AUTHINFO               NAMESPACE
          c192         cluster192   kubernetes-admin-192   
          c194         cluster194   kubernetes-admin-194   
*         federation   federation   federation    

验证federation的使用

1.创建deploy
默认的defaut不存在,首先创建

[root@master-192 kube-calico]# kubectl create ns default
[root@master-192 kube-calico]# kubectl get ns
NAME      STATUS    AGE
default   Active    39s
[root@master-192 kube-calico]# kubectl run  nginx --image=nginx --port=80
deployment.apps "nginx" created

查看deploy在集群的分布情况,都分布到集群192上了

[root@master-192 kube-calico]# kubectl get deploy --context=c194
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx     0         0         0            0           2m
[root@master-192 kube-calico]# kubectl get deploy --context=c192
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx     1         1         1            1           2m
[root@master-192 kube-calico]# kubectl get deploy --context=federation 
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx     1         1         1            1           2m

修改deploy的replicas,再查看分布情况

[root@master-192 kube-calico]# kubectl scale --replicas=4 deploy nginx
deployment.extensions "nginx" scaled

可以看到均匀分布

[root@master-192 kube-calico]# kubectl get deploy --context=federation 
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx     4         4         4            3           3m
[root@master-192 kube-calico]# kubectl get deploy --context=c192
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx     2         2         2            2           4m
[root@master-192 kube-calico]# kubectl get deploy --context=c194
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx     2         2         2            1           4m

删除某个集群的deploy,查看如何变化

[root@master-192 kube-calico]# kubectl delete deploy nginx --context=c192
deployment.extensions "nginx" deleted

可以看到过会儿集群又会重新分布

root@master-192 kube-calico]# kubectl get deploy --context=c194
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx     2         2         2            1           4m
[root@master-192 kube-calico]# kubectl get deploy --context=c192
No resources found.
[root@master-192 kube-calico]# kubectl get deploy --context=federation 
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx     4         2         2            1           4m
[root@master-192 kube-calico]# kubectl get deploy --context=federation 
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx     4         2         2            1           4m
[root@master-192 kube-calico]# kubectl get deploy --context=federation 
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx     4         2         2            1           4m
[root@master-192 kube-calico]# kubectl get deploy --context=federation 
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx     4         2         2            1           5m
[root@master-192 kube-calico]# kubectl get deploy --context=federation 
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx     4         4         4            1           5m
[root@master-192 kube-calico]# kubectl get deploy --context=federation 
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx     4         4         4            1           5m
[root@master-192 kube-calico]# kubectl get deploy --context=c192
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx     3         3         3            1           20s
[root@master-192 kube-calico]# kubectl get deploy --context=c194
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx     1         1         1            1           5m
[root@master-192 kube-calico]# kubectl get deploy --context=c192
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx     3         3         3            3           30s
[root@master-192 kube-calico]# kubectl get deploy --context=federation 
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx     4         4         4            4           5m

2.创建service

[root@master-192 kube-calico]# kubectl expose deploy nginx --type=NodePort
service "nginx" exposed
[root@master-192 kube-calico]# 
[root@master-192 kube-calico]# 
[root@master-192 kube-calico]# kubectl get svc --context=federation 
NAME      TYPE       CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
nginx     NodePort                  80/TCP    9s
[root@master-192 kube-calico]# kubectl get svc --context=c192
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1               443/TCP        36m
nginx        NodePort    10.98.155.166           80:32294/TCP   14s
[root@master-192 kube-calico]# kubectl get svc --context=c194
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1                443/TCP        14d
nginx        NodePort    10.102.186.190           80:30107/TCP   19s

你可能感兴趣的:(k8s之federation)