操做起來要簡單快速,既要高效又要省錢,這樣的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服務器:
若是你使用的是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上沒有任何資源了(只有默認的安全組)。不然你還要爲這些資源付費。