注意 佩雷夫。:原始文章由VMware的架构师Josh Rosso撰写,他曾在CoreOS和Heptio等公司工作,并且是Kubernetes alb-ingress-controller的合著者。作者分享了一个小秘诀,即使在胜利的云原生时代,对于喜欢vim的“老派”运营工程师来说,这也可能非常有用。
在vim中为Kubernetes编写YAML清单?已经花费了无数小时试图弄清楚下一个字段在此规范中应该在哪里?或者,也许你会发现差异的快速提醒args
和command
?有个好消息!Vim易于绑定到 yaml-language-server获得自动完成,验证和其他便利。在本文中,我们将讨论如何为此配置语言服务器客户端。(原始文章还有一个录像带,作者在其中进行了交谈并演示了材料的内容。)语言服务器
语言服务器(语言服务器)讨论了用于编辑器和IDE的编程语言的可能性,它们使用特殊协议- 语言服务器协议(LSP)进行交互。这是一个很好的方法:它允许单个实现一次向多个编辑器/ IDE提供数据。我已经写过关于gopls(Golang的语言服务器)的信息,以及如何在vim中使用它。在Kubernetes的YAML中获得自动完成的步骤是相似的。
为了使vim以上述方式工作,您需要安装语言服务器客户端。我知道两种方法是LanguageClient-neovim和coc.vim。在本文中,我将考虑coc.vim
-这是当前最受欢迎的插件。您可以通过vim-plug安装它:" Use release branch (Recommend)
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Or build from source code by use yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}
要启动coc
(并因此启动yaml语言服务器),您需要安装以下已安装的node.js:curl -sL install-node.now.sh/lts | bash
当coc.vim
配置,安装服务器扩展coc-yaml
从VIM::CocInstall coc-yaml
最后,您很可能希望从作为示例coc-vim
介绍的配置开始。特别是,它激活组合键<Ctrl> +空格以调用自动完成功能。配置yaml语言服务器发现
要coc
使用yaml-language-server,您需要在编辑YAML文件时要求他从Kubernetes下载该方案。这是通过编辑完成的coc-config
::CocConfig
在配置中,您需要添加kubernetes
所有文件yaml
。我另外将语言服务器用于golang
,因此我的常规配置如下所示:{
"languageserver": {
"golang": {
"command": "gopls",
"rootPatterns": ["go.mod"],
"filetypes": ["go"]
}
},
"yaml.schemas": {
"kubernetes": "/*.yaml"
}
}
kubernetes
-一个保留字段,用于通知语言服务器需要使用此常量中定义的URL下载Kubernetes方案。yaml.schemas
可以通过支持其他方案进行扩展-有关更多详细信息,请参见相关文档。现在,您可以创建一个YAML文件并开始使用自动完成功能。按<Ctrl> +空格(或在vim中配置的另一个组合)应根据当前上下文显示可用的字段和文档:
<Ctrl> +空格在这里有效,因为我已对其进行了配置inoremap <silent><expr> <c-space> coc#refresh()
。如果尚未这样做,请参阅coc.nvim自述文件以获取示例配置。Kubernetes API版本选择
在撰写本文时,yaml-language-server附带了Kubernetes 1.14.0模式。我没有找到一种动态选择方案的方法,因此我打开了相应的GitHub问题。幸运的是,由于语言服务器是用打字稿编写的,因此手动更改版本非常容易。为此,只需找到文件server.ts
。要在您的计算机上找到它,只需使用vim打开YAML文件,然后使用查找进程yaml-language-server
。ps aux | grep -i yaml-language-server
joshrosso 2380 45.9 0.2 5586084 69324 ?? S 9:32PM 0:00.43 /usr/local/Cellar/node/13.5.0/bin/node /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js --node-ipc --node-ipc --clientProcessId=2379
joshrosso 2382 0.0 0.0 4399352 788 s001 S+ 9:32PM 0:00.00 grep -i yaml-language-server
进程2380与我们有关:在编辑YAML文件时使用vim是它。如您所见,该文件位于中/Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js
。编辑它,将值更改KUBERNETES_SCHEMA_URL
为例如1.17.0版就足够了:
exports.KUBERNETES_SCHEMA_URL = "https://raw.githubusercontent.com/instrumenta/kubernetes-json-schema/master/v1.17.0-standalone-strict/all.json";
根据所使用的版本,coc-yaml
变量在代码中的位置可能不同。另请注意,我将存储库从更改garethr
为instrumenta
。看来garethr
他转向那里的辅助电路。为了验证更改是否生效,请查看[在早期版本的Kubernetes中]是否出现了以前没有的字段。例如,对于K8s 1.14,电路中没有startupProbe:
摘要
希望这个机会让您满意,至少让我满意。快乐的YAML'ing!请务必检查这些存储库以更好地了解本文中提到的实用程序:译者的PS
还有vikube,vim-kubernetes和vimkubectl。另请参阅我们的博客: