标签: kubernetes-go-client

如何在 Prometheus 中显示使用 golang 客户端库从 Kubernetes 中运行的所有 pod 捕获的自定义应用程序指标

我正在尝试使用 prometheus 客户端库在 golang 中获取一些自定义应用程序指标,以显示在 Prometheus 中。

我有以下工作:

apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod
  labels:
    zone: prod
    version: v1
  annotations:
   prometheus.io/scrape: 'true'
   prometheus.io/port: '8080'

spec:
   containers:
    - name: my-container
      image: name/my-app:latest
      imagePullPolicy: IfNotPresent
      ports:
      - containerPort: 8080
Run Code Online (Sandbox Code Playgroud)
  • 如果我使用以下方法连接到我的 pod:

kubectl exec -it my-app-pod -- /bin/bash

然后在“localhost:8080/metrics”上执行 wget,我可以看到我的指标

到目前为止一切顺利,这是我撞墙的地方。我可以让多个 …

go kubernetes prometheus kubernetes-go-client prometheus-operator

5
推荐指数
1
解决办法
2691
查看次数

如何在Pod中获取当前名称空间?

我可以想到的一种方法是设置一个环境,该环境在定义Pod时应使用Pod的命名空间。
动态获取名称空间而不需要更改Pod会更好,因为它减轻了构造Pod的负担。

那么有没有办法在Pod中获取当前的名称空间?

kubernetes kubernetes-go-client

5
推荐指数
2
解决办法
3390
查看次数

kubernetes client-go:将 labelselector 转换为标签字符串

在kubernetes客户去API(或其他图书馆使用它),是有一个实用功能的转换k8s.io/apimachinery/pkg/apis/meta/v1/LabelSelector为字符串,以填补该领域LabelSelectork8s.io/apimachinery/pkg/apis/meta/v1/ListOptions

client-go挖掘了代码,但我找不到这样的功能。

LabelSelector.Marshall()也不LabelSelector.String()给我说(毫不奇怪,因为这不是他们的目的,但我想也无妨)。

背景

我有类似的规范描述k8s.io/api/extensions/v1beta1/Deployment,并想使用它的一组选择器标签(即Selector字段)来查询它的 pod 使用

options := metav1.ListOptions{
    LabelSelector: <stringified labels>,
}

podList, err := clientset.CoreV1().Pods(<namespace>).List(options)
Run Code Online (Sandbox Code Playgroud)

go kubernetes kubernetes-go-client

5
推荐指数
1
解决办法
4250
查看次数

无法覆盖 Kubernetes Go 客户端中的 Kubernetes 配置

我想使用 Kubernetes Go 客户端在集群中执行各种操作。我正在加载kubeconfig包含多个集群和上下文的本地。默认上下文是prod,我要覆盖的配置值之一是CurrentContext

    clientConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
        &clientcmd.ClientConfigLoadingRules{ExplicitPath: "/Users/me/.kube/config"},
        &clientcmd.ConfigOverrides{
            CurrentContext: "stage",
        })

    rawConfig, _ := clientConfig.RawConfig()
    log.Printf(rawConfig.CurrentContext) // outputs "prod" instead of "stage"
Run Code Online (Sandbox Code Playgroud)

当我检查 RawConfig()当前上下文时,仍然是“prod”而不是“stage”。为什么配置覆盖不起作用?

AuthInfo 等的覆盖如何工作?覆盖只接受一个,AuthInfo而配置包含一个映射AuthInfo

GitHub 相关问题https://github.com/kubernetes/client-go/issues/735

go kubernetes kubernetes-go-client

5
推荐指数
1
解决办法
619
查看次数

如何使用client-go访问kubernetes CRD?

我的 CRD 很少,但我不确定如何查询 kube-apiserver 以获取 CR 列表。任何人都可以提供任何示例代码吗?

go kubernetes kubernetes-go-client kubernetes-custom-resources kubernetes-apiserver

5
推荐指数
1
解决办法
1067
查看次数

go-generics :将实现 client.Object 的对象列表转换为列表

我们有以下类型,它是通用资源列表,该结构有 4 个通用参数(全部与对象列表指针类型相关),但我找不到减少它的方法。

import(
  ...
   "sigs.k8s.io/controller-runtime/pkg/client"
) 

type GenResourceLister[OBJ any, OBJPTR interface {
    client.Object
    *OBJ
}, LIST interface {
    GetItems() []OBJ
}, LISTPTR interface {
    client.ObjectList
    *LIST
}] struct{}
Run Code Online (Sandbox Code Playgroud)

以下函数有 2 个泛型参数,其中一个是切片参数的元素类型,但我认为另一个(其指针类型)会阻止类型推断,因此必须在每次调用时指定参数。我找不到摆脱它们的方法。

// itemsToObjectList converts a list of objects whose pointer
// type implements client.Object to a list of client.Object

func itemsToObjectList[T any, TPTR interface {
    client.Object
    *T
}](items []T) []client.Object {
    objs := make([]client.Object, 0, len(items))
    for _, resource := range items {
        resource := resource …
Run Code Online (Sandbox Code Playgroud)

generics polymorphism go kubernetes-go-client

5
推荐指数
0
解决办法
725
查看次数

如何在kubernetes go client pod spec中提供资源限制?

    Spec: v1.PodSpec{
            Containers: []v1.Container{
                v1.Container{
                    Name:            podName,
                    Image:           deploymentName,
                    ImagePullPolicy: "IfNotPresent",
                    Ports:           []v1.ContainerPort{},
                    Env: []v1.EnvVar{
                        v1.EnvVar{
                            Name:  "RASA_NLU_CONFIG",
                            Value: os.Getenv("RASA_NLU_CONFIG"),
                        },
                        v1.EnvVar{
                            Name:  "RASA_NLU_DATA",
                            Value: os.Getenv("RASA_NLU_DATA"),
                        },
                    },
                    Resources: v1.ResourceRequirements{},
                },
            },
            RestartPolicy: v1.RestartPolicyOnFailure,
        },
Run Code Online (Sandbox Code Playgroud)

我想提供相应的资源限制,例如:

resources:
  limits:
    cpu: "1"
  requests:
    cpu: "0.5"
args:
- -cpus
- "2"
Run Code Online (Sandbox Code Playgroud)

我该怎么做。我尝试添加Limits及其映射键值对,但这似乎是一个嵌套的结构。关于如何在kube client go中提供资源似乎没有任何示例。

kubernetes kubernetes-go-client

4
推荐指数
2
解决办法
810
查看次数

使用 Kubernetes go-client 向 Pod 添加标签的最短方法是什么

我有一个演示 golang 程序来列出没有特定标签的 Pod。我想修改它,以便它还可以为每个 pod 添加标签。

(我使用的是 AWS 托管的 Kubernetes 服务 EKS,因此有一些特定于 EKS 的样板代码)

package main

import (
    "fmt"
    eksauth "github.com/chankh/eksutil/pkg/auth"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func main() {
    cfg := &eksauth.ClusterConfig{ClusterName: "my_cluster_name"}

    clientset, _ := eksauth.NewAuthClient(cfg)
    api := clientset.CoreV1()

    // Get all pods from all namespaces without the "sent_alert_emailed" label.
    pods, _ := api.Pods("").List(metav1.ListOptions{LabelSelector: "!sent_alert_emailed"})

    for i, pod := range pods.Items {
        fmt.Println(fmt.Sprintf("[%2d] %s, Phase: %s, Created: %s, HostIP: %s", i, pod.GetName(), string(pod.Status.Phase), pod.GetCreationTimestamp(), string(pod.Status.HostIP)))

        // Here I want to add …
Run Code Online (Sandbox Code Playgroud)

go kubernetes kubernetes-go-client

4
推荐指数
1
解决办法
6849
查看次数

Kubernetes 客户端找不到模块

我正在尝试连接到托管在 上的本地 Kubernetes 集群minikube这是相同的代码,现在当我这样做时go run minikube.go,它给了我一个错误说:

../../../pkg/mod/k8s.io/client-go@v11.0.0+incompatible/kubernetes/scheme/register.go:26:2: module k8s.io/api@latest found (v0.19.0), but does not contain package k8s.io/api/auditregistration/v1alpha1`.
Run Code Online (Sandbox Code Playgroud)

现在,我尝试使用手动安装该软件包,go get然后我发现该软件包不存在。我怎样才能让它工作并解决这个问题?我的go.mod 文件,以防有人想看。

go kubernetes kubernetes-go-client go-packages go-modules

4
推荐指数
1
解决办法
7026
查看次数

kubernetes go 客户端补丁示例

经过一番搜索后,我无法找到使用任何策略在 Patch 上执行的 golang Kube 客户端示例……我正在寻找执行此操作的 golang 示例:

kubectl patch pod valid-pod --type='json' -p='[{"op": "replace", "path": "/spec/containers/0/image", "value":"new image"}]'
Run Code Online (Sandbox Code Playgroud)

我正在使用https://github.com/kubernetes/client-go v2.0.0

谁能给我举个例子?谢谢。

kubernetes-go-client

3
推荐指数
1
解决办法
4881
查看次数