digitalocean-cloud-controller-manager
是Digitalocean的Kubernetes Cloud Controller Manager。在此處閱讀有關雲控制器經理的更多信息。運行digitalocean-cloud-controller-manager
可讓您利用Digitalocean在Kubernetes群集上提供的許多雲提供商功能。
雲控制器管理器遵循語義版本控制。儘管該版本仍低於V1,但該項目被認為是準備生產的。
由於Kubernetes釋放週期的快速,CCM(Cloud Controller Manager)僅支持Digitalocean Kubernetes產品也支持的版本。其他任何發行版將不受我們的正式支持。
在此處了解有關運行Digitalocean Cloud Controller Manager的更多信息!
請注意,此CCM默認是在DOKS(Digitalocean Managed Kubernetes)上安裝的,您不必自己做。
以下是您如何利用digitalocean-cloud-controller-manager
的一些示例:
當您通過CCM(通過LoadBalancer
類型的服務)創建負載 - 平衡器時,絕對不得手動更改DO Load-Balancer配置非常重要。 CCM內置的和解循環最終將恢復這種變化。可以更改的負載平衡名稱中有一個例外(另請參見Load-Balancer ID註釋上的文檔)。
除此之外,使負載量配置更改更改的唯一安全場所是通過服務對象。
出於技術原因,端口50053、50054和50055不能用作負載 - 平衡器入口端口(即,負載範圍的端口聆聽請求的端口)。試圖將受影響的端口之一用作服務端口的導致422輸入端口是無效的HTTP錯誤響應將由DO API返回(並浮出水面為Kubernetes事件)。
解決方案是將服務端口更改為不同的,不衝突的端口。
v1.17.x
該項目使用GO模塊進行依賴管理並採用供應商。請確保在任何依賴性修改後運行make vendor
。
更改代碼後,運行測試和CI檢查:
make ci
如果您想在特定的集群上本地運行digitalocean-cloud-controller-manager
,請保持kubeconfig準備就緒,並以這樣的方式啟動二進製文件:
cd cloud-controller-manager/cmd/digitalocean-cloud-controller-manager
REGION=fra1 DO_ACCESS_TOKEN=your_access_token go run main.go
--kubeconfig < path to your kubeconfig file >
--leader-elect=false --v=5 --cloud-provider=digitalocean
REGION
環境變量採用有效的數字偏移區域。可以將其設置為防止digitalocean-cloud-controller-manager
嘗試訪問僅在液滴上可用的Digitalocean Metadata服務。如果設置了區域變量,則DO區域服務將用於驗證指定的區域。它也可以用於本地開發目的。總體而言,只要您選擇一個區域,您選擇的哪個區域就無關緊要。
您可能還需要在DO_ACCESS_TOKEN
環境變量中提供Digitalocean訪問令牌。令牌無需對雲控制器啟動有效,但是在這種情況下,您將無法驗證與Digitalocean API的集成。
請注意,如果您使用在digitalocean上創建的kubernetes群集,則將在集群中運行一個雲控制器管理器,因此您的本地群集將與它競爭API訪問。
您可以讓digitalocean-cloud-controller-manager
管理Digitalocean Firewall,該防火牆會動態調整訪問Nodeports的規則:一旦創建了類型NodePort
的服務,防火牆控制器將更新防火牆以允許公眾訪問該NodePort。同樣,如果將服務刪除或更改為其他類型,則將自動撤回訪問權限。
示例調用:
cd cloud-controller-manager/cmd/digitalocean-cloud-controller-manager
DO_ACCESS_TOKEN= < your_access_token >
PUBLIC_ACCESS_FIREWALL_NAME=firewall_name
PUBLIC_ACCESS_FIREWALL_TAGS=worker-droplet
digitalocean-cloud-controller-manager
--kubeconfig < path to your kubeconfig file >
--leader-elect=false --v=5 --cloud-provider=digitalocean
PUBLIC_ACCESS_FIREWALL_NAME
環境變量定義了防火牆的名稱。如果沒有找到該名稱的防火牆,則會創建防火牆。
PUBLIC_ACCESS_FIREWALL_TAGS
環境變量是指與防火牆應應用的液滴相關的標籤。通常,這是連接到工作節點液滴的標籤。多個標籤以邏輯或方式應用。
在某些情況下,可能不需要用於特定服務的防火牆管理。一個例子是,NodePort僅在VPC上可以訪問。在這種情況下,可以使用服務註釋kubernetes.digitalocean.com/firewall-managed
可用於選擇性地將給定服務排除在防火牆管理中。如果設置為"false"
,則不會為該服務創建入站規則,從而有效地禁用了對NodePort的公共訪問權限。 (請注意“布爾”註釋值必須包含的引號。)如果省略註釋,則將默認行為設置為"true
”或包含無效的值。
如果丟失環境變量或空白,則無法管理防火牆。一旦創建了防火牆,就不允許公開訪問Nodeports。用戶應創建其他防火牆以進一步擴展訪問。
如果您有興趣揭示Prometheus指標,則可以通過指標端點來暴露它們。該命令看起來與此相似:
cd cloud-controller-manager/cmd/digitalocean-cloud-controller-manager
DO_ACCESS_TOKEN=your_access_token
METRICS_ADDR= < host > : < port >
digitalocean-cloud-controller-manager
--kubeconfig < path to your kubeconfig file >
--leader-elect=false --v=5 --cloud-provider=digitalocean
METRICS_ADDR
環境變量採用有效的端點,您想使用這些端點來服務您的Prometheus指標。為了有效,它應該以<host>:<port>
形式形式。
在啟動digitalocean-cloud-controller-manager
之後,運行以下curl命令以查看Prometheus指標輸出:
curl < host > : < port > /metrics
入學服務器是一種可選的組件,旨在減少託管對象(lbs等)的不良配置更改。如果您想進一步了解,請閱讀文檔。
API使用是否受到一定速率限制。為了防止對極重重的常規使用或病理案例(例如,由於乾擾第三方控制器而導致的錯誤或API)的配額,可以通過DO_API_RATE_LIMIT_QPS
環境變量配置自定義費率限制。它接受浮點值,例如DO_API_RATE_LIMIT_QPS=3.5
將API使用限制為每秒3.5個查詢。
如果要在容器化的環境中測試更改,請創建一個新映像,其中版本集用於dev
:
VERSION=dev make publish
這將創建一個二進製版本的dev
和Docker Image的二進製文件,並將其推向digitalocean/digitalocean-cloud-controller-manager:dev
。
go get -u ./...
go mod tidy
go mod vendor
要創建Docker映像並生成清單,請轉到GitHub上的“動作”頁面,然後單擊“運行工作流”。指定要創建的github <tag>
,確保它帶有v
運行工作流程還要求您暫時關閉“在合併之前”設置“主分支保護規則設置”中的設置。發布後,別忘了將其重新打開!
工作流程執行以下操作:
<tag>
make bump-version
<tag>.yaml
releases/
目錄下定單文件<tag>
標記新提交digitalocean/digitalocean-cloud-controller-manager:<tag>
digitalocean/digitalocean-cloud-controller-manager:<tag>
dockerhub注意:此工作流是不推薦使用的,請更喜歡上述GitHub動作工作流程。
要手動發布新版本,請首先碰到版本:
make NEW_VERSION=v1.0.0 bump-version
確保一切看起來都不錯。創建一個具有所有更改的新分支:
git checkout -b release- < new version > origin/master
git commit -a -v
git push origin release- < new version >
合併掌握後,標記提交並將其推開:
git checkout master
git pull
git tag < new version >
git push origin < new version >
最後,使用新版本從Master創建GitHub版本,並將其發布:
make publish
這將編譯包含二進製文件的二進製文件,該二進製版本捆綁在Docker映像中,該版本被推到digitalocean/digitalocean-cloud-controller-manager:<new version>
在Digitalocean,我們珍視並熱愛我們的社區!如果您有任何問題或想做出貢獻,請隨時打開以下任何維護者的問題/PR和CC。