簡體   English   中英

如何使用 go-client 在 k8s 中訪問我的 pod

[英]How to access my pod in k8s using go-client

我正在使用 go-client 訪問我環境中的 k8s 資源。 有用於獲取/列出 pod、名稱空間等的 API。

如何訪問我當前正在運行的 pod?

您可以使用pod 字段通過環境變量向容器公開 Pod 信息

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 代碼中查找這些環境變量:

log.Printf("MY_POD_NAME: %q", os.Getenv("MY_POD_NAME"))

Kube.netes client-go 提供 API 來訪問 pod,而 CoreV1 package 提供 API 來獲取所有 Pod 請參閱文檔https://pkg.go.dev/k8s.io/clientes.go/kube /core/v1#CoreV1Client.Pods

您可以通過命名空間、Label 或查詢輕松過濾或獲取 Pod,

查看示例代碼以獲取命名空間中的所有 pod。


  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())
  }

請參閱使用 label 獲取 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))
     }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM