HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

评论

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

浅谈网络攻防中守方的准备工作

kk冲击波

6月月更 攻防演练

Redis篇之协议与序列化

邱学喆

redis协议 序列化操作 luttuce

网页设计制作要注意哪些问题

源字节1号

拒绝八股文!这篇图解动态路由分分钟爱了

wljslmz

网络工程师 网络技术 动态路由 6月月更 路由协议

Fork Join框架

急需上岸的小谢

6月月更

EasyRecovery15官方最新版下载功能介绍

茶色酒

EasyRecovery Easyrecovery破解 EasyRecovery15

Discourse 支持中文用户名

HoneyMoose

5分钟了解CDN的功能及原理

穿过生命散发芬芳

CDN 6月月更

Android 音视频——NuPlayer的渲染模块

程思扬

音视频 安卓 音视频开发

JS语言基础

Jason199

js 6月月更

【愚公系列】2022年06月 二十三种设计模式(二十二)-模板方法模式(Template Method Pattern)

愚公搬代码

6月月更

后端技术复习

卢卡多多

技术栈 6月月更

详述Java中sort排序函数

工程师日月

算法 Java EE 6月月更

【LeetCode】独特的电子邮件地址Java题解

Albert

LeetCode 6月月更

vue基本语法使用

小恺

6月月更

Flutter 使用 Redux 的中间件实现异步状态管理

岛上码农

flutter 安卓开发 ios 开发 跨平台应用 6月月更

《非暴力沟通》:如何温柔地沟通?

郭明

读书笔记

spring event 介绍

Nick

Java spring springboot 6月月更 spring event

【高并发】高并发环境下如何防止Tomcat内存溢出?看完我懂了!!

冰河

并发编程 多线程 高并发 异步编程 6月月更

如何在 WordPress 中嵌入 iFrame

海拥(haiyong.site)

WordPress 6月月更

SAP Restful ABAP Programming 编程模型的 Action 实现和云端调试介绍

汪子熙

云计算 云原生 SAP abap 6月月更

数据库每日一题---第2天:查找重复的电子邮箱

知心宝贝

数据库 算法 前端 后端 6月月更

linux驱动开发_文件系统本地挂载

DS小龙哥

6月月更

【技能树共建】Python 三元表达式

梦想橡皮擦

6月月更

测试的核心竞争力是什么?

老张

软件测试 核心竞争力

Django API 开发:一个 Todo 应用的后端

宇宙之一粟

6月月更

修改gradle脚本,加速spring4.1源码编译构建速度

程序员欣宸

Java spring Gradle 6月月更

Linux下可执行程序的Shell传参格式规范

乌龟哥哥

6月月更

透过华为军团看科技之变(二):机场轨道

脑极体

每日一题 | LeetCode 242 有效的字母异位词

武师叔

哈希表 Leet Code 6月月更

Flutter:创建透明/半透明的应用栏

坚果

6月月更

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