2016-11-29 216 views
2

美好的一天Kubernetes開發環境

我們有一個由6個虛擬機組成的開發環境。目前我們在VirtualBox中使用Vagrant和Ansible。你可以想象,託管這個環境是一個維護噩夢,特別是當軟件/操作系統版本改變時。不要提到開發人員機器的資源負載。

我們已經開始將一些虛擬機遷移到docker。但是這本身帶來了編排,正確配置,溝通等方面的問題。這讓我變成了Kubernetes。

有人會提供一些推理,以確定Kubernetes是否會成爲工作的正確工具?這是管理和編排「開發」碼頭集裝箱。

感謝

回答

0

正如前面提到的那樣,這是一個相當複雜的話題。但我現在也是這樣做的。因此,讓我爲您總結一些事情:

使用Kubernetes(k8s),您將編排您的SaaS應用程序。在最好的情況下,它是一個雲原生應用程序。雲原生應用程序的屬性/需求由雲本機計算基金會(CNCF)制定,該基金會在谷歌捐贈給Linux基金會之後基本上以k8s左右形成。 因此,雲原生應用程序的屬性/需求是:容器打包,動態管理和麪向微服務(cncf.io/about/charter)。如果您的應用程序是基於微服務的,並且每項服務都有獨立的容器,則您將主要從k8獲益。

有了基於微服務的應用程序,每項服務都可以獨立開發。例如開發人員只需要遵循12Factor方法(12factor.net)(使用env var而不是硬編碼的IP地址等)。

在接下來的步驟中,開發人員爲服務構建容器並將其推送到容器註冊表中。對於本地開發環境,您可能還需要在集羣內運行容器註冊表,以便開發人員可以在本地推送和測試其代碼。

然後,您可以使用Ports,Port-mapping,env vars,Container Images等來定義您的k8s複製控制器,服務,PetSets等,並在集羣內創建並運行它。

k8s文檔建議Minikube在本地運行k8s(kubernetes.io/docs/getting-started-guides/minikube/)。隨着Minikube你有像DNS,NodePorts,ConfigMaps和祕密 功能儀表板功能。 但是我選擇了多節點CoreOS Kubernetes和我的開發環境中的Vagrant Cluster,作爲Puja Abbassi在博客「尋找合適的本地Kubernetes開發環境」(https://deis.com/blog/2016/local-kubernetes-development-environment/)中提到的,它更接近我的生產環境(12因子:10 - Dev/prod奇偶校驗)。 隨着流浪環境你有類似的特徵:

  • 絨布網絡
  • 服務發現與ETCD
  • DNS名稱的一組容器與SkyDNS
  • 內部負載均衡

如果你想知道,這個Github倉庫裏面的所有東西是如何工作的github.com/coreos/coreos-kubernetes/tree/master/multi-node(vagrant和通用文件夾)。

所以你必須問自己,如果你或你的開發者確實需要在本地運行一個完整的「雲環境」。在很多情況下,開發人員可以獨立開發服務(基於微服務和容器)。

但有時需要將多個或所有服務作爲開發環境在本地計算機上運行。

2

這是很複雜的話題,很多事情必須要考慮是否值得使用K8S本地開發環境。特別是當我想讓我的本地開發人員環境非常接近在Kubernetes上運行的生產環境時使用它。這有助於避免許多配置錯誤。

在我看來,Kubernetes(k8s)將爲您提供開發環境所需的一切。

它給你很大的靈活性,並做了很多配置本身。舉幾個例子:

  • 一個簡單的方法來部署新版本到本地kubernetes堆棧

您準備K8S複製控制器文件爲每個應用程序模塊(請記住,他們需要的是無狀態的模塊) 在複製控制器中,您指定了泊塢窗圖像,就是這樣。 使用此方法,您可以將新的docker映像推送到本地docker_registry,然後使用kubectl控制應用程序的生命週期。

  • 簡單的方法來擴展你的應用程序模塊

例如:

kubectl scale rc your_application_service --replicas=3 

這樣K8S將檢查你有多少豆莢運行爲您服務,如果其識別出數小於那麼它將創建新的副本值以滿足副本號碼。

這是無盡的話題和許多其他的東西出現在我的腦海裏,但我建議你試試看。

有一個https://github.com/kubernetes/kubernetes/blob/master/docs/devel/developer-guides/vagrant.md項目用於在流浪者中運行k8s集羣。

當然,你必須記住,如果你有很多服務,他們都必須推送到本地存儲庫,並運行k8s。這將需要一段時間,但如果使用某些自定義腳本自動執行本地部署,則不會後悔。