首页 > 其他分享 >使用cobra对pod增删改查

使用cobra对pod增删改查

时间:2023-12-15 22:24:05浏览次数:43  
标签:Cobra err Kubernetes 改查 cobra 命令 pod

使用Cobra框架完成pod增删改查

原创 cilliandevops 希里安 2023-12-12 18:52 发表于四川

近日见闻

  1. Ant Design 5.12.2 在近日发布,感兴趣的可以去看看更新了那些内容,我这边还只是简单的用了其vue社区版本

  2. Atlassian Confluence Data Center/Server 模板注入漏洞

漏洞Atlassian Confluence Data Center/Server 模板注入漏洞
漏洞类型 代码注入
发现时间 2023-12-06
影响广度 一般
CVE 编号 CVE-2023-22522
  1. 最近在研究服务网格,lstio、ingress、apisix的东西不少,感兴趣的同学可以一起交流下!

 

关于cobra框架

图片

 

Cobra 是一个用 Go 语言编写的命令行界面 (CLI) 应用程序开发框架。它被广泛用于创建具有复杂命令结构的应用程序,例如支持嵌套命令、全局和局部标志、以及自动生成帮助和文档的应用程序。由Go团队成员spf13为hugo创建的,并被很多流行的Go项目广泛采用。比如k8s、helm、docker等等。具体清单可以查看https://github.com/spf13/cobra/blob/main/site/content/projects_using_cobra.md

Cobra 同时也是一个应用程序,可以用来生成应用程序框架、命令和相关的文件。该项目由 Steve Francia 创建,并且有很多贡献者参与。Cobra 框架和应用程序被许多著名的 Go 语言项目使用,包括 Kubernetes、Hugo 以及 Docker 的一些组件。[1]

官网:https://cobra.dev/

Cobra 的主要特点包括:

  • 简单的命令结构:Cobra提供了一个简单的结构来创建命令、子命令以及它们之间的关系。

  • 全局、局部和持久标志:你可以为命令定义全局标志(对所有命令有效)或局部标志(仅对特定命令有效),以及持久标志(对命令和它的所有子命令有效)。

  • 自动生成文档:Cobra可以自动产生和更新命令文档,这样开发者就不需要手动维护帮助文件。

  • 参数解析:Cobra提供参数解析支持,帮助开发者处理命令行输入。

  • 自定义用法:通过自定义模板,你可以对帮助命令和用法提示进行个性化设置。

前两天我分享了用python监控pod状态的实现方法,有朋友在问,使用cobra框架和直接调用k8s-api有什么区别,如果你只是想单次或者简单地实现pod状态监控的功能,而不考虑将其作为一个命令行工具对外提供,那么可能直接使用 Go 调用 Kubernetes API 就足够了。如果你计划构建一个更复杂的 CLI 应用程序,该程序可能会随着时间的推移发展和扩展,并且需要良好的用户交互和文档支持,使用 Cobra 框架将会大大简化这个过程,并提供更专业的用户体验。

使用cobra完成k8s中的增删改查

使用Cobra完成 K8s中Pod的操作,你首先需要安装Cobra并初始化一个新项目,然后编写逻辑来与 Kubernetes API 交互。

步骤 1: 安装 Cobra

安装 Cobra CLI

go get -u github.com/spf13/cobra/cobra

步骤 2: 初始化一个新的 Cobra 应用

cobra init podcli --pkg-name github.com/yourusername/podcli
cd podcli

步骤 3: 添加 Pod 命令

为增删改查的每个操作创建一个子命令

cobra add create
cobra add delete
cobra add update
cobra add get

步骤 4: 实现与 Kubernetes API 交互逻辑

前提是你已经安装了client-go客户端库

go get k8s.io/client-go@latest

然后,在每个子命令文件中,比如 create.go,需要实现创建 Pod 的逻辑。以创建 Pod 命令为例,:

package cmd

import (
 "context"
 "fmt"
 "log"

 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 "k8s.io/client-go/kubernetes"
 "k8s.io/client-go/rest"

 "github.com/spf13/cobra"
)

// createCmd represents the create command
var createCmd = &cobra.Command{
 Use:   "create [name]",
 Short: "Create a new pod",
 Long:  `Create a new Kubernetes pod with the specified name.`,
 Run: func(cmd *cobra.Command, args []string) {
  if len(args) != 1 {
   log.Fatal("You must specify a name for the pod.")
  }
  name := args[0]
  createPod(name)
 },
}

func createPod(name string) {
 config, err := rest.InClusterConfig()
 if err != nil {
  log.Fatalf("Failed to get Kubernetes config: %v", err)
 }
 clientset, err := kubernetes.NewForConfig(config)
 if err != nil {
  log.Fatalf("Failed to create Kubernetes clientset: %v", err)
 }

 pod := /* ...构建你的 Pod 对象... */

 result, err := clientset.CoreV1().Pods("default").Create(context.TODO(), pod, metav1.CreateOptions{})
 if err != nil {
  log.Fatalf("Failed to create pod: %v", err)
 }
 fmt.Printf("Created pod %q.\n", result.GetObjectMeta().GetName())
}

func init() {
 rootCmd.AddCommand(createCmd)
}

对于 deleteupdate 和 get 命令,需要在各自的命令文件中实现类似的逻辑,与 Kubernetes API 进行交互,执行相应的操作。

步骤 5: 构建和运行你的命令行应用

构建应用程序:

go build -o podcli .

运行你的命令:

./podcli create my-pod
./podcli get my-pod
./podcli update my-pod --image=nginx:latest
./podcli delete my-pod

这只是一个简单的例子,在实际应用中,需要处理身份验证、配置细节、错误检查、以及与 Kubernetes 交互时的各种问题。

还有为了与 Kubernetes API 交互,需要有适当的权限和认证信息,这些信息可以在集群内部通过 ServiceAccount 获取,或者在集群外部通过 kubeconfig 文件获取。

参考资料

[1]

cobra框架被kubernetes采用: https://cobra.dev/

读者专属希里安技术交流群,构建高质量的技术交流社群。欢迎从事运维、开发岗位的大佬进群交流(添加时备注岗位-城市,不备注不通过,已在技术交流群的请勿重复添加)。主要以技术探讨、行业信息、内推、行业前沿为主,请文明发言。广告人士勿入,切勿群内私聊,防止被骗。

图片

 

希里安 IT、音乐、绘画 114篇原创内容 公众号 个人观点,仅供参考 阅读 630 希里安 ​ 喜欢此内容的人还喜欢   容器应用中的字体样式怎么查看?     希里安 不看的原因   Git详细使用教程     追逐时光者 不看的原因   Swagger快速入门:打造清晰的API文档     springboot葵花宝典 不看的原因   关注公众号后可以给作者发消息          

人划线

标签:Cobra,err,Kubernetes,改查,cobra,命令,pod
From: https://www.cnblogs.com/cheyunhua/p/17904279.html

相关文章

  • Mac cocoapods管理
    查看pod版本pod--version移除指定版本sudogemuninstallcocoapods-v1.9.1如果报权限错误,可使用sudogemuninstall-n/usr/local/bincocoapods-v1.12.0安装指定版本sudogeminstallcocoapods-v1.12.0如果报权限错误,可使用sudogeminstall-n/usr/loc......
  • pod控制器详解
    这一章节是讲解pod的编排和调度,就得用到诸多的控制器。kubectlapi-resources#查看k8s的资源有哪些1.控制器作用1.pod类型的资源,如果直接删除,不会重建2.控制器可以帮助用户监视、并且保证相应的节点上始终运行着用户定义好的pod副本数在运行。3.甚至pod超过、或者......
  • pod详解
    Pod是什么Pod是Kubernetes创建或部署的最小单位。一个Pod封装一个或多个容器(container)、存储资源(volume)、一个独立的网络IP以及管理控制容器运行方式的策略选项。Pod使用主要分为两种方式:Pod中运行一个容器。这是Kubernetes最常见的用法,您可以将Pod视为单个封装的容器,但是Kube......
  • springboot+vue小白升级之路13-AOP实现登录、增删改查操作日志管理
    还是接着上一个的内容,我把这个新增的关于日志的功能代码都贴出来,供大家学习参考。数据库数据库droptableifexistsan_log;createtablean_log( idintnotnullauto_incrementprimarykeycomment'主键id', namevarchar(255)notnullcomment'操作内容', log_dateda......
  • 通过 VS Code 优雅地编辑 Pod 内的代码(非 NodePort)
    目录1.概述2.NodePort方式3.Ingress方式4.救命稻草5.其他1.概述今天聊点啥呢,话说,你有没有想过怎样用VSCode连上K8s集群内的某个Pod,然后直接更新Pod内的代码?当我听到这个需求的时候,第一反应是在Pod内搞一个sshd,然后NodePort方式暴露Pod,接着用VSCode的......
  • springboot+vue小白升级之路03-实现增删改查、分页查询、模糊查询功能
    我们接着上一课的内容继续springboot后端pom.xml<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>......
  • k8s_kind-创建pod-拉取私有仓库镜像
    kind本地配置查看您创建的所有集群,您可以使用该kindgetclusters命令在kubernetes内使用私有镜像仓库之前,我们需要先有一个私有镜像仓库,并保证这个仓库是可用的检查私有镜像仓库是否可用kindcreatecluster--namedatapre##以将本机镜像导入到Kind集群中去......
  • Rocky Linux 9 安装 Podman
    1、安装Podmandnf-yinstallpodman2、配置镜像加速和私有镜像仓库#vim/etc/containers/registries.confunqualified-search-registries=["docker.io"][[registry]]prefix="docker.io"insecure=falseblocked=falselocation="docker.io"......
  • 全网最全,MySQL 增删改查高级命令硬核总结
    MySQL入门教程:全网最全,MySQL增删改查高级命令硬核总结原创 白鹿第一帅 白鹿第一帅 2023-12-0507:00 发表于四川文章目录前言一、连接到MySQL数据库1.1、连接到本机上的MySQL1.2、连接到远程主机上的MySQL二、退出MySQL命令三、修改MySQL密码3.1、先给roo......
  • 【数据库】sql server 中的sql语句--增删改查
    createdatabase学生gouse学生goCREATETABLEStudent(Snochar(7)PRIMARYKEY,Snamechar(10)NOTNULL,Ssexchar(2)check(ssexin('男','女')),Sagetinyint,Sdeptchar(20))CREATETABLECourse(Cn......