Kubernetes是一個開源專案,用於自動化容器的部署,擴充套件和管理。它已迅速成為執行生產工作負載的標準,周圍的社群也很棒!
但是在Kubernetes中進行開發提出了一些挑戰。典型的開發工作流程如下:編寫程式碼,構建Docker映像,將其推送到登錄檔,重新部署,驗證更改並重復。這種流程不僅速度緩慢,而且使我們無法從Go工具的標準功能中受益,例如快速增量構建,熱過載器或偵錯程式。
OkOkteto(https://github.com/okteto/okteto)建立就是為了解決這個問題。在此部落格文章上,我們將向您展示Okteto如何改善Go開發人員在Kubernetes中的開發人員體驗。在Kubernetes中直接開發應用程式時,您將能夠充分利用諸如go build依賴項快取,IDE偵錯程式(VS Code,GoLand,Atom…)之類的工具。
步驟1:部署Go Sample App通過執行以下命令來獲取Go Sample App的本地版本:
$ git clone [https://github.com/okteto/go-getting-started](https://github.com/okteto/go-getting-started)$ cd go-getting-started
該k8s.yml檔案包含用於部署Go Sample App的Kubernetes清單。通過執行以下命令執行應用程式:
$ kubectl apply -f k8s.ymldeployment.apps “hello-world” createdservice “hello-world” created
這很酷!您鍵入了一個命令,您的應用程式的開發版本僅執行。
步驟2:安裝Okteto CLI該Okteto CLI(https://github.com/okteto/okteto)是一個開源專案,可以讓你直接在Kubernetes開發應用程式,同時充分利用當地知名的模具。我們將使用它來加快我們的開發週期,而不是使用基於構建docker映像和重新部署容器的典型開發工作流程。
通過執行以下命令來安裝Okteto CLI:
MacOS / Linux
$ curl [https://get.okteto.com](https://get.okteto.com/) -sSfL | sh
Windows
$ wget [https://downloads.okteto.com/cli/okteto-Windows-x86_64](https://downloads.okteto.com/cli/okteto-Windows-x86_64) -OutFile c:\\windows\\system32\\okteto.exe步驟3:在Kubernetes中啟動您的開發環境
部署Go Sample Application後,執行以下命令:
$ okteto up✓ Development environment activated✓ Files synchronized Namespace: pchico83 Name: hello-world Forward: 8080 -> 8080 2345 -> 2345okteto>
該okteto up命令將啟動Kubernetes開發環境,這意味著:
Go Sample App容器已使用docker image更新okteto/golang:1。該影象包含構建,測試,除錯和執行Go Sample App所需的開發工具。一個檔案同步服務建立,讓您改變了最新的本地檔案系統和應用程式之間的豆莢。附加了一個卷以將Go快取和軟體包持久儲存在Kubernetes開發環境中。容器埠8080(應用程式)和2345(偵錯程式)被轉發到localhost。在您的Kubernetes開發環境中啟動了一個遠端Shell。就像在本地計算機中一樣,構建,測試和執行您的應用程式。所有這些(以及更多)都可以通過okteto.yml 進行自定義。
要執行該應用程式,請在遠端shell程式中執行:
okteto> go run main.goStarting hello-world server...
第一次執行該應用程式時,Go會下載您的依賴項並編譯您的應用程式。等待此過程完成並通過在本地shell程式中執行以下命令來測試您的應用程式:
$ curl localhost:8080Hello world!步驟4:直接在Kubernetes中進行開發
main.go在您喜歡的本地IDE中開啟檔案,然後在第17行上將響應訊息修改為來自叢集的Hello world!。儲存您的更改。
func helloServer(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, “Hello world from the cluster!”)}
Okteto將您的更改同步到Kubernetes中的開發環境。go run main.go通過按取消從遠端Shell 執行ctrl + c。重新執行您的應用程式:
okteto> go run main.goStarting hello-world server...
從本地外殼呼叫您的應用程式以驗證更改:
$ curl localhost:8080Hello world from the cluster!
您的程式碼更改立即應用於Kubernetes。無需提交,構建或推送!
步驟5:直接在Kubernetes中進行除錯Okteto使您可以直接從自己喜歡的IDE除錯應用程式。讓我們看一下它在VS Code中的工作原理,VS Code是Go開發中最受歡迎的IDE之一。
go run main.go通過按取消從遠端Shell 執行ctrl + c。在除錯模式下重新執行您的應用程式:
okteto> dlv debug --headless --listen=:2345 --log --api-version=2API server listening at: [::]:23452019–10–17T14:39:24Z info layer=debugger launching process with args: [/okteto/__debug_bin]
開啟Debug擴充套件並執行Connect to okteto啟動配置:
{ “version”: “0.2.0”, “configurations”: [ { “name”: “Connect to okteto”, “type”: “go”, “request”: “attach”, “mode”: “remote”, “remotePath”: “/okteto”, “port”: 2345, “host”: “127.0.0.1” } ]}
在main.go第17行上新增一個斷點。通過從本地Shell執行來呼叫您的應用程式:
$ curl localhost:8080
執行將在您的斷點處停止。然後,您可以檢查請求,可用變數等。
結論Kubernetes有潛力成為一個強大的開發平臺,提供可複製的,資源高效的和類似生產的開發環境。我們已經向您展示了如何使用Okteto建立開發工作流程,該工作流程還使您可以在直接在Kubernetes中直接開發應用程式時利用增量構建,熱過載器或偵錯程式等功能。
翻譯自:https://medium.com/okteto/how-to-develop-go-applications-in-kubernetes-8d733391564c