IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> kubectl通过插件获取pod列表 -> 正文阅读

[系统运维]kubectl通过插件获取pod列表

一 获取pod基础信息并且格式化展示

package main

import (
	"context"
	"github.com/olekukonko/tablewriter"
	"github.com/spf13/cobra"
	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/cli-runtime/pkg/genericclioptions"
	"k8s.io/client-go/kubernetes"
	"log"
	"os"
)

var client = InitClient() //这是 clientset

//核心的执行函数
func run(c *cobra.Command, args []string) error {
	//获取ns
	ns, err := c.Flags().GetString("namespace")
	if err != nil {
		return err
	}
	if ns == "" {
		ns = "default"
	}
	//拿到具体的数据
	list, err := client.CoreV1().Pods(ns).List(context.Background(), v1.ListOptions{})
	if err != nil {
		return err
	}
	//表格处理
	table := tablewriter.NewWriter(os.Stdout)
	table.SetHeader([]string{"名称", "命名空间", "IP", "状态"})

	for _, pod := range list.Items {
		table.Append([]string{pod.Name, pod.Namespace, pod.Status.PodIP,
			string(pod.Status.Phase)})
	}
	table.Render()
	return nil

}

var cfgFlags *genericclioptions.ConfigFlags

//通过config 获取clientset client
func InitClient() *kubernetes.Clientset {
	//拿到config
	cfgFlags = genericclioptions.NewConfigFlags(true)
	config, err := cfgFlags.ToRawKubeConfigLoader().ClientConfig()
	if err != nil {
		log.Fatalln(err)
	}
	//获取clientset
	c, err := kubernetes.NewForConfig(config)
	if err != nil {
		log.Fatalln(err)
	}
	return c
}

//执行cmd 核心是rune
func RunCmd(f func(c *cobra.Command, args []string) error) {
	cmd := &cobra.Command{
		Use:          "kubectl pods [flags]",
		Short:        "list pods ",
		Example:      "kubectl pods [flags]",
		SilenceUsage: true,
		RunE:         f,
	}
	//AddFlags 将客户端配置标志绑定到给定的标志集
	cfgFlags.AddFlags(cmd.Flags())

	err := cmd.Execute()
	if err != nil {
		log.Fatalln(err)
	}
}

func main() {
	RunCmd(run)
}


go build main.go
mv main /Users/qushuaibo/temp/kubectl-plugins/kubectl-pods
kubectl pods 

在这里插入图片描述

二 给pod添加标签选项

package main

import (
	"context"
	"fmt"
	"github.com/olekukonko/tablewriter"
	"github.com/spf13/cobra"
	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/cli-runtime/pkg/genericclioptions"
	"k8s.io/client-go/kubernetes"
	"log"
	"os"
)

var (
	ShowLabels bool
	client = InitClient() //这是 clientset
)

func InitClient() *kubernetes.Clientset{
	cfgFlags =genericclioptions.NewConfigFlags(true)
	config,err:= cfgFlags.ToRawKubeConfigLoader().ClientConfig()
	if err!=nil{log.Fatalln(err)}
	c,err:=kubernetes.NewForConfig(config)
	if err!=nil{log.Fatalln(err)}
	return c
}

func InitHeader(table *tablewriter.Table) []string  {
	commonHeaders:=[]string{"名称", "命名空间", "IP","状态"}
	if  ShowLabels{
		commonHeaders=append(commonHeaders,"标签")
	}
	return commonHeaders
}


func Map2String(m map[string]string) (ret string )  {
	for k,v:=range m{
		ret+=fmt.Sprintf("%s=%s\n",k,v)
	}
	return
}

func run(c *cobra.Command, args []string) error {
	ns, err := c.Flags().GetString("namespace")
	if err != nil {
		return err
	}
	if ns == "" {
		ns = "default"
	}
	list, err := client.CoreV1().Pods(ns).List(context.Background(), v1.ListOptions{})
	if err != nil {
		return err
	}
	table := tablewriter.NewWriter(os.Stdout)
	//设置头
	table.SetHeader(InitHeader(table))
	for _, pod := range list.Items {
		podRow := []string{pod.Name, pod.Namespace, pod.Status.PodIP,
			string(pod.Status.Phase)}
		if ShowLabels {
			podRow = append(podRow, Map2String(pod.Labels))
		}
		table.Append(podRow)
	}
	table.SetAutoWrapText(false)
	table.SetAutoFormatHeaders(true)
	table.SetHeaderAlignment(tablewriter.ALIGN_LEFT)
	table.SetAlignment(tablewriter.ALIGN_LEFT)
	table.SetCenterSeparator("")
	table.SetColumnSeparator("")
	table.SetRowSeparator("")
	table.SetHeaderLine(false)
	table.SetBorder(false)
	table.SetTablePadding("\t") // pad with tabs
	table.SetNoWhiteSpace(true)
	table.Render()
	return nil

}

func RunCmd(f func(c *cobra.Command, args []string) error ) {
	cmd := &cobra.Command{
		Use:          "kubectl pods [flags]",
		Short:        "list pods ",
		Example:      "kubectl pods [flags]",
		SilenceUsage: true,
		RunE:         f,
	}

	cfgFlags.AddFlags(cmd.Flags())

	cmd.Flags().BoolVar(&ShowLabels,"show-labels",false,"kubectl pods --show-lables")

	err:=cmd.Execute()
	if err!=nil{
		log.Fatalln(err)
	}

}




func main() {
	RunCmd(run)
}

在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 18:00:11  更:2022-03-12 18:02:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:24:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码