【问题标题】:Kubernetes client-go creating services and enpdointsKubernetes client-go 创建服务和 enpdoints
【发布时间】:2021-05-11 22:27:04
【问题描述】:

我正在寻找有关如何使用 client-go API 创建/更新服务和端点的指针。似乎找不到任何有关如何执行此操作的示例或文档。

谢谢! 萨蒂什

【问题讨论】:

  • 欢迎来到stackoverflow。如果您将问题集中在特定问题上,您最有可能得到有用的答案。请求示例或文档很少能得到好的答案。

标签: kubernetes client-go


【解决方案1】:
   clientset.CoreV1().Services("kube-system").Create(&corev1.Service{
            ObjectMeta: metav1.ObjectMeta{
                Name:                       controllerSVCName,
                Namespace:                  "kube-system",
                Labels: map[string]string{
                    "k8s-app": "kube-controller-manager",
                },
            },
            Spec: corev1.ServiceSpec{
                Ports:                    nil,
                Selector:                 nil,
                ClusterIP:                "",

            },
   })

【讨论】:

    【解决方案2】:

    基于this

    对于服务:

    serviceClient := clientset.AppsV1().Services(apiv1.NamespaceDefault)
    
    service := &corev1.Service{
            ObjectMeta: metav1.ObjectMeta{
                Name:                       "myservice",
                Namespace:                  "default",
                Labels: map[string]string{
                    "app": "myapp",
                },
            },
            Spec: corev1.ServiceSpec{
                Ports:                    nil,
                Selector:                 nil,
                ClusterIP:                "",
    
            },
    })
    
    // Create Service
    fmt.Println("Creating service...")
    result, err := servicesClient.Create(service)
    if err != nil {
        panic(err)
    }
    

    对于部署:

    deploymentsClient := clientset.AppsV1().Deployments(apiv1.NamespaceDefault)
    
    deployment := &appsv1.Deployment{
        ObjectMeta: metav1.ObjectMeta{
            Name: "demo-deployment",
        },
        Spec: appsv1.DeploymentSpec{
            Replicas: int32Ptr(2),
            Selector: &metav1.LabelSelector{
                MatchLabels: map[string]string{
                    "app": "demo",
                },
            },
            Template: apiv1.PodTemplateSpec{
                ObjectMeta: metav1.ObjectMeta{
                    Labels: map[string]string{
                        "app": "demo",
                    },
                },
                Spec: apiv1.PodSpec{
                    Containers: []apiv1.Container{
                        {
                            Name:  "web",
                            Image: "nginx:1.12",
                            Ports: []apiv1.ContainerPort{
                                {
                                    Name:          "http",
                                    Protocol:      apiv1.ProtocolTCP,
                                    ContainerPort: 80,
                                },
                            },
                        },
                    },
                },
            },
        },
    }
    
    // Create Deployment
    fmt.Println("Creating deployment...")
    result, err := deploymentsClient.Create(deployment)
    if err != nil {
        panic(err)
    }
    

    【讨论】:

    • 是的,我已经看到了 - 这会创建一个部署。我正在尝试更新现有部署的服务/端点条目。
    • 知道了,谢谢!我在 core/v1/service.go 中找到了它的代码 - 实现了 ServiceInterface 类型。
    • @Rico 如果我想获取 service.yaml 或 deployment.yaml 文件怎么办
    猜你喜欢
    • 2018-11-03
    • 1970-01-01
    • 2021-03-29
    • 2022-11-20
    • 2021-10-28
    • 2018-04-11
    • 1970-01-01
    • 2020-09-30
    • 2017-05-23
    相关资源
    最近更新 更多