เป็นกลุ่มพร้อมการสนับสนุน YAML สำหรับ Kubernetes

บันทึก. แปล: บทความต้นฉบับเขียนโดย Josh Rosso สถาปนิกของ VMware ซึ่งเคยทำงานในบริษัทต่างๆ เช่น CoreOS และ Heptio และยังเป็นผู้เขียนร่วมของ Kubernetes alb-ingress-controller ผู้เขียนแบ่งปันสูตรอาหารเล็กๆ น้อยๆ ที่อาจมีประโยชน์มากสำหรับวิศวกรฝ่ายปฏิบัติการ "แบบเก่า" ที่ชื่นชอบ vim แม้ในยุคที่ชาวพื้นเมืองบนคลาวด์ได้รับชัยชนะก็ตาม

เป็นกลุ่มพร้อมการสนับสนุน YAML สำหรับ Kubernetes

การเขียน YAML ปรากฏสำหรับ Kubernetes เป็นกลุ่ม? ใช้เวลานับไม่ถ้วนในการพยายามคิดว่าฟิลด์ถัดไปควรอยู่ที่ไหนในข้อกำหนดนี้ หรือบางทีคุณอาจจะประทับใจกับการเตือนความจำอย่างรวดเร็วถึงความแตกต่าง args и command? มีข่าวดี! Vim เชื่อมโยงได้ง่าย yaml ภาษาเซิร์ฟเวอร์เพื่อรับการกรอกอัตโนมัติ การตรวจสอบความถูกต้อง และความสะดวกอื่นๆ ในบทความนี้เราจะพูดถึงวิธีการตั้งค่าไคลเอนต์เซิร์ฟเวอร์ภาษาสำหรับสิ่งนี้

(บทความต้นฉบับก็เช่นกัน มีวิดีโอไหมโดยที่ผู้เขียนพูดคุยและสาธิตเนื้อหาของเนื้อหา)

เซิร์ฟเวอร์ภาษา

เซิร์ฟเวอร์ภาษา (เซิร์ฟเวอร์ภาษา) พูดคุยเกี่ยวกับความสามารถของภาษาการเขียนโปรแกรมให้กับบรรณาธิการและ IDE ซึ่งพวกเขาโต้ตอบกันโดยใช้โปรโตคอลพิเศษ - โปรโตคอลเซิร์ฟเวอร์ภาษา (แอลเอสพี). นี่เป็นแนวทางที่ดีเพราะช่วยให้การใช้งานหนึ่งครั้งสามารถให้ข้อมูลแก่ผู้แก้ไข/IDE จำนวนมากได้ในคราวเดียว ผมมีอยู่แล้ว อ้าง เกี่ยวกับ โกปลส์ - เซิร์ฟเวอร์ภาษาสำหรับ Golang - และวิธีการใช้งาน เป็นกลุ่ม. ขั้นตอนในการรับการเติมข้อความอัตโนมัติใน YAML สำหรับ Kubernetes จะคล้ายกัน

เป็นกลุ่มพร้อมการสนับสนุน YAML สำหรับ Kubernetes

เพื่อให้ 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) จะต้องติดตั้ง node.js:

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

เมื่อ coc.vim กำหนดค่าแล้ว ให้ติดตั้งส่วนขยายเซิร์ฟเวอร์ coc-yaml จากกลุ่ม:

:CocInstall coc-yaml

เป็นกลุ่มพร้อมการสนับสนุน YAML สำหรับ Kubernetes

สุดท้ายนี้ คุณมักจะต้องการเริ่มต้นด้วยการกำหนดค่า coc-vim, นำเสนอ ตัวอย่างเช่น. โดยเฉพาะอย่างยิ่งจะเปิดใช้งานการรวมกัน +ช่องว่าง เพื่อเรียกการเติมข้อความอัตโนมัติ

การตั้งค่าการตรวจจับเซิร์ฟเวอร์ yaml-ภาษา

ที่ coc สามารถใช้ yaml-Language-server ได้ โดยจะต้องขอให้โหลดสคีมาจาก Kubernetes เมื่อแก้ไขไฟล์ YAML ทำได้โดยการแก้ไข coc-config:

:CocConfig

ในการกำหนดค่าคุณจะต้องเพิ่ม kubernetes สำหรับไฟล์ทั้งหมด yaml. ฉันยังใช้เซิร์ฟเวอร์ภาษาสำหรับ golangดังนั้นการกำหนดค่าทั่วไปของฉันจะเป็นดังนี้:

{
  "languageserver": {
      "golang": {
        "command": "gopls",
        "rootPatterns": ["go.mod"],
        "filetypes": ["go"]
      }
  },

  "yaml.schemas": {
      "kubernetes": "/*.yaml"
  }
}

kubernetes — ช่องสงวนที่บอกให้เซิร์ฟเวอร์ภาษาดาวน์โหลดสคีมา Kubernetes จาก URL ที่กำหนดไว้ ค่าคงที่นี้. yaml.schemas สามารถขยายเพื่อรองรับโครงร่างเพิ่มเติมได้ - ดูรายละเอียดเพิ่มเติมที่ เอกสารที่เกี่ยวข้อง.

ตอนนี้คุณสามารถสร้างไฟล์ YAML และเริ่มใช้การเติมข้อความอัตโนมัติได้ กำลังกด +ช่องว่าง (หรือชุดค่าผสมอื่นที่กำหนดค่าเป็นกลุ่ม) ควรแสดงฟิลด์และเอกสารที่มีอยู่ตามบริบทปัจจุบัน:

เป็นกลุ่มพร้อมการสนับสนุน YAML สำหรับ Kubernetes
ทำงานที่นี่ +space เพราะฉันกำหนดค่าไว้ inoremap <silent><expr> <c-space> coc#refresh(). หากคุณยังไม่ได้ทำสิ่งนี้ให้ดู coc.nvim README สำหรับตัวอย่างการกำหนดค่า

การเลือกเวอร์ชัน Kubernetes API

ในขณะที่เขียนบทความนี้ yaml-Language-server มาพร้อมกับ Kubernetes 1.14.0 schema ฉันไม่พบวิธีเลือกสคีมาแบบไดนามิก ดังนั้นฉันจึงเปิดขึ้นมา ปัญหา GitHub ที่เกี่ยวข้อง. โชคดีเนื่องจากเซิร์ฟเวอร์ภาษาเขียนด้วย typescript การเปลี่ยนเวอร์ชันด้วยตนเองจึงค่อนข้างง่าย เมื่อต้องการทำเช่นนี้ เพียงค้นหาไฟล์ server.ts.

หากต้องการตรวจจับมันบนเครื่องของคุณ เพียงเปิดไฟล์ YAML ด้วย vim แล้วค้นหากระบวนการด้วย 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 ตำแหน่งของตัวแปรในโค้ดอาจแตกต่างกันไป โปรดทราบว่าฉันเปลี่ยนที่เก็บจาก garethr บน instrumenta. ดูเหมือนว่า garethr เปลี่ยนไปใช้วงจรรองรับที่นั่น

หากต้องการตรวจสอบว่าการเปลี่ยนแปลงมีผลหรือไม่ ให้ดูว่ามีช่องที่ไม่มีมาก่อน [ใน Kubernetes เวอร์ชันก่อนหน้า] หรือไม่ ตัวอย่างเช่นในไดอะแกรมสำหรับ K8s 1.14 ไม่มี startupProbe:

เป็นกลุ่มพร้อมการสนับสนุน YAML สำหรับ Kubernetes

สรุป

ฉันหวังว่าโอกาสนี้จะทำให้คุณพอใจมากเท่ากับฉัน มีความสุข YAMLing! อย่าลืมตรวจสอบที่เก็บข้อมูลเหล่านี้เพื่อทำความเข้าใจโปรแกรมอรรถประโยชน์ที่กล่าวถึงในบทความให้ดียิ่งขึ้น:

ปล.จากผู้แปล

และก็ยังมี วีคิวบ์, กลุ่ม-kubernetes и วิมคูเบคเทิล.

อ่านเพิ่มเติมในบล็อกของเรา:

ที่มา: will.com

เพิ่มความคิดเห็น