本文轉自Rancher Labsnode
關注咱們,便可第一時間獲取K8S教程哦docker
簡 介
時至今日,Kubernetes正在變得愈來愈重要,不只僅是運維須要Kubernetes,在開發的世界裏Kubernetes也不可或缺。所以可以熟練掌握Kubernetes知識會備受追捧。然而問題是,開發人員是否須要直接上手操做Kubernetes,他們是否必須徹底瞭解Kubernetes。
json
規避這一問題的常見方法是經過提供一個平臺或CI/CD流水線,將Kubernetes的複雜性從開發人員身上抽象出來,使開發人員更容易在Kubernetes內測試應用程序,而無需直接訪問Kubernetes。
安全
然而,容許開發人員直接訪問Kubernetes,讓他們直接在Kubernetes內部開發一些應用程序每每是有意義的,由於這樣能夠在一個很是接近生產的環境中工做。
服務器
這就出現了一個問題,即如何讓開發人員使用Kubernetes工做,同時又不因其複雜性而使他們不堪重負。這個問題的答案多是須要使用爲Kubernetes而準備的開發者工具,例如DevSpace。在這篇文章中,咱們將探討開發人員如何使用DevSpace和Rancher來簡化Kubernetes開發。
網絡
DevSpace: 使用Rancher輕鬆開發
DevSpace是一款面向Kubernetes的客戶端、開源的開發者工具。它能夠:app
-
直接在Kubernetes內部構建、測試和調試應用程序運維
-
經過更新正在運行的容器而不須要重建鏡像或重啓容器來進行熱重載開發ide
-
在團隊內部以及在開發、暫存和生產中統一部署工做流程工具
- 自動完成鏡像構建和部署的重複性任務
DevSpace做爲開發者的客戶端工具,是對Rancher的補充。開發者在Rancher內得到分配的項目,而後直接在Kubernetes內開發或測試應用。這使開發環境更接近生產環境,讓開發人員在發佈新功能時更有把握,相信一切都可以在生產環境中運行良好。
設置DevSpace
首先須要下載DevSpace二進制文件,接下來,在一個已經容器化的項目中經過運行devspace init建立一個新的項目。若是你如今手邊沒有一個能夠用來進行試驗的項目,你可使用咱們的示例項目:
https://devspace.sh/cli/docs/getting-started/initialize-project#choose-a-project
$ devspace init ____ ____ | _ \ _____ __/ ___| _ __ __ _ ___ ___ | | | |/ _ \ \ / /\___ \| '_ \ / _` |/ __/ _ \ | |_| | __/\ V / ___) | |_) | (_| | (_| __/ |____/ \___| \_/ |____/| .__/ \__,_|\___\___| |_| ? How do you want to initialize this project? Use the Dockerfile in ./Dockerfile ? Which registry do you want to use for storing your Docker images? Use hub.docker.com => you are logged in as devspacecloud ? Which image name do you want to use on Docker Hub? devspacecloud/quickstart ? Which port is your application listening on? (Enter to skip) 8080 [done] √ Project successfully initialized
在你回答了幾個關於應該被初始化的項目的問題以後,DevSpace將爲你建立一個devspace.yaml
。這個文件包含了如何使用DevSpace部署和開發項目,看起來以下所示:
version: v1beta9 # This section defines the images that should be built images: app: image: devspacecloud/quickstart preferSyncOverRebuild: true # this option tells devspace to automatically wrap the Dockerfile entrypoint in memory # with a small restart helper script so that the process can be easily restarted from within the # container. injectRestartHelper: true # Defines an array of everything (component, Helm chart, Kubernetes maninfests) # that will be deployed with DevSpace in the specified order deployments: - name: quickstart helm: # Uses a special helm chart provided by devspace to complement projects that don't have an own # helm chart componentChart: true values: containers: - image: devspacecloud/quickstart service: ports: - port: 8080 # Configuration that will be used for developing the application dev: # Port forward certain ports from the application to the local computer ports: - imageName: app forward: - port: 8080 # Hot reload changes instead of rebuilding the complete docker image all the time sync: - imageName: app # This tells devspace to restart the container after a file was synced into it onUpload: restartContainer: true profiles: ...
如今,你能夠跨團隊分享這個配置。它指定了如何在Kubernetes內部獨立於本地設置開發應用程序。
要開始開發應用程序,你須要訪問一個Kubernetes集羣或Rancher項目。最佳實踐是爲每一個開發人員建立一個Rancher項目或者爲一個共享集羣內的開發者團隊建立一個單一項目。
爲了在不一樣項目和命名空間之間確保簡單的隔離,使用常見的Kubernetes資源,如Resource Quotas、網絡策略、Pod安全策略和Limit Ranges等。
使用DevSpace開發應用程序
運行命令devspace.dev
來開啓開發流程。這將起到如下做用:
-
構建和部署你的應用程序
-
流式傳輸在部署過程當中部署的全部容器日誌
-
轉發在devspace.yaml中的dev.ports指定的全部端口
- 根據dev.sync中的同步配置來同步全部的文件更改,這樣你就能夠在運行的容器中重啓應用程序,而無需重建鏡像或從新部署任何東西
$ devspace dev -n test [info] Using kube context 'docker-desktop' [info] Using namespace 'test' [done] √ Created namespace: test [info] Building image 'myusername/devspace:C5992q4' with engine 'docker' Step 1/7 : FROM node:13.12-alpine ... [done] √ Done processing image 'myusername/devspace' [done] √ Deployed helm chart (Release revision: 0) [done] √ Successfully deployed quickstart with helm [done] √ Port forwarding started on 3000:3000 [done] √ Sync started on /devspace/examples/quickstart <-> . (Pod: test/quickstart-5d7f4d8fd-w95cx) ######################################################### [info] DevSpace UI available at: http://localhost:8090 ######################################################### [info] Starting log streaming for containers that use images defined in devspace.yaml [quickstart] [quickstart] > node-js-sample@0.0.1 start /app [quickstart] > nodemon index.js [quickstart] [quickstart] [nodemon] 1.19.4 [quickstart] [nodemon] to restart at any time, enter `rs` [quickstart] [nodemon] watching dir(s): *.* [quickstart] [nodemon] watching extensions: js,mjs,json [quickstart] [nodemon] starting `node index.js` [quickstart] Example app listening on port 3000!
本地修改文件後,文件會同步到容器中。容器重啓後無需經過Docker徹底重建,大大加快了開發進程。
而後DevSpace會啓動一個本地UI,你能夠訪問和檢查建立的pod。這簡化了與Kubernetes的交互,特別是對於不熟悉kubectl
的用戶。
除了devspace dev
,devspace deploy
命令能夠用於打包和部署應用程序,而不須要熱重載、端口轉發或日誌流。DevSpace提供了許多自定義功能,以根據你的用例和設置調整其行爲,包括:
-
依賴項,可讓你開發和部署依賴於其餘項目的項目
-
Profiles,能夠在一個
devspace.yaml
中進行多種配置 -
容許指定動態配置值的變量
-
容許爲項目配置自定義命令的命令
-
能夠在特定的DevSpace事件上執行某些功能的Hooks
-
自動爲devspace命令添加標誌(flag)的環境變量
- 擴展DevSpace和其命令的插件
DevSpace標準化和簡化了開發人員與Kubernetes的交互方式的同時,Rancher在服務器端管理着開發者如何在Kubernetes內部工做。Rancher可讓你啓動開發集羣並將它們分到不一樣的項目中,在這些項目中開發團隊能夠一塊兒工做和測試。
Resource Quotas項目除了常見的Kubernetes隔離資源外,還能夠在資源方面約束團隊,讓團隊在共享Kubernetes集羣中獲得公平的使用。共享Kubernetes集羣能夠減小基礎設施的開銷而且能夠直接在Kubernetes內部進行有效開發。
再爲快速開發添磚加瓦:loft
loft是另外一個頗有用的工具,它能夠在開發過程當中添加一些比較方便的功能,包括:
-
虛擬集羣,比「真實的」集羣成本更低,而且能夠在數秒內建立並再次清理,並且功能比簡單的命名空間更強大
-
在共享集羣中爲開發人員提供命名空間的自助服務(self-service)
-
睡眠模式,在必定時間不活動後,將命名空間置於睡眠狀態,以節省計算成本
你能夠經過安裝loft helm chart 輕鬆地將loft添加到Rancher。loft CLI也能夠做爲DevSpace的插件。
總 結
對於開發人員而言,熟練上手使用Kubernetes並不簡單,目前許多企業仍然在努力尋找一種方法來抽象Kubernetes的複雜性。這每每致使定製化的平臺缺少許多功能,限制了Kubernetes的潛力,而且是另外一個維護負擔。
將DevSpace、Rancher和loft結合起來,讓開發者能夠直接訪問Kubernetes,而且只須要一個命令:devspace dev
。
Rancher十分擅長建立和管理多個集羣,DevSpace擅長爲開發者提供工具。將Rancher和DevSpace相結合是十分簡單的,而且能夠顯著提高開發人員的生產力。
此外,loft爲開發團隊提供了更多有用的功能,讓開發者能夠隨時得到Kubernetes的工做環境,同時保持低成本。將Rancher、DevSpace和loft這三個工具結合起來,對於使用Kubernetes的開發團隊來講,是一個十分理想的設置。