写点什么

如何创建高效、经济的 Kubernetes 集群

  • 2020-04-22
  • 本文字数:3290 字

    阅读完需:约 11 分钟

如何创建高效、经济的Kubernetes集群

Kubernetes 是我主要学习的主题之一。我知道不光是我,还有一定数量的人愿意在工作之余进一步使用和研究它。


本文是介绍关于如何创建一个高效的 Kubernetes 集群,用于在 Scaleway 上使用 Terraform 和 Rancher 2.x 的开发目的。我假设你已经知道了(或者至少听过):


  • Kubernetes

  • Terraform

  • Rancher

  • Scaleway

  • Cloudflare

概述

下图的概要描述了本文尝试实现的内容:



部署工作大部分将由 Terraform 自动完成。我们将创建一个 Rancher 服务器,在上面添加 Rancher 代理来创建和管理 Kubernetes 集群。域解析也将由 Terraform 自动配置到 Cloudflare。所有的服务器都将部署到 Scaleway 上,而且它们非常的便宜(在撰写本文时 Start1-S 服务器只花费€3.99/mo 和€0.008/小时!)

为什么选择 Rancher?

如果你想从头开始学习 Kubernetes 成为一名 kubectl 魔术师,这个出发点不错,我不反对。不过在我看来,仅仅是学习 Kuberenetes 是不够的,更重要的是你想用它做什么,你想实现什么。比如,我经常开发微服务和功能来进行测试(特别是 webhook 集成),并在 Kubernetes 上运行它。当然,在管理 Kubernetes 方面 kubectl 起到了很大的帮助,但是当我想检查某些服务的日志或创建一些 secrets 时,我不得不使用 kubectl 输入大量命令创建出大量的清单,这些常让我感到疲惫。有时候我只是想简单地部署一下资源,并不使用清单。我知道有很多工具(如 stern、ksonnet 等等)可以帮助实现这些工作流,但是我从 Rancher 1.x 开始就是忠实用户了,知道他们的 UI 可以让工作变得更简单直观。这也是我为什么在这个工具集中包含 Rancher 的原因。

让我们开始吧!

话不多说,我们开始部署一些资源吧。这儿有一些准备工作:


  • 准备一个 Scaleway 账号

  • 准备一个 Cloudflare 账号

  • 在 Cloudflare 中设置至少 1 个 zone(你可以得到一个免费的服务域比如 Freenom)

  • 克隆 kenfdev/rancher-scaleway 仓库

  • 安装 terraform

  • 安装 kubectl


我不会详细解释这些内容,因为如果都写的话这篇文章得爆炸了。你可以自己搜索找到相关的资源。


在这里有一个 重要的提示 。我们将 在 Scaleway 上部署服务器,这些都不是免费的 。所以事先要确认这一点,它会花费一些钱( 不过 Scaleway 非常便宜 )。我不会对这些成本承担任何责任,所以如果你完成了,一定要破坏掉它们。

从 Scaleway 获取信息

我们将在 Scaleway 上自动部署服务器,为此,我们需要有一个 token。在 Scaleway 中转到 Credentials 页面并点击 Create new token。把 Secret key 记录下来,因为我们之后会用到这个。



同时,前往 Account 页面找到 ORGANIZATION ID 做好记录。到现在为止你已经完成了 Scaleway 的部分,Terraform 会处理好其他事情。


从 Cloudflare 获取 API token

我们需要为创建的 Rancher 服务器设置 DNS,为了实现这一点,我们需要获得 Cloudflare 的 API token。前往 Cloudflare 下的 My Profile,可以在这里找到 API Keys。如下图所示点击 Global API Key 的 View 按钮。



现在记录下这个 token,到这里收集信息的工作结束了。

为 Rancher 服务器准备 Terraform 资源

现在我们已经有了需要收集的信息,那么下一步就是用 Terraform 来部署了。先去克隆 kenfdev/rancher-scaleway 仓库。


首先,前往 rancherserver 目录,按照 terraform.tfvars.sample 创建一个 tfvars 文件,打开它:



tfvars 文件看起来像这样:



需要对这些内容做修改:


  • scw_token – 你的 Scaleway Secret Token

  • scw_org – 你的 Scaleway Organization ID

  • admin_password – 你将在 Rancher 服务器使用的密码

  • rancher_server_url – Rancher 服务器所使用的 URL。Terraform 会为你的 cloudflare zone 设置一个 rancher 子域名。所以如果你的 zone 名为 example.com,那么 terraform 会创建一个记录链接到 rancher.example.com。

  • cloudflare_email – 你 Cloudflare 中的 Email

  • cloudflare_token – 你 Cloudflare 的 API token

  • cloudflare_zone – 你的 Cloudflare zone


你也可以根据你自己的需求修改其他变量。

部署 Rancher Server

现在我们准备好了,用 Terraform 来进行部署吧!点击 terraform apply 你会看到像下面这样的显示:


5 个资源?

“为什么是 5 个资源?我们刚刚不是只部署了 1 个服务器吗?”你可能会这么问,其实我们确实部署了不止一个资源,我们部署了:


  • 1 个服务器(Rancher 服务器)

  • 1 个为 cloud-init 进程引导 Rancher 服务器的用户数据

  • 1 个安全组

  • 1 条附加到安全组来控制流量的规则

  • 1 条指向 Rancher 服务器的 Cloudflare DNS 记录


这样便添加了 5 个资源,现在点击 yes。如果一切进行顺利,你应该能看到这样的信息:



如果检查 Scaleway 的话:



看起来服务器是部署好了,那 DNS 如何呢?



它看起来也添加到了 Cloudflare!现在我们用这个地址访问 Rancher 服务器:


https://rancher.your.zone/


如果你使用的是 Chrome 的话应该会看到警告提示



这是因为你还没有给服务器设置合法的 SSL 证书。单击左下角的按钮,忽略警告并强制访问页面。



瞧!我们用 1 条命令部署了一个带有 DNS 的 Rancher 服务器!很酷吧!输入你保存在 tfvars 中设置的密码,应该能登陆了。



现在你有了一个正在工作的 Rancher 服务器!你可以在 UI 上开始为各个位置创建 Kubernetes 集群,不过本文不会介绍这些用例。取而代之的,我们将在这里使用 Terraform,在 Scaleway 上创建 Rancher 代理,自动设置这些由 Rancher 服务器管理的集群。

为 Rancher 代理准备 Terraform 资源

返回 kenfdev/rancher-scaleway 仓库。现在,前往 rancheragent 目录。同样复制一份 terraform.tfvars.sample 给 terraform.tfvars。



现在打开 terraform.tfvars:



和 Rancher 服务器时一样填入凭证信息,这里列出一些要记住的变量:


  • rancher_server_address – Rancher Serve 的地址,它可能是一个 IP 或者域名,不过我建议你在之前的步骤中设置成域名

  • count_agent_all_nodes – 统计创建的拥有 all roles(etcd, controlplane, worker)的节点数。如果你只是取体验一下 Kubernetes 集群,那么有一个就足够了。

  • count_agent_etcd_nodes – 统计创建的拥有 etcd role 的节点数

  • count_agent_controlplane – 统计创建的拥有 controlplane role 的节点数

  • count_agent_worker_nodes – 统计创建的拥有 worker role 的节点数

部署 Rancher 代理

现在再一次点击 terraform apply,将 rancher 代理部署到 Scaleway 上。



选择 yes,服务器就部署好了。几分钟后你可以看到资源部署完毕:



同时,在 Rancher 服务器的 UI 下,你可以看到一个新的集群注册好了。



再过一会,你可以看到 Kubernetes 集群部署完毕(Active)!




这也很酷对吧?我们可以在 Internet(Scaleway)上创建自己的 Kubernetes 集群,而这仅仅通过几行命令!

测试 Ingress 控制器

现在我们可以使用 Kubernetes 集群了,让我们看看 Nginx Ingress 控制器是否按照预期工作。在 rancheragent 目录中,打开 dns.tf 文件并添加下面的信息:



这将创建一个 Cloudflare 记录来指向具有 all roles 的 Rancher 代理节点。点击 terraform apply,在 Cloudflare 设置 DNS。


现在我们访问http://default.your.zone,我们还没有在集群上配置任何 Ingress,因此需要访问默认后端。



嘿!我们可以看到 Ingress 控制器正按我们期望的运作着。

通过 kubectl 访问集群

最后,我们来试试能不能通过 kubectl 访问这个集群。拉取 kubeconfig 十分容易。只要在集群层找到按钮即可:



把 config 文件复制或者下载到 model 上:



用 kubectl 和 KUBECONFIG 获取一些信息



成功获得了关于节点的信息,pods 又是如何呢?



只用了简单的 kubectl 就能轻松获得信息,你也可以通过 Rancher UI 或者 kubectl 部署资源。

清理

如果你想继续使用集群,你可以从这时起继续使用,不过我下面要介绍的是如果你已经使用完毕,该如何把这一切清理掉。

破坏掉 Rancher 代理和 Cloudflare 资源

执行下面的命令:


销毁 Rancher 服务器和 Cloudflare 资源


确保 Scaleway 上没有任何资源了(只有默认的安全组)。否则你还要为这些资源付费。



总结

有好几种方法可以利用这种工作流,而我更倾向于不直接使用 Rancher Server,而是经常创建和销毁 Rancher Agent(以及 Kubernetes 集群)。


2020-04-22 18:32646

评论

发布
暂无评论
发现更多内容

关于 ASP.NET Core 中的文件提供程序

雄鹿 @

ASP.NET Core

LoRA 及其衍生技术总览:An Overview of the LoRA Family

Baihai IDP

人工智能 程序员 AI LoRa 白海科技

一文搞懂 Kafka consumer 与 broker 交互机制与原理

AutoMQ

大数据 kafka 云原生 broker AutoMQ

DOM(文档对象模型):理解网页结构与内容操作的关键技术

小万哥

xml 程序人生 编程语言 软件工程 前端开发

containerd快速安装指南🚀

GousterCloud

Docker cRI Containerd

一文看懂Unibot solana链狙击机器人

开发丨飞机丨 @aivenli

回南天、沙尘天轮番来袭?华为天气这份每日早报请及时查收!

最新动态

关于 ASP.NET Core 中的管道和中间件

雄鹿 @

ASP.NET Core

火出圈的Sora到底是什么?5000字长文带你彻底了解Sora!

蓉蓉

openai GPT-4 sora

wiztree免费的c盘清理软件

源字节1号

开源 软件开发 前端开发 后端开发 小程序开发

Redis 开源协议变更背后:开源软件与云计算巨头的竞争博弈

AutoMQ

redis 大数据 云原生 AutoMQ BSL

慢工之旅:婺源的故事

明道云

Sora原理?Sora技术报告解读(思维导图版)

蓉蓉

sora

2024中国充电桩展|2024常州国际充电设施展会

秋硕展览

2024-03-30:用go语言,集团里有 n 名员工,他们可以完成各种各样的工作创造利润, 第 i 种工作会产生 profit[i] 的利润,它要求 group[i] 名成员共同参与, 如果成员参与

福大大架构师每日一题

福大大架构师每日一题

双料荣誉!微帧科技荣获「实力先锋企业」&「数智出海服务企业奖」

微帧Visionular

实时渲染是什么意思?实时渲染和离线渲染的区别

3DCAT实时渲染

实时渲染

第十一届网络视听大会:鸿蒙激活产业创新,以系统级AI技术赋能体验升级

最新动态

如何创建高效、经济的Kubernetes集群_文化 & 方法_Rancher_InfoQ精选文章