NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

如何创建高效、经济的 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:32466

评论

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

计算机网络:PPP协议与HDLC协议

timerring

计算机网络 11月月更

100万行Spring源代码,鬼知道面试都会问啥

博文视点Broadview

极客时间运维进阶训练营第四周作业

老曹

聊聊hashmap

急需上岸的小谢

11月月更

其实你的下班时间,被 Excel 预定了

叶小鍵

Docker部署flink备忘

程序员欣宸

Docker flink 11月月更

三次握手与四次挥的问题,怎么回答?

loveX001

JavaScript

[力扣] 剑指 Offer 第四天 - 0~n-1中缺失的数字

陈明勇

Go 数据结构与算法 力扣 11月月更

聊聊Go里面的闭包

秦怀杂货店

Go 函数式编程 闭包

主成分分析PCA与奇异值分解SVD-PCA对手写数据集的降维 & 用PCA做噪音过滤

烧灯续昼2002

Python 机器学习 算法 sklearn 11月月更

6个tips缓解第三方访问风险

SEAL安全

安全 访问权限 第三方访问

iMazing2022免费试用版ios设备管理器

茶色酒

imazing imazing2023

支持向量机-支持向量机分类器原理

烧灯续昼2002

Python 机器学习 算法 sklearn 11月月更

vivo霍金实验平台设计与实践-平台产品系列02

vivo互联网技术

A/B 测试 平台化 AB实验

kitti数据集在3D目标检测中的入门

Studying_swz

3D点云 11月月更

AST 初探深浅,代码还能这样玩?!

蔡农曰

前端 后端 代码

【愚公系列】2022年11月 微信小程序-场景值

愚公搬代码

11月月更

阿里云无影研发负责人任晋奎:端云技术创新,打造全新用户体验

云布道师

云栖大会 无影云电脑

RESTful API类渗透测试的特点

阿泽🧸

RESTful API 11月月更

极客时间运维进阶训练营第四周作业

chenmin

2022我的前端面试总结

loveX001

JavaScript

聊聊ThreadLocal

急需上岸的小谢

11月月更

【web 开发基础】PHP 的函数工作原理 (28)

迷彩

函数 web开发基础 11月月更 结构化编程 函数的工作原理

SpringCloud相关组件

急需上岸的小谢

11月月更

从URL输入到页面展现到底发生什么?

loveX001

JavaScript

一键开启云原生网络安全新视界

京东科技开发者

云原生 网络安全 软件架构 应用结构

CleanMyMac2023注册机mac系统清理工具

茶色酒

CleanMyMacX CleanMyMac X

一年前端面试打怪升级之路

loveX001

JavaScript

Dockerfile 常用命令

蜗牛也是牛

2022-11-20:小团生日收到妈妈送的两个一模一样的数列作为礼物! 他很开心的把玩,不过不小心没拿稳将数列摔坏了! 现在他手上的两个数列分别为A和B,长度分别为n和m。 小团很想再次让这两个数列变

福大大架构师每日一题

算法 rust 福大大

部署代码质量检测服务 sonarqube,基于命令、shell 脚本和 pipline 实现代码质量检测

忙着长大#

jenkins

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