猿问

当使用 k8s.io/client-go 库更改 kubernetes 部署时

语境

我正在编写一个脚本,该脚本使用k8s.io/client-go库(此处为 godocs)来操作部署。特别是,我想为集群中的每个 Deployment 添加一个标签选择器。部署标签选择器是不可变的。所以我的方法是:

  1. 创建每个 Deployment 的副本,唯一的区别是名称以“-temp”为后缀。这是为了最大限度地减少现有部署的停机时间。

  2. 删除原来的 Deployments。

  3. 重新创建原始 Deployments,唯一的区别是多了一个标签选择器。

  4. 删除临时部署。

我不能只使用 client-go 库按顺序执行步骤 1-4,因为我只想在 API 服务器认为上一步已完成时继续下一步。例如,在 API 服务器说原始 Deployments 已被删除之前,我不想执行第 3 步。否则,我会得到同名 Deployment 已存在的错误。

问题

使用 client-go 库检测 Deployment 何时完成创建和删除以及附加回调函数的最佳方法是什么?我遇到了以下包裹。

但是我不确定它们之间有什么区别以及使用哪一个。

我在这里阅读了watchinformer的示例。这是两个 相关的SO 问题。

更新

watch似乎提供了一种较低级别的方式来监视资源的变化并接收有关变化的事件。似乎使用SharedInformerFactory创建 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"

)



一只斗牛犬
浏览 118回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答