我正在使用go-client来访问我的环境中的k8s资源。有API来获取/列出pod、命名空间等。如何访问当前正在运行的Pod?
wb1gzix01#
您 可以 使用 窗格 字段 Expose Pod Information to Containers Through Environment Variables :
apiVersion: v1 kind: Pod metadata: name: dapi-envars-fieldref spec: containers: - name: test-container ... ... env: - name: MY_NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName - name: MY_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: MY_POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: MY_POD_IP valueFrom: fieldRef: fieldPath: status.podIP - name: MY_POD_SERVICE_ACCOUNT valueFrom: fieldRef: fieldPath: spec.serviceAccountName restartPolicy: Never
中 的 每 一 个然后 在 Go 语言 代码 中 查找 这些 env 变量 :
log.Printf("MY_POD_NAME: %q", os.Getenv("MY_POD_NAME"))
格式
pzfprimi2#
Kubernetes client-go提供了用于访问Pod的API,CoreV 1包提供了用于获取所有Pod的API。请参阅文档https://pkg.go.dev/k8s.io/client-go/kubernetes/typed/core/v1#CoreV1Client.Pods您可以通过名称空间、标签或查询轻松地过滤或获取Pod,请参阅获取Namespace中所有窗格的示例代码。
config, err := clientcmd.BuildConfigFromFlags("", "PATH to cluster config yaml") clientset, err := kubernetes.NewForConfig(config) if err != nil { panic(err.Error()) } // Get all pods in namespace pods, err := clientset.CoreV1().Pods("NANESPACE").List(context.TODO(), metav1.ListOptions{}) if err != nil { panic(err.Error()) }
请参阅使用标签获取pod的示例代码:
labal := fmt.Sprintf("LABLE-NAME=%s", "SOME LABEL VALUE") ap1 := sm.clientset.CoreV1() pods, _ := ap1.Pods(namespace).List(context.Background(), metav1.ListOptions{LabelSelector: labal}) pods_num := len(pods.Items) fmt.Printf("Found the following number of Pods: %d\n", pods_num) for i, pod := range pods.Items { fmt.Printf("[%2d] %s, Phase: %s, Created: %s, HostIP: %s\n", i, pod.GetName(), string(pod.Status.Phase), pod.GetCreationTimestamp(), string(pod.Status.HostIP)) }
2条答案
按热度按时间wb1gzix01#
您 可以 使用 窗格 字段 Expose Pod Information to Containers Through Environment Variables :
中 的 每 一 个
然后 在 Go 语言 代码 中 查找 这些 env 变量 :
格式
pzfprimi2#
Kubernetes client-go提供了用于访问Pod的API,CoreV 1包提供了用于获取所有Pod的API。请参阅文档https://pkg.go.dev/k8s.io/client-go/kubernetes/typed/core/v1#CoreV1Client.Pods
您可以通过名称空间、标签或查询轻松地过滤或获取Pod,
请参阅获取Namespace中所有窗格的示例代码。
请参阅使用标签获取pod的示例代码: