25

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

 5 years ago
source link: http://dockone.io/article/8339?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

操作起来要简单快速,既要高效又要省钱,这样的Kubernetes集群怎么搭?

fqErY3b.jpg!web

------------

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

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

  • Kubernetes
  • Terraform
  • Rancher
  • Scaleway
  • Cloudflare

概 述

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

MFbAzeV.jpg!web

部署工作大部分将由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记录下来,因为我们之后会用到这个。

aiAJzeM.jpg!web

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

jURb6jY.jpg!web

从Cloudflare获取API token

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

MjA32qQ.jpg!web

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

为Rancher服务器准备Terraform资源

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

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

Ubeiqa7.jpg!web

tfvars文件看起来像这样:

qINRBbB.jpg!web

需要对这些内容做修改:

  • 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你会看到像下面这样的显示:

QjmaA3E.jpg!web

5个资源?

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

  • 1个服务器(Rancher服务器)
  • 1个为cloud-init进程引导Rancher服务器的用户数据
  • 1个安全组
  • 1条附加到安全组来控制流量的规则
  • 1条指向Rancher服务器的Cloudflare DNS记录

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

JnqqMjA.jpg!web

如果检查Scaleway的话:

v6NBnmv.jpg!web

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

nY3ii2n.jpg!web

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

https://rancher.your.zone/

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

i2IZzaU.jpg!web

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

ayQZfin.jpg!web

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

eYJ3eub.jpg!web

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

为Rancher代理准备Terraform资源

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

AFfEryY.jpg!web

现在打开terraform.tfvars:

jq2YF3y.jpg!web

和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上。

Rj2uUzQ.jpg!web

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

y2EriiF.jpg!web

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

YZ7zyi6.jpg!web

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

YVryauu.jpg!webuaUfUvn.jpg!web

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

测试Ingress控制器

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

Jnyueue.jpg!web

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

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

iyIrMnj.jpg!web

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

通过kubectl访问集群

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

zummua6.jpg!web

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

uqyQ7vj.jpg!web

用kubectl和KUBECONFIG获取一些信息

3e2ARjR.jpg!web

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

Vb6Ffmb.jpg!web

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

清 理

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

破坏掉Rancher代理和Cloudflare资源

执行下面的命令:

UJNZZjJ.jpg!web

销毁Rancher服务器和Cloudflare资源

U3Unquq.jpg!web

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

7RrAJjJ.jpg!webz6zuYrI.jpg!web

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK