作者:

Dawid Ziolkowski,云原生工程师

原文链接:

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

在之前的一篇文章中我们介绍了如何在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调用来查找:

curl http://169.254.169.254/metadata/v1/id

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

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仓库:

https://github.com/digitalocean/digitalocean-cloud-controller-manager

接下来,我们需要创建一个包含DigitalOcean API token的Kubernetes secret。你可以使用repo中的secret生成器,也可以使用以下命令:

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

如果secret已保存,则只需从仓库中应用yaml manifest:

kubectl apply -f releases/v0.1.21.yml

现在无论何时启用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"

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

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

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

极简教程!教你快速将K3s与Cloud Controller集成的更多相关文章

  1. Nginx 极简教程(快速入门)

    作者:dunwu github.com/dunwu/nginx-tutorial 推荐阅读(点击即可跳转阅读) 1. SpringBoot内容聚合 2. 面试题内容聚合 3. 设计模式内容聚合 4.  ...

  2. CentOS安装使用.netcore极简教程(免费提供学习服务器)

    本文目标是指引从未使用过Linux的.Neter,如何在CentOS7上安装.Net Core环境,以及部署.Net Core应用. 仅针对CentOS,其它Linux系统类似,命令环节稍加调整: 需 ...

  3. nginx极简教程

    Nginx 极简教程 本项目是一个 Nginx 极简教程,目的在于帮助新手快速入门 Nginx. examples 目录中的示例模拟了工作中的一些常用实战场景,并且都可以通过脚本一键式启动,让您可以快 ...

  4. 自制 os 极简教程1:写一个操作系统有多难

    为什么叫极简教程呢?听我慢慢说 不知道正在阅读本文的你,是否是因为想自己动手写一个操作系统.我觉得可能每个程序员都有个操作系统梦,或许是想亲自动手写出来一个,或许是想彻底吃透操作系统的知识.不论是为了 ...

  5. Typora极简教程

    Typora极简教程 ” Markdown 是一种轻量级标记语言,创始人是约翰·格鲁伯(John Gruber).它允许人们 “使用易读易写的纯文本格式编写文档,然后转换成有效的 HTML 文档.” ...

  6. Asky极简教程:零基础1小时学编程,已更新前8节

    Asky极简架构 开源Asky极简架构.超轻量级.高并发.水平扩展.微服务架构 <Asky极简教程:零基础1小时学编程>开源教程 零基础入门,从零开始全程演示,如何开发一个大型互联网系统, ...

  7. Python 极简教程(八)字符串 str

    由于字符串过于重要,请认真看完并保证所有代码都至少敲过一遍. 对于字符串,前面在数据类型中已经提到过.但是由于字符串类型太过于常用,Python 中提供了非常多的关于字符串的操作.而我们在实际编码过程 ...

  8. 【转】Typora极简教程

    Typora极简教程 Typora download ” Markdown 是一种轻量级标记语言,创始人是约翰·格鲁伯(John Gruber).它允许人们 “使用易读易写的纯文本格式编写文档,然后转 ...

  9. NodeJS 极简教程 <1> NodeJS 特点 & 使用场景

    NodeJS 极简教程 <1> NodeJS 特点 & 使用场景 田浩 因为看开了所以才去较劲儿.   1. NodeJS是什么 1.1 Node.js is a JavaScri ...

随机推荐

  1. 菜鸟教程-python中的包

    转载自:http://www.runoob.com/python/python-modules.html 包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python ...

  2. priority_queue 中存放pair时,自定义排序的写法

    struct cmp {template <typename T, typename U> bool operator()(T const &left, U const & ...

  3. [Linux系统] CentOS7(RHEL7)重置root用户密码

    1.系统启动时,按"e"进入编辑界面 2.编辑内容 将rhgb quiet修改为 init=/bin/sh : 然后按 ctrl+x . 3.修改root密码 mount -o r ...

  4. 如何在Linux系统上安装nginx

      安装Nginx 下载Nginx 到官网http://nginx.org/下载对应nginx包,推荐使用稳定版本进入官网之后界面如下 点击download进行到下一页 然后下载所需要的版本(强烈建议 ...

  5. 题解 P5835 【 USACO19DEC Meetings S】

    前言 这道题目是道好题,想通了之后就可以把轻松这道题做出来. 正文 结论 先把一个结论写出来. 无论所有奶牛怎么走,它们的体重从左往右组成的序列是不会发生改变的. 这个结论简单地说明一下. 首先我们可 ...

  6. cookie sessionStorage localStorage 使用小结

    1.cookie 随http 一起发送 2.webStorage 客户端本地存储功能 可以在客户端 本地建立 一个数据库 不参与与服务器的通讯 setItem (key, value)   —— 保存 ...

  7. Taro 和 uni-app选型对比

    一.Taro和uni-app的介绍 1.taro的介绍 taro是多端统一开发框架,支持用 React 的开发方式编写一次代码,生成能运行在微信/百度/支付宝/字节跳动小程序.H5.React Nat ...

  8. kaggle入门——泰坦尼克之灾

    目录 引言 数据认识 总结 特征处理 建模预测 logistic分类模型 随机森林 SVM xgboost 模型验证 交叉验证 学习曲线 高偏差: 高方差 模型融合 总结 后记 引言 一直久闻kagg ...

  9. HashMap中使用自定义类作为Key时,为何要重写HashCode和Equals方法

    之前一直不是很理解为什么要重写HashCode和Equals方法,才只能作为键值存储在HashMap中.通过下文,可以一探究竟. 首先,如果我们直接用以下的Person类作为键,存入HashMap中, ...

  10. docker安装Elasticsearch7.6集群并设置密码

    docker安装Elasticsearch7.6集群并设置密码 Elasticsearch从6.8开始, 允许免费用户使用X-Pack的安全功能, 以前安装es都是裸奔.接下来记录配置安全认证的方法. ...