首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

近日见闻

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

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

关于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)

}

对于 delete、update 和 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/

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OyQ2OURl5yVh5gvo7g5S0ikw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券