[英]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.