語境我正在編寫一個腳本,該腳本使用k8s.io/client-go庫(此處為 godocs)來操作部署。特別是,我想為集群中的每個 Deployment 添加一個標(biāo)簽選擇器。部署標(biāo)簽選擇器是不可變的。所以我的方法是:創(chuàng)建每個 Deployment 的副本,唯一的區(qū)別是名稱以“-temp”為后綴。這是為了最大限度地減少現(xiàn)有部署的停機時間。刪除原來的 Deployments。重新創(chuàng)建原始 Deployments,唯一的區(qū)別是多了一個標(biāo)簽選擇器。刪除臨時部署。我不能只使用 client-go 庫按順序執(zhí)行步驟 1-4,因為我只想在 API 服務(wù)器認(rèn)為上一步已完成時繼續(xù)下一步。例如,在 API 服務(wù)器說原始 Deployments 已被刪除之前,我不想執(zhí)行第 3 步。否則,我會得到同名 Deployment 已存在的錯誤。問題使用 client-go 庫檢測 Deployment 何時完成創(chuàng)建和刪除以及附加回調(diào)函數(shù)的最佳方法是什么?我遇到了以下包裹。手表告密者緩存/線人但是我不確定它們之間有什么區(qū)別以及使用哪一個。我在這里閱讀了watch和informer的示例。這是兩個 相關(guān)的SO 問題。更新watch似乎提供了一種較低級別的方式來監(jiān)視資源的變化并接收有關(guān)變化的事件。似乎使用SharedInformerFactory創(chuàng)建 SharedInformer 是可行的方法。到目前為止我有import ( "encoding/json" "errors" "flag" "fmt" "io/ioutil" "k8s.io/api/apps/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/informers" "k8s.io/client-go/kubernetes" typedv1 "k8s.io/client-go/kubernetes/typed/apps/v1" "k8s.io/client-go/tools/cache" "path/filepath" "strings" // We need this import to load the GCP auth plugin which is required to authenticate against GKE clusters. _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" "k8s.io/client-go/tools/clientcmd" "log" "os")
- 1 回答
- 0 關(guān)注
- 157 瀏覽
添加回答
舉報
0/150
提交
取消