K8S 联邦集群搭建管理 V2
创建集群
参考:https://blog.youkuaiyun.com/lswzw/article/details/103141782
安装Helm 2.x版本
参考:https://blog.youkuaiyun.com/lswzw/article/details/104103353
config多集群管理
参考:https://blog.youkuaiyun.com/lswzw/article/details/104103422
联邦下载安装
官方Git地址:
https://github.com/kubernetes-sigs/kubefed
须要下载2个压缩包.
下载最新地址:https://github.com/kubernetes-sigs/kubefed/releases
我这时用的 v0.1.0 rc6
helm文件下载地址 : https://github.com/kubernetes-sigs/kubefed/blob/master/charts/index.yaml
里面对应找版本直接下载. 用repo包可能存在网络问题.
文件1: kubefedctl
https://github.com/kubernetes-sigs/kubefed/releases/download/v0.1.0-rc6/kubefedctl-0.1.0-rc6-linux-amd64.tgz
文件2: helm 文件
https://github.com/kubernetes-sigs/kubefed/releases/download/v0.1.0-rc6/kubefed-0.1.0-rc6.tgz
helm文件版本须要和kubefedctl文件版本一样.
部署helm 到主集群.
helm install kubefed-0.1.0-rc6.tgz --name kubefed --namespace kube-federation-system
对应官文:https://github.com/kubernetes-sigs/kubefed/blob/master/charts/kubefed/README.md
查看状态
# kubectl get pod -n kube-federation-system
NAME READY STATUS RESTARTS AGE
kubefed-admission-webhook-7fdcc5b56f-q29s4 1/1 Running 0 83m
kubefed-controller-manager-75bdd8c787-2dc4z 1/1 Running 0 66m
kubefed-controller-manager-75bdd8c787-n4mtx 1/1 Running 0 67m
我这是1个master点和2个node. manager服务会分布在每一个node节点.
(部署时间会比较长,耐心等待都没问题.镜像是可以拉到的.)
添加集群到联邦
- 执行kubectl config get-contexts命令,获取集群列表信息。
看到如下信息时,表示已配置完成。
这里参考上面config多集群管理
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* cluster1 cluster1 kubernetes-admin1
cluster2 cluster2 kubernetes-admin2
- 如下命令,将cluster1设置为主集群,cluster2设置为从集群,完成联邦集群的组建。
# 设置host集群
kubefedctl join cluster1 --cluster-context cluster1 \
--host-cluster-context cluster1 --v=2
# 加入member集群
kubefedctl join cluster2 --cluster-context cluster2 \
--host-cluster-context cluster1 --v=2
- 执行以下命令,查看联邦集群的接入情况。
看到如下信息,说明联邦集群已经接入成功。
kubectl -n kube-federation-system get kubefedclusters
NAME READY AGE
cluster1 True 55m
cluster2 True 54m
对应官文:https://github.com/kubernetes-sigs/kubefed/blob/master/docs/cluster-registration.md
创建联邦应用
- 创建并拷贝以下内容到federated-namespace.yaml文件中,并在主集群上cluster1执行kubectl apply -f federated-namespace.yaml命令,创建FederatedNamespace。
apiVersion: v1
kind: Namespace
metadata:
name: test-namespace
---
apiVersion: types.kubefed.io/v1beta1
kind: FederatedNamespace
metadata:
name: test-namespace
namespace: test-namespace
spec:
placement:
clusters:
- name: cluster1
- name: cluster2
- 创建并拷贝以下内容到federated-deployment.yaml文件中,并在主集群上cluster1执行kubectl apply -f federated-deployment.yaml命令,部署FederatedDeployment。
apiVersion: types.kubefed.io/v1beta1
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:
clusters:
- name: cluster1
- name: 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
- 修改deploy文件.注释deploy文件 " # - name: cluster1 " 在cluster1上不部署.重新部署deploy文件 kubectl apply -f federated-deployment.yaml
查看情况如下. 没有在cluster1上部署.只在cluster2上部署 了.
[root@1master ~]# kubectl get deployment -n test-namespace --context cluster1
No resources found.
[root@1master ~]# kubectl get deployment -n test-namespace --context cluster2
NAME READY UP-TO-DATE AVAILABLE AGE
test-deployment 2/2 2 2 50m
参考:https://help.aliyun.com/document_detail/121649.html?spm=a2c4g.11186623.6.629.162821f6awAyhs