如何在Kubernetes中開發(fā)Go應用程序

Kubernetes是一個開源項目,用于自動化容器的部署,擴展和管理。它已迅速成為運行生產工作負載的標準,周圍的社區(qū)也很棒!

但是在Kubernetes中進行開發(fā)提出了一些挑戰(zhàn)。典型的開發(fā)工作流程如下:編寫代碼,構建Docker映像,將其推送到注冊表,重新部署,驗證更改并重復。這種流程不僅速度緩慢,而且使我們無法從Go工具的標準功能中受益,例如快速增量構建,熱重載器或調試器。

Okteto的創(chuàng)建就是為了解決這個問題。在此博客文章上,我們將向您展示Okteto如何改善Go開發(fā)人員在Kubernetes中的開發(fā)人員體驗。在Kubernetes中直接開發(fā)應用程序時,您將能夠充分利用諸如go build依賴項緩存,杜松子酒熱重裝器或IDE調試器(VS Code,GoLand,Atom…)之類的工具。

步驟1:部署Go Sample App

通過執(zhí)行以下命令來獲取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清單。通過執(zhí)行以下命令運行應用程序:

$ kubectl apply -f k8s.yml
deployment.apps “hello-world” created
service “hello-world” created

這很酷!您鍵入了一個命令,您的應用程序的開發(fā)版本僅運行??。

步驟2:安裝Okteto CLI

Okteto CLI是一個開源項目,可以讓你直接在Kubernetes開發(fā)應用程序,同時充分利用當地知名的模具。我們將使用它來加快我們的開發(fā)周期,而不是使用基于構建docker映像和重新部署容器的典型開發(fā)工作流程。

通過運行以下命令來安裝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中啟動您的開發(fā)環(huán)境

部署Go Sample Application后,運行以下命令:

$ okteto up
? Development environment activated
? Files synchronized
  Namespace: pchico83
  Name: hello-world
  Forward: 8080 -> 8080
           2345 -> 2345
okteto>

okteto up命令將啟動Kubernetes開發(fā)環(huán)境,這意味著:

  • Go Sample App容器已使用docker image更新okteto/golang:1。該圖像包含構建,測試,調試和運行Go Sample App所需的開發(fā)工具。
  • 一個文件同步服務創(chuàng)建,讓您改變了最新的本地文件系統(tǒng)和應用程序之間的豆莢。
  • 附加了一個卷以將Go緩存和軟件包持久保存在Kubernetes開發(fā)環(huán)境中。
  • 容器端口8080(應用程序)和2345(調試器)被轉發(fā)到localhost。
  • 在您的Kubernetes開發(fā)環(huán)境中啟動了一個遠程Shell。就像在本地計算機中一樣,構建,測試和運行您的應用程序。

所有這些(以及更多)都可以通過okteto.yml 清單文件進行自定義。

要運行該應用程序,請在遠程shell程序中執(zhí)行:

okteto> go run main.go
Starting hello-world server...

第一次運行該應用程序時,Go會下載您的依賴項并編譯您的應用程序。等待此過程完成并通過在本地shell程序中運行以下命令來測試您的應用程序:

$ curl localhost:8080
Hello world!

步驟4:直接在Kubernetes中進行開發(fā)

main.go在您喜歡的本地IDE中打開文件,然后在第17行上將響應消息修改為來自集群的Hello world!。保存您的更改。

func helloServer(w http.ResponseWriter, r *http.Request) {
 fmt.Fprint(w, “Hello world from the cluster!”)
}

Okteto將您的更改同步到Kubernetes中的開發(fā)環(huán)境。go run main.go通過按取消從遠程Shell 執(zhí)行ctrl + c。重新運行您的應用程序:

okteto> go run main.go
Starting hello-world server...

從本地外殼調用您的應用程序以驗證更改:

$ curl localhost:8080
Hello world from the cluster!

您的代碼更改立即應用于Kubernetes。無需提交,構建或推送??!

步驟5:直接在Kubernetes中進行調試

Okteto使您可以直接從自己喜歡的IDE調試應用程序。讓我們看一下它在VS Code中的工作原理,VS Code是Go開發(fā)中最受歡迎的IDE之一。

go run main.go通過按取消從遠程Shell 執(zhí)行ctrl + c。在調試模式下重新運行您的應用程序:

okteto> dlv debug --headless --listen=:2345 --log --api-version=2
API server listening at: [::]:2345
2019–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執(zhí)行來調用您的應用程序:

$ curl localhost:8080

執(zhí)行將在您的斷點處停止。然后,您可以檢查請求,可用變量等。

結論

Kubernetes有潛力成為一個強大的開發(fā)平臺,提供可復制的,資源高效的和類似生產的開發(fā)環(huán)境。我們已經向您展示了如何使用Okteto創(chuàng)建開發(fā)工作流程,該工作流程還使您可以在直接在Kubernetes中直接開發(fā)應用程序時利用增量構建,熱重載器或調試器等功能。

加快您的開發(fā)速度,并立即開始在Kubernetes中直接進行開發(fā)。讓我們知道您在Twitter上Kubernetes閑置的Okteto頻道對此有何想法。

翻譯自:https://medium.com/okteto/how-to-develop-go-applications-in-kubernetes-8d733391564c

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容