前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >极简教程!教你快速将K3s与Cloud Controller集成

极简教程!教你快速将K3s与Cloud Controller集成

原创
作者头像
k3s中文社区
修改2020-04-20 12:23:15
1.1K0
修改2020-04-20 12:23:15
举报
文章被收录于专栏:k3s社区k3s社区

在之前的一篇文章中我们介绍了如何在60秒内创建一个4个节点的K3s集群,文中还包含了虚拟机的配置。这一集群的唯一问题是没有cloud provider的支持,也就是说你不能使用LoadBalancer、存储等服务。那么,本文将告诉你如何将K3s与cloud provider集成。

将CCM(云管理控制器)与K3s集成在一起基本上意味着你的K3s集群能够与cloud provider的API进行通信,以请求和配置诸如LoadBalancer(用于ingress)之类的服务,还能为节点应用适当的标签等。在不同的cloud provider之前这一过程有所不同,主要取决于cloud provider是否首先提供CCM。在本文中,我们将在DigitalOcean上安装K3s。

整个流程并不复杂,但你需要仔细跟着以下步骤进行。首先,从master节点开始。安装K3s master节点时,我们需要传递以下参数:

— disable-cloud-controller

— no-deploy servicelb

— kubelet-arg=”cloud-provider=external”

— kubelet-arg=”provider-id=digitalocean://[master_node_id]”

那么,它们意味着什么呢?首先,正如名字所暗示的,禁用默认K3s cloud provider,否则K3s将使用其自身内置的cloud controller。第二,我们要求K3s不要部署servicelb,因为它会将IP地址弄乱——servicelb会用节点IP覆盖Ingress IP,而我们希望使用DigitalOcean LoadBalancer IP作为LoadBalancer服务类型。第三,这几乎是所有CCM的要求,我们只需要指示kubelet使用外部cloud provider。最后一个参数,这是DO CCM的要求——如果你查看DO CCM Github repo(https://github.com/digitalocean/digitalocean-cloud-controller-manager),你会发现它们仅要求你将此参数传递给kubelet。[master_node_id]是可以在DO Dashboard中找到的,也可以通过从droplet本身进行GET调用来查找:

代码语言:txt
复制
curl http://169.254.169.254/metadata/v1/id

因此,为了安装给CCM准备的K3s server,我们需要执行以下命令:

代码语言:txt
复制
curl -sfL https://get.k3s.io | sh -s — server \
  --disable-cloud-controller \
  --no-deploy servicelb \
  --kubelet-arg=”cloud-provider=external” \
  --kubelet-arg=”provider-id=digitalocean://$master_id”以上就是第一部分,前期准备。K3s server启动之后,我们需要安装CCM。要完成这一步骤,首先需要clone该git仓库:

kubectl -n kube-system create secret generic digitalocean --from-literal=access-token=YOUR_DO_API_TOKEN

代码语言:txt
复制
如果secret已保存,则只需从仓库中应用yaml manifest:

kubectl apply -f releases/v0.1.21.yml

代码语言:txt
复制
现在无论何时启用LoadBalancer服务,都会创建DigitalOcean LoadBalancer并将其配置为将流量路由到该负载。此外,由于k3s默认内置了Traefik,因此也会自动为其创建DOLB。



到目前为止,我们仅创建了K3s master节点,对于worker节点,你只需要安装具有以下参数的K3s即可:

curl -sfL https://get.k3s.io | K3S_TOKEN=${token} sh -s - agent \

--server https://${master_node_ip}:6443 \

--kubelet-arg="cloud-provider=external" \

--kubelet-arg="provider-id=digitalocean://$worker_id"

代码语言:txt
复制

现在,所有节点都具有合适的标签集(公共/私有ip、DO区域等),并且通过DO LB的路由也会即刻启动。

最后,我创建了一个简单的bash脚本来自动化整个流程。这一解决方案可以让你创建2分中之内在DigitalOcean上创建一个4节点(1个master节点+3个worker节点)的k3s集群,并且带有DO CCM:

https://github.com/DavidZisky/k3s-cloud

作者:

Dawid Ziolkowski,云原生工程师

原文链接:

https://itnext.io/how-to-integrate-k3s-with-the-cloud-controller-36bd5020b8f7

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档