k8s源码分析3-kubectl命令行设置7大命令分组

本节重点总结 :

  • 设置cmd工厂函数f,主要是封装了与kube-apiserver交互客户端
  • 用cmd工厂函数f创建7大分组命令 ,如下
  1. 基础初级命令 Basic Commands (Beginner):
  2. 基础中级命令 Basic Commands (Intermediate):
  3. 部署命令 Deploy Commands:
  4. 集群管理分组 Cluster Management Commands:
  5. 故障排查和调试 Troubleshooting and Debugging Commands:
  6. 高级命令 Advanced Commands:
  7. 设置命令 Settings Commands

架构图

kubectl_cmd_group.png

设置参数-替换方法

	flags := cmds.PersistentFlags()
	flags.SetNormalizeFunc(cliflag.WarnWordSepNormalizeFunc) // Warn for "_" flags

	// Normalize all flags that are coming from other packages or pre-configurations
	// a.k.a. change all "_" to "-". e.g. glog package
	flags.SetNormalizeFunc(cliflag.WordSepNormalizeFunc)

	addProfilingFlags(flags)

	flags.BoolVar(&warningsAsErrors, "warnings-as-errors", warningsAsErrors, "Treat warnings received from the server as errors and exit with a non-zero exit code")


设置kubeconfig相关的命令行

	kubeConfigFlags := genericclioptions.NewConfigFlags(true).WithDeprecatedPasswordFlag()
	kubeConfigFlags.AddFlags(flags)
	matchVersionKubeConfigFlags := cmdutil.NewMatchVersionFlags(kubeConfigFlags)
	matchVersionKubeConfigFlags.AddFlags(cmds.PersistentFlags())

设置cmd工厂函数f,主要是封装了与kube-apiserver交互客户端

  • 后面的子命令都使用这个f创建
	f := cmdutil.NewFactory(matchVersionKubeConfigFlags)

创建proxy子命令

	proxyCmd := proxy.NewCmdProxy(f, ioStreams)
	proxyCmd.PreRun = func(cmd *cobra.Command, args []string) {
		kubeConfigFlags.WrapConfigFn = nil
	}

创建7大分组命令

1. 基础初级命令 Basic Commands (Beginner):

  • 代码
		{
			Message: "Basic Commands (Beginner):",
			Commands: []*cobra.Command{
				create.NewCmdCreate(f, ioStreams),
				expose.NewCmdExposeService(f, ioStreams),
				run.NewCmdRun(f, ioStreams),
				set.NewCmdSet(f, ioStreams),
			},
		},
  • 对应的输出

Basic Commands (Beginner):
  create        Create a resource from a file or from stdin.
  expose        Take a replication controller, service, deployment or pod and expose it as a new Kubernetes Service
  run           Run a particular image on the cluster
  set           Set specific features on objects
  • 释义
    • create 代表创建资源
    • expose 将一种资源暴露成service
    • run 运行一个镜像
    • set 在对象上设置一些功能

2. 基础中级命令 Basic Commands (Intermediate):

	{
			Message: "Basic Commands (Intermediate):",
			Commands: []*cobra.Command{
				explain.NewCmdExplain("kubectl", f, ioStreams),
				get.NewCmdGet("kubectl", f, ioStreams),
				edit.NewCmdEdit(f, ioStreams),
				delete.NewCmdDelete(f, ioStreams),
			},
		},
  • 打印的help效果
Basic Commands (Intermediate):
  explain       Documentation of resources
  get           Display one or many resources
  edit          Edit a resource on the server
  delete        Delete resources by filenames, stdin, resources and names, or by resources and label selector
  • 释义
    • explain 获取资源的文档
    • get 展示资源
    • edit 编辑资源
    • delete 删除资源

3. 部署命令 Deploy Commands:

		{
			Message: "Deploy Commands:",
			Commands: []*cobra.Command{
				rollout.NewCmdRollout(f, ioStreams),
				scale.NewCmdScale(f, ioStreams),
				autoscale.NewCmdAutoscale(f, ioStreams),
			},
		},
  • 输出为
  rollout       Manage the rollout of a resource
  scale         Set a new size for a Deployment, ReplicaSet or Replication Controller
  autoscale     Auto-scale a Deployment, ReplicaSet, or ReplicationController

  • 释义
    • rollout 滚动更新
    • scale 扩缩容
    • autoscale 自动扩缩容

4. 集群管理分组 Cluster Management Commands:

		{
			Message: "Cluster Management Commands:",
			Commands: []*cobra.Command{
				certificates.NewCmdCertificate(f, ioStreams),
				clusterinfo.NewCmdClusterInfo(f, ioStreams),
				top.NewCmdTop(f, ioStreams),
				drain.NewCmdCordon(f, ioStreams),
				drain.NewCmdUncordon(f, ioStreams),
				drain.NewCmdDrain(f, ioStreams),
				taint.NewCmdTaint(f, ioStreams),
			},
		},
  • 输出

Cluster Management Commands:
  certificate   Modify certificate resources.
  cluster-info  Display cluster info
  top           Display Resource (CPU/Memory/Storage) usage.
  cordon        Mark node as unschedulable
  uncordon      Mark node as schedulable
  drain         Drain node in preparation for maintenance
  taint         Update the taints on one or more nodes

  • 释义
    • certificate 管理证书
    • cluster-info 展示集群信息
    • top 展示资源消耗top
    • cordon 将节点标记为不可用
    • uncordon 将节点标记为可用
    • drain 驱逐pod
    • taint 设置节点污点

5.故障排查和调试 Troubleshooting and Debugging Commands:

		{
			Message: "Troubleshooting and Debugging Commands:",
			Commands: []*cobra.Command{
				describe.NewCmdDescribe("kubectl", f, ioStreams),
				logs.NewCmdLogs(f, ioStreams),
				attach.NewCmdAttach(f, ioStreams),
				cmdexec.NewCmdExec(f, ioStreams),
				portforward.NewCmdPortForward(f, ioStreams),
				proxyCmd,
				cp.NewCmdCp(f, ioStreams),
				auth.NewCmdAuth(f, ioStreams),
				debug.NewCmdDebug(f, ioStreams),
			},
		},
  • 输出
Troubleshooting and Debugging Commands:
  describe      Show details of a specific resource or group of resources
  logs          Print the logs for a container in a pod
  attach        Attach to a running container
  exec          Execute a command in a container
  port-forward  Forward one or more local ports to a pod
  proxy         Run a proxy to the Kubernetes API server
  cp            Copy files and directories to and from containers.
  auth          Inspect authorization
  debug         Create debugging sessions for troubleshooting workloads and nodes
  • 释义
    • describe 展示资源详情
    • logs 打印pod中容器日志
    • attach 进入容器
    • exec 在容器中执行命令
    • port-forward 端口转发
    • proxy 运行代理
    • cp 拷贝文件
    • auth 检查鉴权
    • debug 打印debug

6. 高级命令 Advanced Commands:

  • 代码
		{
			Message: "Advanced Commands:",
			Commands: []*cobra.Command{
				diff.NewCmdDiff(f, ioStreams),
				apply.NewCmdApply("kubectl", f, ioStreams),
				patch.NewCmdPatch(f, ioStreams),
				replace.NewCmdReplace(f, ioStreams),
				wait.NewCmdWait(f, ioStreams),
				kustomize.NewCmdKustomize(ioStreams),
			},
		},
  • 输出


Advanced Commands:
  diff          Diff live version against would-be applied version
  apply         Apply a configuration to a resource by filename or stdin
  patch         Update field(s) of a resource
  replace       Replace a resource by filename or stdin
  wait          Experimental: Wait for a specific condition on one or many resources.
  kustomize     Build a kustomization target from a directory or a remote url.

  • 释义
    • diff 对比当前和应该运行的版本
    • apply 应用变更或配置
    • patch 更新资源的字段
    • replace 替换资源
    • wait 等待资源的特定状态
    • kustomize 从目录或远程 url 构建 kustomization 目标。

7. 设置命令 Settings Commands

  • 代码
		{
			Message: "Settings Commands:",
			Commands: []*cobra.Command{
				label.NewCmdLabel(f, ioStreams),
				annotate.NewCmdAnnotate("kubectl", f, ioStreams),
				completion.NewCmdCompletion(ioStreams.Out, ""),
			},
		},
  • 输出
Settings Commands:
  label         Update the labels on a resource
  annotate      Update the annotations on a resource
  completion    Output shell completion code for the specified shell (bash or zsh)

  • 释义
    • label 打标签
    • annotate 更新注释
    • completion 在shell上设置补全

本节重点总结 :

  • 设置cmd工厂函数f,主要是封装了与kube-apiserver交互客户端
  • 用cmd工厂函数f创建7大分组命令 ,如下
  1. 基础初级命令 Basic Commands (Beginner):
  2. 基础中级命令 Basic Commands (Intermediate):
  3. 部署命令 Deploy Commands:
  4. 集群管理分组 Cluster Management Commands:
  5. 故障排查和调试 Troubleshooting and Debugging Commands:
  6. 高级命令 Advanced Commands:
  7. 设置命令 Settings Commands
posted @ 2022-11-20 19:39  西门运维  阅读(147)  评论(0编辑  收藏  举报