如何建立高效、經濟的Kubernetes集羣

操做起來要簡單快速,既要高效又要省錢,這樣的Kubernetes集羣怎麼搭?node


Kubernetes是我主要學習的主題之一。我知道不光是我,還有必定數量的人願意在工做之餘進一步使用和研究它。web

本文是介紹關於如何建立一個高效的Kubernetes集羣,用於在Scaleway上使用Terraform和Rancher 2.x的開發目的。我假設你已經知道了(或者至少聽過):後端

  • Kubernetes安全

  • Terraform服務器

  • Rancherapp

  • 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上沒有任何資源了(只有默認的安全組)。不然你還要爲這些資源付費。

相關文章
相關標籤/搜索