基于K8S API管理工作负载
下载kubeconf文件
基于K8S API管理工作负载,首先需要获取kubeconf文件,具体参考这里。
我们将文件保存为:~/myconf-eb-kubeconfig
代码示例
以下给出通过api查看default names下所有pod的示例代码。
Python代码
首先安装 kubernetes pip包:
pip install kubernetes
示例代码如下:
from kubernetes import client, config
from kubernetes.client.rest import ApiException
import os
def list_pods_in_default_namespace(kubeconfig_path):
"""
查看 default namespace 中的 pods
"""
try:
# 加载指定的 kubeconfig 文件
config.load_kube_config(config_file=kubeconfig_path)
# 创建 CoreV1Api 实例
v1 = client.CoreV1Api()
# 获取 default namespace 中的 pods
print(f"正在从 kubeconfig: {kubeconfig_path} 获取 default namespace 中的 pods...")
pods = v1.list_namespaced_pod(namespace="default")
print(f"\n在 default namespace 中找到 {len(pods.items)} 个 pod:")
print("=" * 80)
# 打印 pod 信息
for i, pod in enumerate(pods.items, 1):
print(f"{i}. Pod名称: {pod.metadata.name}")
print(f" 命名空间: {pod.metadata.namespace}")
print(f" 状态: {pod.status.phase}")
print(f" 节点: {pod.spec.node_name if pod.spec.node_name else '未调度'}")
print(f" IP地址: {pod.status.pod_ip}")
print(f" 创建时间: {pod.metadata.creation_timestamp}")
print(f" 标签: {pod.metadata.labels}")
print("-" * 80)
except ApiException as e:
print(f"Kubernetes API 错误: {e}")
except Exception as e:
print(f"发生错误: {e}")
def main():
# 指定 kubeconfig 文件路径
kubeconfig_path = os.path.expanduser("~/myconf-eb-kubeconfig")
# 检查文件是否存在
if not os.path.exists(kubeconfig_path):
print(f"错误: kubeconfig 文件不存在: {kubeconfig_path}")
return
# 列出 default namespace 中的 pods
list_pods_in_default_namespace(kubeconfig_path)
if __name__ == "__main__":
main()
Go代码
示例代码如下:
package main
import (
"context"
"fmt"
"log"
"os"
"path/filepath"
"time"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
"k8s.io/client-go/util/homedir"
)
func main() {
// 设置 kubeconfig 文件路径
kubeconfigPath := filepath.Join(homedir.HomeDir(), "myconf-eb-kubeconfig")
// 检查文件是否存在
if _, err := os.Stat(kubeconfigPath); os.IsNotExist(err) {
log.Fatalf("错误: kubeconfig 文件不存在: %s", kubeconfigPath)
}
// 加载 kubeconfig 配置
config, err := clientcmd.BuildConfigFromFlags("", kubeconfigPath)
if err != nil {
log.Fatalf("加载 kubeconfig 失败: %v", err)
}
// 创建 Kubernetes 客户端
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
log.Fatalf("创建 Kubernetes 客户端失败: %v", err)
}
// 获取 default namespace 中的 pods
fmt.Printf("正在从 kubeconfig: %s 获取 default namespace 中的 pods...\n", kubeconfigPath)
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
pods, err := clientset.CoreV1().Pods("default").List(ctx, metav1.ListOptions{})
if err != nil {
log.Fatalf("获取 pods 失败: %v", err)
}
fmt.Printf("\n在 default namespace 中找到 %d 个 pod:\n", len(pods.Items))
fmt.Println("================================================================================")
for i, pod := range pods.Items {
fmt.Printf("%d. Pod名称: %s\n", i+1, pod.Name)
fmt.Printf(" 命名空间: %s\n", pod.Namespace)
fmt.Printf(" 状态: %s\n", pod.Status.Phase)
fmt.Printf(" 节点: %s\n", pod.Spec.NodeName)
fmt.Printf(" IP地址: %s\n", pod.Status.PodIP)
fmt.Printf(" 创建时间: %s\n", pod.CreationTimestamp.Format("2006-01-02 15:04:05"))
fmt.Printf(" 标签: %v\n", pod.Labels)
fmt.Println("--------------------------------------------------------------------------------")
}
}