go - 使用 kubernetes go 客户端扩展部署副本

标签 go kubernetes client

我正在尝试使用 golang client 扩展部署.我发现的问题是 golang client does not have a scale method for deployments .我不知道我该怎么做。 我的想法是进行部署,修改副本,然后进行更新。

package main

import (
    "context"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    appsv1 "k8s.io/api/apps/v1"
    "flag"
    "fmt"
    "os"
    "path/filepath"

)

func main() {
    var kubeconfig *string
    if home := homedir.HomeDir(); home != "" {
        kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file")
    } else {
        kubeconfig = flag.String("kubeconfig", "", "absolute path to the kubeconfig file")
    }
    flag.Parse()

    config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
    if err != nil {
        panic(err)
    }
    clientset, err := kubernetes.NewForConfig(config)
    if err != nil {
        panic(err)
    }
    //get and update replicas
    deploymentsClient := clientset.AppsV1().Deployments(apiv1.NamespaceDefault)
    deployment, _ := deploymentsClient.Get(context.TODO(), "demo-deployment", metav1.GetOptions{})
    deploymentsClient.Update(context.TODO(), deployment, metav1.UpdateOptions{})
}

(示例取自 kubernetes client go github 存储库)

但我不知道这是否是最好的方法。

最佳答案

package main

import (
    "context"
    "log"
    "path/filepath"

    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/rest"
    "k8s.io/client-go/tools/clientcmd"
    "k8s.io/client-go/util/homedir"
)

func main() {
    kubeconfig := filepath.Join(homedir.HomeDir(), ".kube", "config")
    config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
    if err != nil {
        config, err = rest.InClusterConfig()
        if err != nil {
            log.Fatal(err)
        }
    }

    client, err := kubernetes.NewForConfig(config)
    if err != nil {
        log.Fatal(err)
    }

    s, err := client.AppsV1().
        Deployments("default").
        GetScale(context.TODO(), "nginx", metav1.GetOptions{})
    if err != nil {
        log.Fatal(err)
    }

    sc := *s
    sc.Spec.Replicas = 10

    us, err := client.AppsV1().
        Deployments("default").
        UpdateScale(context.TODO(),
            "nginx", &sc, metav1.UpdateOptions{})
    if err != nil {
        log.Fatal(err)
    }

    log.Println(*us)
}

关于go - 使用 kubernetes go 客户端扩展部署副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61653702/

相关文章:

c - TCP套接字,发送文件,客户端服务器,服务器不保存整个文件,C语言

go - 如何在Go中上传不为null的0值?

kubernetes - 为什么在 Kubernetes 中引入 ReplicaSet?

amazon-web-services - 如何在不使用 ELB 服务的情况下使用 kops 在 AWS 上创建 Kubernetes 集群?

elasticsearch - Helm delele 无限期挂起

java - 将参数从 Delphi 客户端传递到 Java Webservice

deployment - 部署 Go 应用程序

go - 取消 child 的上下文

xml - 有没有办法只在 go xml 包中编码 XML 开始标记?

qt - 从 C 函数向 QTextEdit 框写入文本