Kubernetes集群联邦怎么创建

68次阅读
没有评论

共计 8045 个字符,预计需要花费 21 分钟才能阅读完成。

这篇文章主要介绍“Kubernetes 集群联邦怎么创建”,在日常操作中,相信很多人在 Kubernetes 集群联邦怎么创建问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Kubernetes 集群联邦怎么创建”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!

准备域名

Federation 使用域名将不同子集群的同一个服务暴露出来,因此需要用户提供一个可配置的域名。您可以通过万网在阿里云上购买域名然后配置到您的 Federation 集群上。
以域名 spacexnice.xyz 为例,请按照购买域名文档购买好域名。

配置域名

由于 Federation 在添加域名解析记录的时候设置域名的 TTL 为 3 分钟,域名层级为 5 级,因此需要到阿里云上对您刚购买的域名进行设置,使得该域名允许的最小 TTL 值小于 3 分钟,同时域名层级大于 5.

进入云解析控制台选择您刚刚购买的域名,更多里面选 [升级] 或者[升级 VIP]

在弹出的页面中更改最低 TTL 值为 60s, 子域名级别为 7 级,然后保存。

创建多个子集群

本示例创建的 Federation 集群包含两个子集群,分别在杭州和北京 region。我们首先需要在这两个 Region 创建出两个可用的集群,集群创建步骤参考文档

杭州集群

[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl get no
NAME STATUS ROLES AGE VERSION
cn-hangzhou.i-bp11ajet2v9o3tp0o2uw Ready master 3d v1.8.4
cn-hangzhou.i-bp15pt2475mgw64k72ma Ready master 3d v1.8.4
cn-hangzhou.i-bp18fggko6p3vyr0p0ew Ready  none  3d v1.8.4
cn-hangzhou.i-bp18fggko6p3vyr0p0ex Ready  none  3d v1.8.4
cn-hangzhou.i-bp1bpj58bdzdosdxxf82 Ready master 3d v1.8.4

北京集群

[root@iZze7z98ssc50pfzt6be9 ~]# kubectl get no
NAME STATUS ROLES AGE VERSION
cn-beijing.i-2ze7z98ssc50pfzt6be9 Ready master 3d v1.8.4
cn-beijing.i-2ze8hr6k03ccroopicd2 Ready master 3d v1.8.4
cn-beijing.i-2zeipodwz2junslmihqz Ready master 3d v1.8.4
cn-beijing.i-2zeipodwz2junyipunrf Ready  none  3d v1.8.4

部署 federation 控制平面

选择杭州的子集群作为 Federation 的宿主集群,安装 Federation 的控制平面。并配置好本地的 kubeconfig。通过运行 kubefed init 命令来初始化主集群。具体步骤如下:

安装 kubefed

在 hangzhou 集群的 master 节点安装 kubefed

[root@iZze7z98ssc50pfzt6be9 ~]# curl -L http://aliacs-k8s-cn-hangzhou.oss.aliyuncs.com/bin/kubefed-1.8.4 -o kubefed
[root@iZze7z98ssc50pfzt6be9 ~]# sudo cp kubefed /usr/bin
[root@iZze7z98ssc50pfzt6be9 ~]# sudo chmod +x /usr/bin/kubefed
[root@iZze7z98ssc50pfzt6be9 ~]# kubefed version

配置 kubeconfig

在杭州集群 master 节点中配置 hangzhou,beijing 两个集群的 context,让改节点能通过切换 context 连接不同的子集群。要修改的内容如下:

修改 hangzhou 集群的 kubeconfig 的 cluster,user,context 的名字为 hangzhou

拷贝 beijing 集群 kubeconfig 中的 cluster,user,context 内容到 a)步骤中 kubeconfig,并修改相应的 cluster,user,context 名字为 beijing

为了方便初学者,我们提供了一个自动化的脚本,可以自动通过 ssh 从您指定的集群中下载 kubeconfig 配置文件,并合并成一个整体。
通过执行脚本来自动生成~/.kube/config 文件。脚本需要指明从哪些集群上下载 kubeconfig 文件并合并,格式如下 python context.py -H hangzhou:1.1.1.1,beijing:2.2.2.2  注意参数替换成你自己的集群 Region 和 IP,脚本可能会要求您输入 ssh 的登录密码。

[root@iZbp1bpj58bdzdosdxxf82Z ~]# curl http://aliacs-k8s-cn-hangzhou.oss.aliyuncs.com/tools/context.py   context.py
[root@iZbp1bpj58bdzdosdxxf82Z ~]# sudo pip install pyyaml
[root@iZbp1bpj58bdzdosdxxf82Z ~]# unset KUBECONFIG
[root@iZbp1bpj58bdzdosdxxf82Z ~]# python context.py -H ${HOST}
Info: host, hangzhou:118.31.177.21,beijing:47.95.96.234 .
Info: file /root/.kube/config successfully generated.

配置结果如下:

[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
 hangzhou kubernetes-hangzhou kubernetes-admin-hangzhou
* beijing kubernetes-beijing kubernetes-admin-beijing

配置 alidns.yaml 文件

zones 填写您前面申请的域名,注意以点号结尾。并且替换您的 accesskeyid 和 accesskeysecret.

cat  alidns.yaml  EOF
[Global]
access-key-id =  Your-key-id 
access-key-secret =  Your-key-secret 
zones = spacexnice.xyz.
EOF

初始化控制 federation 平面

通过本条命令初始化 federation 控制平面,参数如下: 
 kubefed init federation \ #  联邦的名字
 --host-cluster-context=hangzhou \ #  主集群的 context 名字
 --dns-provider= alidns  \ # DNS 服务提供商
 --dns-zone-name= spacexnice.xyz.  \ #  前面注册好的域名,必须以. 结束
 --dns-provider-config= alidns.yaml  \ # alidns 配置文件
 --image= registry.cn-hangzhou.aliyuncs.com/google-containers/hyperkube-amd64:v1.8.4-4_99c084ce  \ # hyperkube 镜像
 --etcd-image= registry.cn-hangzhou.aliyuncs.com/google-containers/etcd-amd64:3.1.11  \ #etcd  镜像
 --etcd-persistent-storage=false #  关闭 etcd 持久存储
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubefed init federation \
 --host-cluster-context=hangzhou \
 --dns-provider= alidns  \
 --dns-zone-name= spacexnice.xyz.  \
 --dns-provider-config= alidns.yaml  \
 --image= registry.cn-hangzhou.aliyuncs.com/google-containers/hyperkube-amd64:v1.8.4-4_99c084ce  \
 --etcd-image= registry.cn-hangzhou.aliyuncs.com/google-containers/etcd-amd64:3.1.11  \
 --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)... done
Creating federation component deployments... done
Updating kubeconfig... done
Waiting for federation control plane to come up..................................................................................................................................................... done
Federation API server is running at: 120.55.196.1

添加集群至 federation

目前为止您已经成功的初始化好了 Federation 的控制平面。接下来需要将各个子集群加入到 Federation 集群中。

添加 hangzhou 集群

命令行参数解析
 kubefed join hangzhou \ # 加入联邦的集群命名名字
 --context=federation \ # 联邦的 context
 --cluster-context=hangzhou \ # 要添加集群的 context
 --host-cluster-context=hangzhou # 主集群的 context
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubefed join hangzhou \
 --context=federation \
 --cluster-context=hangzhou \
 --host-cluster-context=hangzhou
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl get cluster --context=federation
NAME STATUS AGE
hangzhou Ready 28s

添加 beijing 集群

[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubefed join beijing \
 --context=federation \
 --cluster-context=beijing \
 --host-cluster-context=hangzhou
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl get cluster --context=federation
NAME STATUS AGE
hangzhou Ready 4m
beijing Ready 59s

后面介绍下集群查询,移除集群,删除联邦等命令

集群查询

查询注册到 Federation 的 kubernetes 集群列表

[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl get cluster --context=federation
NAME STATUS AGE
hangzhou Ready 4m
beijing Ready 59s

移除集群

移除 beijing 集群

[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubefed unjoin beijing --host-cluster-context=hangzhou --context=federation
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl get clusters --context=federation
NAME STATUS AGE
hangzhou Ready 1d

删除集群联邦

集群联邦控制平面的删除功能还在开发中,目前可以通过删除 namespace federation-system 的方法来清理(注意 pv 不会删除)。命令在 host-cluster-context 上执行。

[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl delete ns federation-system

创建服务

集群联邦支持以下联邦资源,这些资源会自动在所有注册的 kubernetes 集群中创建.

Federated ConfigMap

Federated Service

Federated DaemonSet

Federated Deployment

Federated Ingress

Federated Namespaces

Federated ReplicaSets

Federated Secrets

Federated Events(仅存在 federation 控制平面)

创建 service

[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl run nginx --image nginx --context=federation
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl expose deploy nginx --port 80 --target-port 80 --type LoadBalancer --context=federation
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl get svc --context=federation

您还可以通过 kubectl scale deploy nginx –replicas=3 –context=federation 来扩展 nginx 副本,然后观察 nginx 应用在各个子集群中的分布情况。

[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl get deploy --context=beijing
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl get deploy --context=hangzhou

创建 deployment

[root@iZbp1bpj58bdzdosdxxf82Z ~]# cat deployment-nginx.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
 name: nginx-deployment
spec:
 replicas: 3
 template:
 metadata:
 labels:
 app: nginx
 spec:
 containers:
 - name: nginx
 image: nginx:1.7.9
 ports:
 - containerPort: 80
[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl create -f deployment-nginx.yaml --context=federation

查看 federation service

[root@iZbp1bpj58bdzdosdxxf82Z ~]# kubectl describe svc nginx --context=federation
Name: nginx
Namespace: default
Labels: app=nginx
Annotations: federation.kubernetes.io/service-ingresses={items :[{ cluster : hangzhou , items :[{ ip : 120.55.149.69}]},{cluster : shanghai , items :[{ ip : 139.196.70.146}]}]}
Selector: app=nginx
Type: LoadBalancer
LoadBalancer Ingress: 120.55.149.69, 139.196.70.146
Port: http 80/TCP
Endpoints:  none 
Session Affinity: None
Events:  none

通过域名访问服务:

[root@iZbp1bpj58bdzdosdxxf82Z ~]# curl nginx.default.fed.svc.spacexnice.xyz
 !DOCTYPE html 
 html 
 head 
 title Welcome to nginx! /title 
 style 
 body {
 width: 35em;
 margin: 0 auto;
 font-family: Tahoma, Verdana, Arial, sans-serif;
 }
 /style 
 /head 
 body 
 h2 Welcome to nginx! /h2 
 p If you see this page, the nginx web server is successfully installed and
working. Further configuration is required. /p 
 p For online documentation and support please refer to
 a href= http://nginx.org/ nginx.org /a . br/ 
Commercial support is available at
 a href= http://nginx.com/ nginx.com /a . /p 
 p em Thank you for using nginx. /em /p 
 /body 
 /html

查看云解析 dns 的 record 记录

我们可以在阿里云云解析控制台看见刚刚添加的 nginx 的 dns 记录。

到此,关于“Kubernetes 集群联邦怎么创建”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计8045字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)