Kubernetes
随着 Kubernetes 的普及,其复杂性也在增加,强大的开源社区和云原生生态圈,围绕集群管理、开发、测试、安全等提供大量工具和服务。
重点介绍基于命令行的工具和插件,进行集群管理、可观察性、常规日常运维。
这些工具和插件必须:
- 开源
- 基于命令行
- 易于安装
- 为 Kubernetes 工作流程带来切实的好处
Kubectl krew 插件管理器
Krew 是 kubectl 命令行工具的插件管理器,可以使用 git/curl 安装在Win、Linux、MacOS上安装使用,具体Krew安装步骤
Krew 与 kubectl CLI 集成并提供了机制,来安装额外命令行工具作为插件。目前,已有174 个插件可用。
为了充分利用 krew 插件管理器,需要查看插件说明文档,知道哪些插件是有用的。
这是经常使用的插件列表,以供参考:
Krew 提供了一个用于发现和管理插件的一站式商店,使得添加新插件,来改进 Kubernetes 工作流程变得更加方便。Kubectx和Kubens
这实际上是两个独立的工具,但它们经常在一个工作流程中使用。
kubectx仓库
Kubens
安装:
这两个插件都是用 Go 编写的,并修改kubeconfig切换到新的上下文或命名空间。kubectl krew install ctx
kubectl krew install ns
为了获得最佳体验,请在交互模式下使用这两个插件。此模式需要安装 fzf并启用使用光标而不是复制、粘贴来选择上下文。
以下是配合使用示例:
这些工具的最大好处是不必输入命令。提高效率,必不可少!Kube-ps1仓库
这个插件与 kubectx 和 kubens 结合使用效果很好。一旦切换到不同的上下文/命名空间,怎么知道在哪里?kube-ps1可以做到这一点,此插件在 Windows 上不可用。
这个脚本允许将Kubernetes上下文和kubectl上配置的命名空间添加到Bash/Zsh提示字符串中。Kube-ps1 可以通过kubeoff
命令关闭、使用kubeon
开启。
使用 kube-ps1,可以避免混淆导致的错误,因为始终知道所处的上下文和命名空间。使用kail流式传输日志
流式传输所有日志或基于查询条件流式传输日志比较困难,Kali解决了这个问题。
安装:
Kail 可以根据不同的匹配条件流式传输 Pod 的日志,例如,Service选择的所有 Pod 或匹配任意标签的 Pod 集合。# mac
$ brew tap boz/repo
$ brew install boz/repo/kail
# linux
$ bash <( curl -sfL https://raw.githubusercontent.com/boz/kail/master/godownloader.sh) -b "$GOPATH/bin"
最好打开两个Tab,下面是示例:
使用 kail,根据您的要求,流式传输日志和查看实时日志容易得多。K9s
K9s 提供了一个终端UI来与Kubernetes集群交互。这个项目的目的是让您的应用程序更容易观察和管理。K9s不断地监视Kubernetes的变化,并提供后续命令来与观察到的资源交互。
K9s 可以运行在所有主流操作系统之上。它还支持其他更高级的功能,如端口转发、查看 Kubernetes 对象的 YAML 等等。
以下是涉及到上面提到的所有工具和插件的工作流程。在 Windows 10 上使用 WSL2(Windows Subsystem for Linux 2),使用键盘快捷键将终端窗口拆分为3个窗格。使用 kail 在右下窗格中显示创建的 nginx pod 的日志。一段时间后,使用 k9s 将本地端口 8080 转发到 nginx 容器端口 80,并使用左下面板中的 curl 与其交互,同时 kail 显示日志。
结论
通过仅使用 5 个插件和工具明显改进原生 Kubernetes 工作流程。可以在本地机器上轻松安装这些工具,也可以使用 Docker 将这些工具打包成镜像,随用随拉。
参考资料
Kubectl krew 插件管理器: https://krew.sigs.k8s.io/
Krew安装步骤: https://krew.sigs.k8s.io/docs/user-guide/quickstart/
174 个插件: https://krew.sigs.k8s.io/plugins/
插件说明文档: https://krew.sigs.k8s.io/plugins/
Kubectx和Kubens: https://github.com/ahmetb/kubectx
交互模式下: https://github.com/ahmetb/kubectx#interactive-mode
安装 fzf: https://github.com/junegunn/fzf
Kube-ps1仓库: https://github.com/jonmosco/kube-ps1
使用kail流式传输日志: https://github.com/boz/kail
K9s: https://github.com/derailed/k9s