Kubernetes 源码 (3) 万事开头难 Kubectl

Submitted by Lizhe on Thu, 07/02/2020 - 02:49

 

kubectl 命令应该是使用 k8s 的人接触最多的命令了,我们从它开始,

这里我使用的是 vscode , 在debug 配置文件中

 

{

    // Use IntelliSense to learn about possible attributes.

    // Hover to view descriptions of existing attributes.

    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387

    "version": "0.2.0",

    "configurations": [

        {

            "name": "Launch",

            "type": "go",

            "request": "launch",

            "mode": "auto",

            "program": "/home/lizhe/k8s/kubernetes/cmd/kubectl/kubectl.go",

            "env": {},

            "args": []

        }

    ]

}

 

20200702124312

20200702104436

 


 

rand.Seed(time.Now().UnixNano())

不加随机种子,每次遍历获取都是重复的一些随机数据

a := rand.Int()

使用 毫秒 时间作为种子之后,每次都是新生成的随机数,不过这里个人认为没有达到 雪花或者UUID那种程度的唯一

20200702014716

 

20200702013441

20200702014716

 

因为Kubectl.go 本身内容非常简单,主要使用的是pflag

有兴趣的话可以参考 https://www.cnblogs.com/sparkdev/p/10833186.html

pflag 包的主要特点

pflag 包与 flag 包的工作原理甚至是代码实现都是类似的,下面是 pflag 相对 flag 的一些优势:

  • 支持更加精细的参数类型:例如,flag 只支持 uint 和 uint64,而 pflag 额外支持 uint8、uint16、int32 等类型。
  • 支持更多参数类型:ip、ip mask、ip net、count、以及所有类型的 slice 类型。
  • 兼容标准 flag 库的 Flag 和 FlagSet:pflag 更像是对 flag 的扩展。
  • 原生支持更丰富的功能:支持 shorthand、deprecated、hidden 等高级功能。