Vim 為 Kubernetes 提供 YAML 支持

筆記。 翻譯。:原文由 Josh Rosso 撰寫,他是 VMware 的架構師,曾在 CoreOS 和 Heptio 等公司工作,也是 Kubernetes alb-ingress-controller 的合著者。 作者分享了一個小技巧,對於即使在雲端原生時代也更喜歡 vim 的「老派」維運工程師來說非常有用。

Vim 為 Kubernetes 提供 YAML 支持

在 vim 中為 Kubernetes 編寫 YAML 清單? 花了無數時間試圖弄清楚本規範中的下一個欄位應該在哪裡? 或者也許您會喜歡快速提醒差異 args и command? 有好消息! Vim 很容易連結到 yaml 語言伺服器以獲得自動完成、驗證和其他便利。 在本文中,我們將討論如何為此設定語言伺服器客戶端。

(原文還 有影片嗎,作者在其中講述並演示了材料的內容。)

語言伺服器

語言伺服器 (語言伺服器) 向編輯器和 IDE 談論程式語言的功能,它們使用特殊的協定相互互動 - 語言服務器協議 (LSP)。 這是一種很好的方法,因為它允許一個實作同時向許多編輯器/IDE 提供資料。 我已經 我寫的 關於 戈普爾斯 - Golang 語言伺服器 - 以及如何使用它 VIM。 在 Kubernetes 的 YAML 中取得自動完成功能的步驟類似。

Vim 為 Kubernetes 提供 YAML 支持

為了讓 vim 以上述方式運作,您需要安裝語言伺服器用戶端。 我知道的兩個方法是 語言客戶端-neovim и coc.vim。 在本文中我將考慮 coc.vim - 這是目前最受歡迎的插件。 您可以透過安裝它 vim插件:

" 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-language-server)將需要安裝 node.js:

curl -sL install-node.now.sh/lts | bash

何時 coc.vim 設定完畢,安裝伺服器擴展 coc-yaml 來自維姆:

:CocInstall coc-yaml

Vim 為 Kubernetes 提供 YAML 支持

最後,您很可能會想從配置開始 coc-vim, 呈現 舉個例子。 特別是,它激活了組合 +空格 呼叫自動完成功能。

設定 yaml 語言伺服器偵測

coc 可以使用 yaml-language-server,但在編輯 YAML 檔案時需要要求從 Kubernetes 載入 schema。 這是透過編輯完成的 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 檔案並開始使用自動完成功能。 緊迫 +空格 (或 vim 中配置的其他組合)應根據當前上下文顯示可用欄位和文件:

Vim 為 Kubernetes 提供 YAML 支持
在這裡工作+空格因為我配置了 inoremap <silent><expr> <c-space> coc#refresh()。 如果您還沒有這樣做,請參閱 coc.nvim 自述文件 取得範例配置。

選擇 Kubernetes API 版本

截至撰寫本文時,yaml-language-server 附帶 Kubernetes 1.14.0 模式。 我沒有找到動態選擇模式的方法,所以我打開 對應的 GitHub 問題。 幸運的是,由於語言伺服器是用 typescript 編寫的,因此手動更改版本非常容易。 為此,只需找到該文件 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:這是 vim 在編輯 YAML 檔案時所使用的進程。

如您所見,該文件位於 /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:

// old 1.14.0 schema
//exports.KUBERNETES_SCHEMA_URL = "https://raw.githubusercontent.com/garethr/kubernetes-json-schema/master/v1.14.0-standalone-strict/all.json";
// new 1.17.0 schema in instrumenta repo
exports.KUBERNETES_SCHEMA_URL = "https://raw.githubusercontent.com/instrumenta/kubernetes-json-schema/master/v1.17.0-standalone-strict/all.json";

取決於所使用的版本 coc-yaml 程式碼中變數的位置可能會有所不同。 另請注意,我將存儲庫從 garethrinstrumenta。 看起來 garethr 切換到那裡的支援電路。

若要檢查變更是否已生效,請查看是否出現先前 [在 Kubernetes 的早期版本中] 不存在的欄位。 例如,在 K8s 1.14 的圖中沒有 啟動探針:

Vim 為 Kubernetes 提供 YAML 支持

總結

我希望這個機會讓您和我一樣快樂。 YAML 快樂! 請務必檢查這些儲存庫,以更好地了解本文中提到的實用程式:

譯者PS

而且還有 維庫貝, vim-kubernetes и vimkubectl.

另請閱讀我們的博客:

來源: www.habr.com

添加評論