Kubernetes是我主要学习的主题之一。我知道不光是我,还有必定数量的人愿意在工做之余进一步使用和研究它。node
本文是介绍关于如何建立一个高效的Kubernetes集群,用于在Scaleway上使用Terraform和Rancher 2.x的开发目的。我假设你已经知道了(或者至少听过):web
概 述后端
下图的概要描述了本文尝试实现的内容:安全
部署工做大部分将由Terraform自动完成。咱们将建立一个Rancher服务器,在上面添加Rancher代理来建立和管理Kubernetes集群。域解析也将由Terraform自动配置到Cloudflare。全部的服务器都将部署到Scaleway上,并且它们很是的便宜(在撰写本文时Start1-S服务器只花费€3.99/mo和€0.008/小时!)服务器
为何选择Rancher?app
若是你想从头开始学习Kubernetes成为一名kubectl魔术师,这个出发点不错,我不反对。不过在我看来,仅仅是学习Kuberenetes是不够的,更重要的是你想用它作什么,你想实现什么。好比,我常常开发微服务和功能来进行测试(特别是webhook集成),并在Kubernetes上运行它。固然,在管理Kubernetes方面kubectl起到了很大的帮助,可是当我想检查某些服务的日志或建立一些secrets时,我不得不使用kubectl输入大量命令建立出大量的清单,这些常让我感到疲惫。有时候我只是想简单地部署一下资源,并不使用清单。我知道有不少工具(如stern、ksonnet等等)能够帮助实现这些工做流,可是我从Rancher 1.x开始就是忠实用户了,知道他们的UI可让工做变得更简单直观。这也是我为何在这个工具集中包含Rancher的缘由。微服务
让咱们开始吧!工具
话很少说,咱们开始部署一些资源吧。这儿有一些准备工做:学习
我不会详细解释这些内容,由于若是都写的话这篇文章得爆炸了。你能够本身搜索找到相关的资源。测试
在这里有一个重要的提示。咱们将在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文件看起来像这样:
须要对这些内容作修改:
你也能够根据你本身的需求修改其余变量。
部署Rancher Server
如今咱们准备好了,用Terraform来进行部署吧!点击terraform apply你会看到像下面这样的显示:
5个资源?
“为何是5个资源?咱们刚刚不是只部署了1个服务器吗?”你可能会这么问,其实咱们确实部署了不止一个资源,咱们部署了:
这样便添加了5个资源,如今点击yes。若是一切进行顺利,你应该能看到这样的信息:
若是检查Scaleway的话:
看起来服务器是部署好了,那DNS如何呢?
它看起来也添加到了Cloudflare!如今咱们用这个地址访问Rancher服务器:
若是你使用的是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代理
如今再一次点击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上没有任何资源了(只有默认的安全组)。不然你还要为这些资源付费。