当前位置: 首页 > article >正文

使用client-go在命令空间test里面对pod进行操作

目录

一、获取使用restApi调用的token信息

二、client-go操作pod示例

1、获取到客户端

2、创建pod

3、获取test命令空间的所有pod

4、获取某个具体pod的详细信息

5、更新pod

6、删除pod

三、总结


官方参考地址:https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/

一、获取使用restApi调用的token信息


[root@k8s-master01 projects]# kubectl create token postman-sa
eyJhbGciOiJSUzI1NiIsImtpZCI6IkwzUWF1NHdyek9kZUl1NEJMWGFLV3NMenVkUmpxWTZfbzZlZktUTDZWeFkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzMyNjE4OTY0LCJpYXQiOjE3MzI2MTUzNjQsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJkZWZhdWx0Iiwic2VydmljZWFjY291bnQiOnsibmFtZSI6InBvc3RtYW4tc2EiLCJ1aWQiOiJjZWNjOTVlOC1hMmM4LTRkZjYtYmY4Ny1lMDg1ZjU0YjI5ODcifX0sIm5iZiI6MTczMjYxNTM2NCwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1bHQ6cG9zdG1hbi1zYSJ9.qAs7SZrm90WTGHYCVT_XAZ2q_GS12jOmlM03dsr-pQINcHUCP0QoNS7rELMJZhZF2p5j7kImkHEQyEG0s0xQxrT8Gqy2-USq5YYW3HLW2VOCQYsNaR1ih3EucTgOuSVvVkqelBR3AI6PSTkV1H2q5rik-7BYr7xxyu9A05gl7Cgbg0ZtR9WfKglChpQ1cgFC7OBo0CO1F-mkVZlaXigdnIEQNhhvIO0o-mxrPNFlQ5IMI1LAtXOrKnxxja5XfmiiOh2YohTaMJPfW5CRNwDIvzbP6C8dRoK-sC_jfYS0uMn2epAdzPyXu8s_LNLUxxxAg-BZD6U3OqX_2mK4lKS0KQ

通过使用kubectl create token serviceaccountName来获取到服务账号对应的token信息,进而直接通过client-go来操作k8s集群。

二、client-go操作pod示例

1、获取到客户端

func getClient() *kubernetes.Clientset {
	// 假设你已经有了token
	token := "eyJhbGciOiJSUzI1NiIsImtpZCI6IkwzUWF1NHdyek9kZUl1NEJMWGFLV3NMenVkUmpxWTZfbzZlZktUTDZWeFkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzMyNjE1NzMxLCJpYXQiOjE3MzI2MTIxMzEsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJkZWZhdWx0Iiwic2VydmljZWFjY291bnQiOnsibmFtZSI6InBvc3RtYW4tc2EiLCJ1aWQiOiJjZWNjOTVlOC1hMmM4LTRkZjYtYmY4Ny1lMDg1ZjU0YjI5ODcifX0sIm5iZiI6MTczMjYxMjEzMSwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1bHQ6cG9zdG1hbi1zYSJ9.o_4CGeouCp8OUv7wq_TlpdraoM_zo4TXxBKy-hBWK79KdnU5GttujAe1XX49Ib2Pj1ycGChZUKHYVtsjojKD5evsWjgzaULIJLJ8809OwGZGWbvVeTUaLf9Xoo9jOTuIRR98e3MwdbgeUypstvaQbdLmlPnlG7fs8Od9jfwQBRGttlsBTDqNG0o9QleJyk_hebanh1Z_eMQvUFdYSUc9RrQlSDSNvtAF_h6vhizdQeb_ePj1MPnZOPLUs9a4rbycJ5NtuWrLsDxpxlhrly_XDVUsvU9KqazaNG6Z8lIGgY09vQnDTht_-n0X9UJdQuf_u7BIS111wMHnqC50zDnoMA"

	// 创建配置
	config := &rest.Config{
		Host:        "https://192.168.188.101:6443",
		BearerToken: token,
		// 可能还需要设置其他字段,如TLSClientConfig等
		TLSClientConfig: rest.TLSClientConfig{
			Insecure: true, // 不要在生产环境中使用!
		},
	}

	// 创建客户端
	clientset, err := kubernetes.NewForConfig(config)
	if err != nil {
		// 处理错误
		log.Fatalf("Error to new client!")
	}
	return clientset
}

      参数说明:

       token为上面步骤获取到数据

      host地址为你k8s集群中apiServer的运行地址

2、创建pod

func createPod(clientset *kubernetes.Clientset) {

	// 定义Pod
	pod := &v1.Pod{
		ObjectMeta: metav1.ObjectMeta{
			Name: "example-pod",
			//Namespace: "test",
		},
		Spec: v1.PodSpec{
			Containers: []v1.Container{
				{
					Name:  "example-container",
					Image: "nginx:1.15-alpine",
				},
			},
		},
	}
	// 创建Pod
	fmt.Println("Creating pod...")
	podsClient := clientset.CoreV1().Pods("test")
	result, err := podsClient.Create(context.TODO(), pod, metav1.CreateOptions{})
	if err != nil {
		panic(err.Error())
	}
	fmt.Printf("Namespace: %s, Name: %s, Status: %s\n", result.Namespace, result.Name, result.Status.Phase)
}

3、获取test命令空间的所有pod

func listPod(clientset *kubernetes.Clientset) {
	// 创建Pod
	fmt.Println("list pod...")
	podsClient := clientset.CoreV1().Pods("test")
	result, err := podsClient.List(context.TODO(), metav1.ListOptions{})
	if err != nil {
		panic(err.Error())
	}
	for _, pod := range result.Items {
		fmt.Printf("Namespace: %s, Name: %s, Status: %s\n", pod.Namespace, pod.Name, pod.Status.Phase)
	}
}

4、获取某个具体pod的详细信息

func getPodDetail(clientset *kubernetes.Clientset) *v1.Pod {
	// 创建Pod
	fmt.Println("list pod...")
	podsClient := clientset.CoreV1().Pods("test")
	pod, err := podsClient.Get(context.TODO(), "example-pod", metav1.GetOptions{})
	if err != nil {
		panic(err.Error())
	}
	fmt.Printf("Namespace: %s, Name: %s, Status: %s\n", pod.Namespace, pod.Name, pod.Status.Phase)
	return pod
}

5、更新pod

func updatePod(clientset *kubernetes.Clientset) {
	pod := getPodDetail(clientset)
	// Update Pod (e.g., add an annotation)
	pod.Annotations = map[string]string{
		"updated-by": "client-go",
	}
	// 创建Pod
	fmt.Println("list pod...")
	podsClient := clientset.CoreV1().Pods("test")
	updatedPod, err := podsClient.Update(context.TODO(), pod, metav1.UpdateOptions{})
	if err != nil {
		log.Fatalf("Error updating Pod: %v", err)
	}
	fmt.Printf("Updated Pod %q with annotation.\n", updatedPod.Name)
	fmt.Printf("Namespace: %s, Name: %s, Status: %s\n", pod.Namespace, pod.Name, pod.Status.Phase)
}

6、删除pod

func deletePod(clientset *kubernetes.Clientset) {
	// Delete Pod
	deletePolicy := metav1.DeletePropagationForeground
	podsClient := clientset.CoreV1().Pods("test")
	err := podsClient.Delete(context.TODO(), "example-pod", metav1.DeleteOptions{
		PropagationPolicy: &deletePolicy,
	})
	if err != nil {
		log.Fatalf("Error deleting Pod: %v", err)
	}
	fmt.Printf("Pod %q deleted.\n", "example-pod")

}

三、总结

本文详细介绍了如何通过client-go来对pod进行操作,并且具体演示了对pod的创建、获取列表、获取pod详情、更新pod、已经删除pod的操作。


http://www.kler.cn/a/413411.html

相关文章:

  • 嵌入式开发中Java可以替代Qt吗?
  • Jenkins升级到最新版本后无法启动
  • 使用 pycharm 新建不使用 python 虚拟环境( venv、conda )的工程
  • Could not locate device support files.
  • Linux之网络基础
  • Android 12.0新增自定义HIDL问题记录
  • 云计算的计算包括哪些内容
  • JVM 性能调优 -- CMS 垃圾回收器 GC 日志分析【Full GC】
  • tongweb安全整改(by cz)
  • windows C#-使用反射访问特性
  • (笔记)简单了解ZYNQ
  • 【dvwa靶场:File Upload系列】File Upload低-中-高级别,通关啦
  • 判断电脑硬盘损坏的方法
  • react16为啥要更改生命周期
  • 【智能制造-46】人机工程(工厂自动化)
  • leetcode:129. 求根节点到叶节点数字之和
  • 视图查询中投影裁剪规则的原理和解析 | OceanBase 查询优化
  • 戴尔电脑安装centos7系统遇到的问题
  • c++趣味编程玩转物联网:基于树莓派Pico控制有源蜂鸣器
  • Linux之VMware安装以及centos7安装详细教程--图解
  • 七牛云AIGC内容安全方案助力企业合规创新
  • 【软件国产化】| Windows和Linux下文件名后缀是否区分大小写
  • 重构代码之将双向关联改为单向关联
  • C语言中常用的失败退出和成功返回
  • 利用 Watchtower 自动监听并更新正在运行的 Docker 容器
  • 如何选择合适的电网安全警示牌|防外破声光警示牌,确保电力设施安全