SaltStack - คู่มือฉบับย่อ
ในบทนี้เราจะเรียนรู้พื้นฐานของ SaltStack ความสามารถในการดำเนินการระยะไกลของ SaltStack ช่วยให้ผู้ดูแลระบบสามารถเรียกใช้คำสั่งบนเครื่องต่างๆควบคู่ไปกับระบบกำหนดเป้าหมายที่ยืดหยุ่นได้ การจัดการคอนฟิกูเรชัน Salt สร้างโมเดลมาสเตอร์มินเนียนเพื่อนำส่วนประกอบโครงสร้างพื้นฐานอย่างรวดเร็วง่ายดายยืดหยุ่นและปลอดภัยให้สอดคล้องกับนโยบายที่กำหนด
SaltStack คืออะไร?
Salt เป็นกรอบการทำงานอัตโนมัติที่มีประสิทธิภาพมาก สถาปัตยกรรม Salt ขึ้นอยู่กับแนวคิดในการดำเนินการคำสั่งจากระยะไกล ระบบเครือข่ายทั้งหมดได้รับการออกแบบโดยคำนึงถึงลักษณะบางอย่างของการสั่งงานระยะไกล สิ่งนี้อาจง่ายพอ ๆ กับการถามไฟล์Remote Web Serverเพื่อแสดงเว็บเพจแบบคงที่หรือซับซ้อนเช่นเดียวกับการใช้เชลล์เซสชันเพื่อออกคำสั่งแบบโต้ตอบกับเซิร์ฟเวอร์ระยะไกล Salt เป็นตัวอย่างของการดำเนินการระยะไกลที่ซับซ้อนมากขึ้นประเภทหนึ่ง
Salt ถูกออกแบบมาเพื่อให้ผู้ใช้กำหนดเป้าหมายอย่างชัดเจนและออกคำสั่งไปยังเครื่องหลายเครื่องได้โดยตรง เกลือขึ้นอยู่กับความคิดของปรมาจารย์ซึ่งควบคุมอย่างน้อยหนึ่งอย่างMinions. โดยปกติคำสั่งจะออกจาก Master ไปยังกลุ่มเป้าหมายของ Minions ซึ่งจะดำเนินการตามภารกิจที่ระบุไว้ในคำสั่งแล้วส่งคืนข้อมูลที่เป็นผลลัพธ์กลับไปยัง Master การสื่อสารระหว่างเจ้านายและลูกน้องเกิดขึ้นในZeroMQ message bus.
โมดูล SaltStack สื่อสารกับระบบปฏิบัติการ minion ที่รองรับ Salt Masterทำงานบน Linux โดยค่าเริ่มต้น แต่ระบบปฏิบัติการใด ๆ ก็สามารถเป็นมินเนี่ยนได้และปัจจุบัน Windows, VMware vSphere และ BSD Unix ได้รับการสนับสนุนเป็นอย่างดี Salt Master และลูกน้องใช้กุญแจในการสื่อสาร เมื่อมินเนี่ยนเชื่อมต่อกับมาสเตอร์เป็นครั้งแรกมันจะเก็บคีย์ไว้ที่มาสเตอร์โดยอัตโนมัติ SaltStack ยังมีSalt SSHซึ่งให้การจัดการระบบ“ เอเจนต์น้อย”
ต้องการ SaltStack
SaltStack สร้างขึ้นเพื่อความเร็วและขนาด นี่คือเหตุผลที่ใช้ในการจัดการโครงสร้างพื้นฐานขนาดใหญ่ที่มีเซิร์ฟเวอร์นับหมื่นที่ LinkedIn, WikiMedia และ Google
ลองนึกภาพว่าคุณมีเซิร์ฟเวอร์หลายเครื่องและต้องการทำสิ่งต่างๆกับเซิร์ฟเวอร์เหล่านั้น คุณจะต้องลงชื่อเข้าใช้แต่ละคนและทำสิ่งเหล่านั้นทีละรายการในแต่ละรายการจากนั้นคุณอาจต้องการทำสิ่งที่ซับซ้อนเช่นการติดตั้งซอฟต์แวร์จากนั้นกำหนดค่าซอฟต์แวร์นั้นตามเกณฑ์เฉพาะบางอย่าง
สมมติว่าคุณมีเซิร์ฟเวอร์ 10 เครื่องหรืออาจถึง 100 เครื่อง ลองนึกภาพการเข้าสู่ระบบทีละเซิร์ฟเวอร์ทีละเครื่องการออกคำสั่งเดียวกันบนเครื่อง 100 เครื่องจากนั้นการแก้ไขไฟล์คอนฟิกูเรชันบนเครื่องทั้ง 100 เครื่องจะกลายเป็นงานที่น่าเบื่อมาก เพื่อเอาชนะปัญหาเหล่านั้นคุณต้องการอัปเดตเซิร์ฟเวอร์ทั้งหมดพร้อมกันเพียงพิมพ์คำสั่งเดียว SaltStack ให้คำตอบสำหรับปัญหาดังกล่าวทั้งหมด
คุณสมบัติของ SaltStack
SaltStack เป็นซอฟต์แวร์การจัดการการกำหนดค่าแบบโอเพนซอร์สและเครื่องมือเรียกใช้งานระยะไกล Salt เป็นเครื่องมือบรรทัดคำสั่ง ในขณะที่เขียนด้วย Python การจัดการการกำหนดค่า SaltStack เป็นภาษาที่เข้าใจง่ายและไม่ซับซ้อน แพลตฟอร์ม Salt ใช้รูปแบบการกดเพื่อดำเนินการคำสั่งผ่านโปรโตคอล SSH ระบบการกำหนดค่าเริ่มต้นคือYAML และ Jinja templates. เกลือเป็นหลักในการแข่งขันกับPuppet, Chef และ Ansible.
Salt มีคุณสมบัติมากมายเมื่อเทียบกับเครื่องมือคู่แข่งอื่น ๆ คุณลักษณะที่สำคัญบางประการเหล่านี้มีการระบุไว้ด้านล่าง
Fault tolerance- มินเนี่ยนเกลือสามารถเชื่อมต่อกับปรมาจารย์หลายคนพร้อมกันโดยกำหนดค่าพารามิเตอร์การกำหนดค่าหลักเป็นรายการ YAML ของปรมาจารย์ที่มีทั้งหมด ผู้เชี่ยวชาญทุกคนสามารถสั่งการไปยังโครงสร้างพื้นฐาน Salt
Flexible- แนวทางการจัดการทั้งหมดของ Salt มีความยืดหยุ่นมาก สามารถนำไปใช้ตามรูปแบบการจัดการระบบที่เป็นที่นิยมมากที่สุดเช่น Agent และ Server, Agent-only, Server-only หรือทั้งหมดข้างต้นในสภาพแวดล้อมเดียวกัน
Scalable Configuration Management - SaltStack ออกแบบมาเพื่อจัดการกับมินเนี่ยนหมื่นตัวต่อหนึ่งมาสเตอร์
Parallel Execution model - Salt สามารถเปิดใช้คำสั่งเพื่อเรียกใช้ระบบระยะไกลในลักษณะคู่ขนาน
Python API - Salt มีอินเทอร์เฟซการเขียนโปรแกรมที่เรียบง่ายและได้รับการออกแบบให้เป็นแบบแยกส่วนและขยายได้ง่ายเพื่อให้ง่ายต่อการขึ้นรูปเพื่อการใช้งานที่หลากหลาย
Easy to Setup - Salt นั้นง่ายต่อการติดตั้งและมีสถาปัตยกรรมการดำเนินการระยะไกลเดียวที่สามารถจัดการความต้องการที่หลากหลายของเซิร์ฟเวอร์จำนวนเท่าใดก็ได้
Language Agnostic - ไฟล์การกำหนดค่าสถานะเกลือเครื่องมือสร้างเทมเพลตหรือประเภทไฟล์รองรับภาษาทุกประเภท
ประโยชน์ของ SaltStack
ด้วยความเรียบง่ายเช่นเดียวกับระบบที่มีคุณสมบัติมากมาย Salt ให้ประโยชน์มากมายและสรุปได้ดังนี้ -
Robust - Salt เป็นกรอบการจัดการการกำหนดค่าที่ทรงพลังและมีประสิทธิภาพและทำงานได้กับระบบนับหมื่น
Authentication - Salt จัดการคู่คีย์ SSH แบบง่ายสำหรับการตรวจสอบสิทธิ์
Secure - Salt จัดการข้อมูลที่ปลอดภัยโดยใช้โปรโตคอลที่เข้ารหัส
Fast - Salt เป็นบัสสื่อสารที่รวดเร็วและมีน้ำหนักเบาเพื่อเป็นรากฐานสำหรับเครื่องมือสั่งการระยะไกล
Virtual Machine Automation - ความสามารถของ Salt Virt Cloud Controller ใช้สำหรับระบบอัตโนมัติ
Infrastructure as data, not code - Salt นำเสนอการปรับใช้ที่เรียบง่ายการจัดการการกำหนดค่าแบบจำลองและกรอบการดำเนินการคำสั่ง
ข้อมูลเบื้องต้นเกี่ยวกับ ZeroMQ
Salt ขึ้นอยู่กับไฟล์ ZeroMQไลบรารีและเป็นไลบรารีเครือข่ายแบบฝังได้ มีน้ำหนักเบาและไลบรารีการส่งข้อความที่รวดเร็ว การใช้งานขั้นพื้นฐานอยู่ในC/C++ และการนำไปใช้งานในหลายภาษารวมถึง Java และ .Net สามารถใช้ได้.
ZeroMQ คือการประมวลผลข้อความแบบเพียร์เพียร์ที่ไม่มีนายหน้า ZeroMQ ช่วยให้คุณออกแบบระบบสื่อสารที่ซับซ้อนได้อย่างง่ายดาย
ZeroMQ มาพร้อมกับห้ารูปแบบพื้นฐานดังต่อไปนี้ -
Synchronous Request/Response - ใช้สำหรับส่งคำขอและรับการตอบกลับในภายหลังสำหรับแต่ละรายการที่ส่งไป
Asynchronous Request/Response- ผู้ร้องขอเริ่มต้นการสนทนาโดยส่งข้อความร้องขอและรอข้อความตอบกลับ ผู้ให้บริการกำลังรอข้อความคำร้องที่เข้ามาและตอบกลับพร้อมกับข้อความตอบกลับ
Publish/Subscribe - ใช้สำหรับการกระจายข้อมูลจากกระบวนการเดียว (เช่นผู้เผยแพร่) ไปยังผู้รับหลายคน (เช่นสมาชิก)
Push/Pull - ใช้สำหรับการกระจายข้อมูลไปยังโหนดที่เชื่อมต่อ
Exclusive Pair - ใช้สำหรับเชื่อมเพื่อนสองคนเข้าด้วยกันเป็นคู่
ZeroMQ เป็นเครื่องมือเครือข่ายที่มีความยืดหยุ่นสูงสำหรับการแลกเปลี่ยนข้อความระหว่างคลัสเตอร์ระบบคลาวด์และสภาพแวดล้อมระบบอื่น ๆ ZeroMQ คือไฟล์default transport library นำเสนอใน SaltStack
สถาปัตยกรรมของ SaltStack ได้รับการออกแบบมาเพื่อทำงานร่วมกับเซิร์ฟเวอร์จำนวนเท่าใดก็ได้ตั้งแต่ระบบเครือข่ายท้องถิ่นไปจนถึงการปรับใช้อื่น ๆ ในศูนย์ข้อมูลต่างๆ สถาปัตยกรรมเป็นโมเดลเซิร์ฟเวอร์ / ไคลเอ็นต์แบบธรรมดาที่มีฟังก์ชันที่จำเป็นรวมอยู่ใน daemons ชุดเดียว
ดูภาพประกอบต่อไปนี้ แสดงส่วนประกอบต่างๆของสถาปัตยกรรม SaltStack
SaltMaster- SaltMaster เป็นภูตต้นแบบ SaltMaster ใช้เพื่อส่งคำสั่งและการกำหนดค่าไปยัง Salt slaves มาสเตอร์คนเดียวสามารถจัดการมาสเตอร์ได้หลายคน
SaltMinions- SaltMinion เป็นภูตทาส มินเนี่ยน Salt รับคำสั่งและการกำหนดค่าจาก SaltMaster
Execution- โมดูลและคำสั่ง Adhoc ดำเนินการจากบรรทัดคำสั่งกับมินเนี่ยนหนึ่งตัวขึ้นไป ทำการตรวจสอบตามเวลาจริง
Formulas- สูตรเป็น Salt States ที่เขียนไว้ล่วงหน้า พวกเขาเป็นแบบปลายเปิดเช่นเดียวกับ Salt States เองและสามารถใช้สำหรับงานต่างๆเช่นการติดตั้งแพ็คเกจการกำหนดค่าและเริ่มต้นบริการการตั้งค่าผู้ใช้หรือการอนุญาตและงานทั่วไปอื่น ๆ อีกมากมาย
Grains- Grains เป็นอินเทอร์เฟซที่ให้ข้อมูลเฉพาะสำหรับมินเนี่ยน ข้อมูลที่มีอยู่ผ่านอินเทอร์เฟซของเกรนเป็นแบบคงที่ ธัญพืชจะโหลดเมื่อมินเนี่ยนเกลือเริ่มทำงาน ซึ่งหมายความว่าข้อมูลในเมล็ดธัญพืชไม่เปลี่ยนแปลง ดังนั้นข้อมูลเกรนอาจเกี่ยวกับเคอร์เนลที่รันอยู่หรือระบบปฏิบัติการ ไม่คำนึงถึงขนาดตัวพิมพ์
Pillar- เสาหลักคืออินเทอร์เฟซที่สร้างและจัดเก็บข้อมูลที่มีความละเอียดอ่อนสูงเฉพาะสำหรับมินเนี่ยนโดยเฉพาะเช่นคีย์การเข้ารหัสและรหัสผ่าน จัดเก็บข้อมูลในคู่คีย์ / ค่าและข้อมูลจะได้รับการจัดการในลักษณะเดียวกับ Salt State Tree
Top File - จับคู่สถานะเกลือและข้อมูลเสาหลักกับมินเนี่ยน Salt
Runners - เป็นโมดูลที่อยู่ภายใน SaltMaster และทำหน้าที่ต่างๆเช่นสถานะงานสถานะการเชื่อมต่ออ่านข้อมูลจาก API ภายนอกค้นหามินเนี่ยนเกลือที่เชื่อมต่อและอื่น ๆ
Returners - ส่งคืนข้อมูลจากมิเนียนเกลือไปยังระบบอื่น
Reactor - มีหน้าที่กระตุ้นปฏิกิริยาเมื่อเกิดเหตุการณ์ในสภาพแวดล้อม SaltStack ของคุณ
SaltCloud - Salt Cloud มีอินเทอร์เฟซที่มีประสิทธิภาพในการโต้ตอบกับโฮสต์บนคลาวด์
SaltSSH - เรียกใช้คำสั่ง Salt ผ่าน SSH บนระบบโดยไม่ต้องใช้ Salt minion
ในบทถัดไปเราจะเรียนรู้รายละเอียดเกี่ยวกับคู่แข่งของ SaltStack และคุณสมบัติต่างๆ
Salt, Puppet, Chef และ Ansible เป็นเครื่องมือการจัดการการกำหนดค่าและการจัดเตรียมชั้นนำซึ่งแต่ละเครื่องมือใช้เส้นทางไปยังเซิร์ฟเวอร์อัตโนมัติ พวกเขาสร้างขึ้นเพื่อให้ง่ายต่อการกำหนดค่าและดูแลเซิร์ฟเวอร์นับสิบหลายร้อยหรือหลายพันเครื่อง
ให้เราเข้าใจว่า SaltStack แข่งขันกับ Puppet, Chef และ Ansible เป็นหลักอย่างไร
แพลตฟอร์มและการสนับสนุน
ต่อไปนี้เป็นรายชื่อแพลตฟอร์มทั้งหมดที่รองรับ SaltStack และคู่แข่ง
SaltStack - ซอฟต์แวร์ SaltStack ทำงานและจัดการ Linux, Windows, Mac OS X และ UNIX หลายเวอร์ชัน
Puppet - Red Hat Enterprise Linux, CentOS, Oracle Linux, Scientific Linux, SUSE Linux Enterprise Server และ Ubuntu
Chef - Chef ได้รับการสนับสนุนในหลายแพลตฟอร์มเช่น AIX, RHEL / CentOS, FreeBSD, OS X, Solaris, Microsoft Windows และ Ubuntu
Ansible - Fedora แจกจ่าย Linux, CentOS และ Scientific Linux ผ่านแพ็คเกจเสริมสำหรับ Enterprise Linux (EPEL) รวมถึงระบบปฏิบัติการอื่น ๆ
ภาษาต้นทาง
SaltStack - Python
Puppet - ทับทิม
Chef - Ruby และ CLI ใช้ DSL ที่ใช้ทับทิม
Ansible - Python
ภาษาที่รองรับ
SaltStack - ภาษาใดก็ได้
Puppet - ทับทิม
Chef - Ruby และ CLI ใช้ DSL ที่ใช้ทับทิม
Ansible - ภาษาใดก็ได้
UI ของเว็บ
SaltStack - Web UI มีมุมมองของงานที่กำลังทำงานสถานะมิเนียนและบันทึกเหตุการณ์
Puppet - Web UI จัดการการรายงานสินค้าคงคลังและการจัดการโหนดแบบเรียลไทม์
Chef - Web UI ช่วยให้คุณค้นหาและโหนดสินค้าคงคลังดูกิจกรรมของโหนดและกำหนดตำราอาหารบทบาทและโหนด
Ansible - Web UI ช่วยให้คุณกำหนดค่าผู้ใช้ทีมและสินค้าคงเหลือและใช้ Playbooks กับสินค้าคงเหลือ
เครื่องมือการจัดการ
SaltStack - SaltStack Enterprise อยู่ในตำแหน่งที่เป็นเครื่องมือหลักในการจัดการการจัดระบบคลาวด์และการดำเนินงานด้านไอทีตลอดจน DevOps.
Puppet- Puppet มีสองรสชาติ Puppet Enterprise และ Open Source Puppet นอกเหนือจากการนำเสนอฟังก์ชันของ Open Source Puppet แล้ว Puppet Enterprise ยังมีเครื่องมือ GUI, API และบรรทัดคำสั่งสำหรับการจัดการโหนด
Chef - CFEngine เป็นเครื่องมือจัดการการกำหนดค่า
Ansible - Ansible 1.3 เป็นเครื่องมือหลักในการจัดการ
ประสิทธิภาพ
SaltStack- เกลือออกแบบมาเพื่อประสิทธิภาพสูงและความยืดหยุ่น ระบบการสื่อสารของ Salt สร้างท่อข้อมูลถาวรระหว่าง Salt master และ minions โดยใช้ ZeroMQ
Puppet - ปลอดภัยและมีประสิทธิภาพสูงและไม่ต้องใช้ตัวแทน
Chef- การต่อสู้ที่ชัดเจนที่สุดสำหรับ Chef Server คือการค้นหา การค้นหาช้าและไม่ได้รับการร้องขอจากไคลเอนต์พร้อมกัน
Ansible - ปลอดภัยประสิทธิภาพสูงและไม่ต้องใช้ตัวแทน
ราคาและมูลค่า
SaltStack- รุ่นโอเพ่นซอร์สฟรี SaltStack Enterprise มีราคา 150 เหรียญต่อเครื่องต่อปี
Puppet- รุ่นโอเพ่นซอร์สฟรี Puppet Enterprise มีค่าใช้จ่าย $ 100 ต่อเครื่องต่อปี
Chef- รุ่นโอเพ่นซอร์สฟรี Enterprise Chef ฟรี 5 เครื่อง 120 เหรียญต่อเดือนสำหรับ 20 เครื่อง 300 เหรียญต่อเดือนสำหรับ 50 เครื่อง
Ansible- รุ่นโอเพ่นซอร์สฟรี ตอบฟรีสำหรับ 10 เครื่องจากนั้น $ 100 หรือ $ 250 ต่อเครื่องต่อปีขึ้นอยู่กับการสนับสนุนที่คุณต้องการ
การใช้งาน
SaltStack- SaltStack ถูกใช้โดย Cisco และ Rackspace สามารถทำงานร่วมกับแพลตฟอร์มบนคลาวด์ใดก็ได้
Puppet - หุ่นถูกใช้โดย Zynga, Twitter, New York Stock Exchange, PayPal, Disney, Google และอื่น ๆ
Chef - Chef สามารถทำงานร่วมกับแพลตฟอร์มบนคลาวด์เช่น Internap, Amazon EC2, Google Cloud Platform, OpenStack, Microsoft Azure และ Rackspace
Ansible - Ansible สามารถปรับใช้กับสภาพแวดล้อมการจำลองเสมือนสภาพแวดล้อมระบบคลาวด์รวมถึง Amazon Web Services, Cloud Stack, DigitalOcean และ Google Cloud Platform เป็นต้น
ก่อนย้ายไปติดตั้งคุณต้องมีข้อกำหนดดังต่อไปนี้ -
เซิร์ฟเวอร์ Linux (เซิร์ฟเวอร์ Ubuntu ล่าสุด)
sudo หรือ root access ไปยังเซิร์ฟเวอร์นี้
ติดตั้งโปรแกรมปรับปรุงทั้งหมดโดยใช้คำสั่งต่อไปนี้ -
sudo apt-get update
ติดตั้ง SaltMaster
ติดตั้ง SaltMaster จากที่เก็บด้วยคำสั่ง apt-get ต่อไปนี้
sudo apt-get install salt-master
ติดตั้ง Salt Minion
ติดตั้ง Salt minion จากที่เก็บด้วยคำสั่ง apt-get ต่อไปนี้
sudo apt-get install salt-minion
ติดตั้ง Salt syndic
ติดตั้ง Salt syndic จากที่เก็บด้วยคำสั่ง apt-get ต่อไปนี้
sudo apt-get install salt-syndic
การกำหนดค่าหลัก
การกำหนดค่าเกลือนั้นง่ายมาก การกำหนดค่าเริ่มต้นสำหรับต้นแบบจะใช้ได้กับการติดตั้งส่วนใหญ่ ไฟล์คอนฟิกูเรชันถูกติดตั้งในไดเร็กทอรี '/ etc / salt' และตั้งชื่อตามส่วนประกอบต่างๆเช่น - / etc / salt / master และ / etc / salt / minion
#interface: 0.0.0.0
interface: <local ip address>
หลังจากอัปเดตไฟล์กำหนดค่าให้รีสตาร์ท Salt master โดยใช้คำสั่งต่อไปนี้
sudo service salt-master restart
การกำหนดค่า Minion
การกำหนดค่า Salt Minion นั้นง่ายมาก โดยค่าเริ่มต้น Salt Minion จะพยายามเชื่อมต่อกับ DNS ชื่อ "salt"; หาก Minion สามารถแก้ไขชื่อนั้นได้อย่างถูกต้องก็ไม่จำเป็นต้องกำหนดค่าใด ๆ กำหนดคำสั่ง“ master” ใหม่ในไฟล์การกำหนดค่า minion ซึ่งโดยทั่วไปแล้ว/etc/salt/minionดังแสดงในโค้ดด้านล่าง -
#master: salt
master: <local ip address>
หลังจากอัปเดตไฟล์กำหนดค่าให้รีสตาร์ท Salt minion โดยใช้คำสั่งด้านล่าง
sudo service salt-minion restart
การจัดการที่สำคัญ
เกลือใช้ AES Encryptionสำหรับการสื่อสารทั้งหมดระหว่างปรมาจารย์และมินเนียน การสื่อสารระหว่าง Master และ Minion ได้รับการรับรองความถูกต้องผ่านคีย์ที่เชื่อถือได้และได้รับการยอมรับ
salt-key -L
มันจะผลิตสิ่งต่อไปนี้ output -
Accepted Keys:
Denied Keys:
Unaccepted Keys:
<local system name>
Rejected Keys:
ยอมรับคีย์ทั้งหมดโดยออกคำสั่งด้านล่าง
sudo salt-key -A
มันจะผลิตสิ่งต่อไปนี้ output -
The following keys are going to be accepted:
Unaccepted Keys:
<local system name>
Proceed? [n/Y] y
Key for minion bala-Inspiron-N4010 accepted.
ตอนนี้อีกครั้งออก salt key listing คำสั่ง
salt-key -L
มันจะผลิตสิ่งต่อไปนี้ output -
Accepted Keys:
<local system name>
Denied Keys:
Unaccepted Keys:
Rejected Keys:
การส่งคำสั่ง
การสื่อสารระหว่าง Master และ Minion ต้องได้รับการตรวจสอบโดยรันคำสั่ง test.ping
sudo salt '*' test.ping
มันจะผลิตสิ่งต่อไปนี้ output -
<local system name>
True
ในที่นี้ '*' หมายถึงมินเนี่ยนทั้งหมด เนื่องจากเรามีมินเนี่ยนเพียงตัวเดียว - test.ping จึงเรียกใช้งานไฟล์ping คำสั่งและส่งกลับว่า ping สำเร็จหรือไม่
ในบทนี้เราจะสร้างสภาพแวดล้อม SaltStack อย่างง่ายเกลือหนึ่งนายและมินเนี่ยนเกลือสองตัว สภาพแวดล้อมนี้จะช่วยให้เราเรียนรู้แนวคิดเรื่องเกลือในบทต่อ ๆ ไป
ให้เราปฏิบัติตามขั้นตอนต่อไปนี้เพื่อสร้างสภาพแวดล้อม SaltStack
ติดตั้ง VirtualBox Environment
VirtualBox เป็นแอปพลิเคชันการจำลองเสมือนข้ามแพลตฟอร์ม VirtualBox ช่วยให้คุณสามารถเรียกใช้ระบบปฏิบัติการได้มากกว่าหนึ่งระบบในแต่ละครั้ง VirtualBox ทำงานบน Windows, Linux, Macintosh และ Solaris เป็นเจ้าภาพและรองรับไฟล์Guest Operating Systems.
คุณสามารถดาวน์โหลดและติดตั้ง VirtualBox ได้โดยไปที่ลิงค์ต่อไปนี้ - https://www.virtualbox.org/wiki/Downloads
เราจะสร้างเครื่องเสมือนสามเครื่องและเรียกใช้โดยใช้ VirtualBox
ติดตั้ง Vagrant
Vagrant มอบสภาพแวดล้อมการทำงานที่ง่ายต่อการกำหนดค่าทำซ้ำและพกพาได้
คุณสามารถดาวน์โหลดและติดตั้ง Vagrant ได้โดยไปที่ลิงค์ต่อไปนี้ - https://www.vagrantup.com
หลังจากติดตั้ง Vagrant สำเร็จคุณต้องกำหนดค่า สร้างไฟล์เดียวชื่อเป็นVagrantfile ในโฟลเดอร์และอธิบายประเภทของเครื่องและคุณสมบัติ
Run Vagrant - ในการเรียกใช้ Vagrant ให้ออกคำสั่งต่อไปนี้ -
vagrant up
หลังจากที่คุณเรียกใช้คนเร่ร่อน Vagrant จะสร้างและสตาร์ทเครื่องเหล่านั้นซึ่งกำหนดไว้ในไฟล์ Vagrantfileโดยใช้ VirtualBox ในพื้นหลัง เครื่องเหล่านี้จะทำงานจนกว่าคุณจะปิด
Stop Vagrant - หากต้องการหยุดการทำงานของเครื่องทั้งหมดใน VirtualBox ให้พิมพ์คำสั่งต่อไปนี้ -
vagrant halt
ดาวน์โหลด Demo Environment
SaltStack จัดเตรียมสภาพแวดล้อมการสาธิตที่เรียบง่ายเช่นการตั้งค่า Vagrant และโฮสต์อยู่ในไฟล์ github. ให้เราดาวน์โหลดการตั้งค่าโดยใช้คำสั่งต่อไปนี้ -
cd /cd/to/path
git clone https://github.com/UtahDave/salt-vagrant-demo
เริ่มสภาพแวดล้อม
ตอนนี้เริ่มสภาพแวดล้อมการสาธิตโดยใช้คำสั่งต่อไปนี้ -
cd /cd/to/path/salt-vagrant-demo
vagrant up
หลังจากคำสั่งนี้คุณจะเห็นคำตอบต่อไปนี้ -
result
ตอนนี้เซิร์ฟเวอร์สามเครื่องกำลังทำงานหนึ่งเครื่องมีการกำหนดค่าหลักเกลือและอีกสองเครื่องที่กำหนดค่ามิเนียนเกลือ
เรียกใช้ Salt master
เข้าสู่ระบบ Salt master โดยใช้คำสั่งต่อไปนี้ -
vagrant ssh master
ตอนนี้ย้ายไปยังผู้ใช้รูทโดยใช้คำสั่งด้านล่าง -
sudo su
ตอนนี้เราเชื่อมต่อกับ Salt master เรียบร้อยแล้ว
ตอนนี้ให้เราดูคำสั่งพื้นฐานบางอย่างใน SaltStack
แสดงรายการคีย์ทั้งหมด
คำสั่งต่อไปนี้คือตรวจสอบการเชื่อมต่อ Salt minion และดูว่าการเชื่อมต่อได้รับการยอมรับปฏิเสธหรือรอดำเนินการ
salt-key —list-all
มันจะผลิตสิ่งต่อไปนี้ output -
Accepted Keys:
minion1
minion2
Denied Keys:
Unaccepted Keys:
Rejected Keys:
ตรวจสอบ Salt Minions
ตอนนี้เรายอมรับคีย์ทั้งหมดแล้วคุณสามารถส่งคำสั่งจาก Salt master เพื่อตรวจสอบว่ามินเนี่ยนของ Salt กำลังฟังอยู่หรือไม่
salt '*' test.ping
มันจะผลิตสิ่งต่อไปนี้ output -
minion1:
True
minion2:
True
จากผลลัพธ์ข้างต้นให้ระบุมินเนี่ยน 1 และมินเนี่ยน 2 ซึ่งหมายความว่ามินเนี่ยนกำลังฟังอย่างถูกต้องมิฉะนั้นมินเนี่ยนอาจตอบสนองอย่างถูกต้อง
ระบบควบคุมการเข้าถึงมีตัวเลือกสำหรับผู้ใช้สำหรับกลุ่มในการดำเนินงานด้วยสิทธิ์ ระบบควบคุมการเข้าถึง Salt ใช้เพื่อกำหนดค่าการเข้าถึงอินเทอร์เฟซการควบคุมที่ไม่ใช่ผู้ดูแลระบบ คุณสามารถใช้กระบวนการนี้กับระบบทั้งหมด การควบคุมนี้ช่วยให้ผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบสามารถดำเนินการคำสั่ง Salt
อินเทอร์เฟซ Salt มีสามประเภทต่อไปนี้ -
- ระบบ ACL ของผู้เผยแพร่
- ระบบรับรองความถูกต้องภายนอก
- ระบบเพียร์
ให้เราเข้าใจรายละเอียดผ่านอินเทอร์เฟซเหล่านี้แต่ละรายการ
ระบบ ACL ของผู้เผยแพร่
ระบบ ACL ของผู้เผยแพร่อนุญาตให้เข้าถึงผู้ใช้อื่นที่ไม่ใช่รูทเพื่อดำเนินการคำสั่ง Salt กับมินเนี่ยนจากมาสเตอร์ ระบบ ACL ของผู้เผยแพร่ถูกกำหนดค่าในไฟล์คอนฟิกูเรชันหลักผ่านไฟล์publisher_aclตัวเลือกการกำหนดค่า มีกำหนดดังนี้ -
publisher_acl:
user1:
- .*
user2:
- web*:
- test.*
- pkg.*
ที่นี่
user1 ได้รับอนุญาตให้ดำเนินการอะไรก็ได้
user2 ได้รับอนุญาตให้ใช้ test และ pkgแต่ในมินเนี่ยน“ เว็บ *” เท่านั้น
ระบบรับรองความถูกต้องภายนอก
external auth system ใช้เพื่อให้เข้าถึงเพื่อดำเนินการคำสั่ง salt กับมินเนี่ยนเฉพาะผ่านระบบการอนุญาตภายนอกเช่น PAM, LDAPฯลฯ ไฟล์คอนฟิกูเรชันนี้ถูกกำหนดไว้ในไฟล์หลักตามที่อธิบายไว้ด้านล่าง
external_auth:
pam:
user1:
- 'web*':
- test.*
- network.*
user2:
- .*
ที่นี่
user1 ได้รับอนุญาตให้เรียกใช้ฟังก์ชันในไฟล์ test และ network modules เกี่ยวกับมินเนี่ยนที่ตรงกับ web* เป้าหมาย
user2 ได้รับอนุญาตให้เรียกใช้ฟังก์ชันทั้งหมด
เปิดใช้งานระบบรับรองความถูกต้องภายนอกในคำสั่ง
Salt Server มีตัวเลือก "–a" เพื่อเปิดใช้งานการตรวจสอบสิทธิ์ภายนอก
salt -a pam web\* test.ping
ที่นี่ -a pamใช้เพื่อเปิดใช้งานการตรวจสอบสิทธิ์ภายนอกของ PAM Salt Server จะขอรายละเอียดการพิสูจน์ตัวตนเมื่อใดก็ตามที่เราดำเนินการคำสั่ง ในการ จำกัด ไม่ให้ Salt Server ถามรายละเอียดการพิสูจน์ตัวตนในครั้งแรกเท่านั้นเราสามารถใช้ตัวเลือก T นี้-T option เก็บรายละเอียดการรับรองความถูกต้องสำหรับ 12 ชั่วโมงถัดไป (การตั้งค่าเริ่มต้น) และใช้เพื่อพิสูจน์ตัวตนผู้ใช้
salt -T -a pam web\* test.ping
ระบบเพียร์
มินเนี่ยนเกลือสามารถส่งคำสั่งโดยใช้ส่วนต่อประสานเพียร์ อินเตอร์เฟสเพียร์ถูกกำหนดค่าผ่านไฟล์คอนฟิกูเรชันหลักเพื่ออนุญาตให้มินเนี่ยนส่งคำสั่งจากต้นแบบโดยใช้peer ส่วนการกำหนดค่าหรือเพื่อให้มินเนี่ยนดำเนินการรันรันเนอร์จากมาสเตอร์โดยใช้ peer_run การกำหนดค่า
ให้เราเข้าใจการกำหนดค่าทั้งสองนี้โดยละเอียด
การกำหนดค่า Peer
การกำหนดค่าอย่างง่ายที่จะกำหนดในไฟล์หลักมีดังต่อไปนี้ -
peer:
.*:
- .*
ที่นี่ช่วยให้สามารถสื่อสารกับมินเนี่ยนทั้งหมดได้ แต่ขอแนะนำสำหรับสภาพแวดล้อมที่ปลอดภัยมากเท่านั้น
ในการกำหนดมินเนี่ยนให้กับ ID เฉพาะจำเป็นต้องกำหนดคอนฟิกตามที่แสดงด้านล่าง: เพียร์ -
.*domain.com:
- test.*
การกำหนดค่า peer_run
คอนฟิกูเรชันนี้อนุญาตให้มินเนี่ยนดำเนินการรันจากมาสเตอร์โดยใช้อ็อพชัน peer_run บนไฟล์มาสเตอร์ ตัวอย่างต่อไปนี้คือการอนุญาตให้เข้าถึงมินเนี่ยนทั้งหมดและนักวิ่งทุกคน
peer_run:
.*:
- .*
ในการกำหนดมินเนี่ยนให้กับ ID เฉพาะจำเป็นต้องกำหนดคอนฟิกตามที่ระบุด้านล่าง -
peer_run:
.*domain.com:
- test.*
วิธีดำเนินการคำสั่ง
เพื่อดำเนินการ test.ping กับมินเนี่ยนทั้งหมดให้ใช้ไฟล์ salt-call พร้อมกับคำสั่ง publish.publish โมดูล.
salt-call publish.publish \* test.ping
เพื่อดำเนินการ runnerใช้คำสั่ง salt-call พร้อมกับ publish.runner โมดูล.
salt-call publish.runner manage.up
Salt มีความสามารถในการสื่อสารความเร็วสูงกับระบบจำนวนมาก แนวทางนี้ช่วยให้ Salt สร้างระบบมัลติทาสก์ที่มีประสิทธิภาพ Salt สามารถเรียกใช้งานได้มากกว่าหนึ่งระบบดังนั้น Salt จึงใช้เทคนิคการจัดการงานเพื่อจัดการงานแต่ละงานที่ทำงานบนระบบทั้งหมด บทนี้จะอธิบายเกี่ยวกับการจัดการงานโดยละเอียด
Job ID คืออะไร?
Salt มีไดเรกทอรีแคช cachedir. ภายในนี้ไดเร็กทอรีที่มินเนี่ยนดูแลอยู่เรียกว่าไฟล์procไดเรกทอรี จะอยู่ในไดเร็กทอรี / var / cache / salt / proc ต่อไปนี้
ไดเร็กทอรี proc ใช้เพื่อดูแลไฟล์ทั้งหมด เมื่อเรียกใช้ไฟล์เหล่านี้ไฟล์เหล่านี้จะถูกกำหนดด้วย ID งานที่ไม่ซ้ำกัน รหัสงานนี้ช่วยระบุงานที่กำลังทำงานอยู่ในมินเนี่ยนและช่วยให้สามารถค้นหางานได้
โมดูล SALTUTIL
Salt แนะนำโมดูลใหม่ที่เรียกว่าเป็นกระบวนการจัดการงานของ Saltutil โมดูลนี้ประกอบด้วยฟังก์ชันต่างๆในการจัดการงาน ฟังก์ชันเหล่านี้ใช้เพื่อจัดการงานในระดับมินเนี่ยน ฟังก์ชั่นอธิบายโดยสังเขปดังนี้ -
running - ส่งคืนข้อมูลงานที่กำลังทำงานอยู่ทั้งหมดที่พบในไดเร็กทอรี proc
find_job - ส่งคืนข้อมูลเฉพาะเกี่ยวกับงานบางอย่างตามรหัสงาน
signal_job - อนุญาตให้ส่งสัญญาณ id งานที่กำหนด (jid)
term_job - ส่งสัญญาณการยกเลิกสำหรับงานที่ระบุ
kill_job - ส่งสัญญาณฆ่าสำหรับงานที่ระบุ
นักวิ่งงาน
นักวิ่งงานมีฟังก์ชั่นเพื่อให้การดูข้อมูลง่ายขึ้นและสะอาดขึ้น มันมีหน้าที่แตกต่างกัน ให้เราพิจารณารายละเอียดของฟังก์ชันเหล่านี้แต่ละอย่าง
ฟังก์ชัน ACTIVE
ฟังก์ชัน Active ใช้เพื่อระบุงานที่ยังทำงานอยู่และตรวจสอบว่าระบบใดทำงานเสร็จแล้วและระบบใดที่ยังรออยู่ ดำเนินการโดยใช้คำสั่งต่อไปนี้
salt-run jobs.active
ฟังก์ชัน LOOKUP_JID
lookup_jid runner จะแสดงข้อมูลสำหรับงานที่กำลังหาอยู่ในปัจจุบัน งานเหล่านี้กำหนดค่าผ่านไฟล์keep_jobsตัวเลือกในการกำหนดค่าหลัก ดำเนินการโดยใช้คำสั่งต่อไปนี้
salt-run jobs.lookup_jid <job id number>
ฟังก์ชัน LIST_JOBS
ฟังก์ชัน List_jobs ใช้เพื่อแสดงรายการข้อมูลงานสำหรับงาน แสดงโดยคำสั่งต่อไปนี้ -
salt-run jobs.list_jobs
การจัดตารางงาน
ระบบกำหนดการจะแสดงการทำงานของฟังก์ชันการดำเนินการใด ๆ กับมินเนี่ยนหรือตัววิ่งบนมาสเตอร์
ดำเนินการโดยวิธีการต่อไปนี้ -
Schedule - ตัวเลือกกำหนดการทั้งในหลักหรือมินเนี่ยน config ไฟล์.
Minion pillar data - รีเฟรชข้อมูลเสามินเนี่ยนโดยใช้คำสั่ง saltutil.refresh_pillar
สถานะกำหนดการหรือโมดูลกำหนดการ
รัฐเกลือจะถูกประหารชีวิตในมินเนี่ยน คุณสามารถส่งผ่านอาร์กิวเมนต์ตำแหน่งและระบุYAML dict ของอาร์กิวเมนต์ที่ตั้งชื่อในไฟล์ config file ดังแสดงด้านล่าง
schedule:
job1:
function: saltstate.sls
seconds: 3600
args:
- httpd
kwargs:
test: True
ที่นี่ job1 จะเรียกใช้ฟังก์ชัน saltstate.sls ด้วยอาร์กิวเมนต์ที่ระบุ httpdทุกชั่วโมง test: True เป็นอาร์กิวเมนต์เพิ่มเติมสำหรับ httpd คำสั่งที่กำหนดไว้ใน saltstate.sls.
เซิร์ฟเวอร์ไฟล์ Salt เป็นเซิร์ฟเวอร์ ZeroMQ ที่ไม่มีสถานะ มันถูกสร้างขึ้นใน Salt master เซิร์ฟเวอร์ไฟล์ Salt ใช้สำหรับการกระจายไฟล์จากมาสเตอร์ไปยังมินเนี่ยน ประกอบด้วยโมดูลที่แตกต่างกัน ให้เราทำความเข้าใจเกี่ยวกับไฟล์เซิร์ฟเวอร์ salt การกำหนดค่าโมดูลที่เกี่ยวข้องกับไฟล์เซิร์ฟเวอร์ salt วิธีเข้าถึงไฟล์เซิร์ฟเวอร์ salt ใน python เป็นต้นในบทนี้
แบ็กเอนด์เซิร์ฟเวอร์ไฟล์
แบ็กเอนด์เซิร์ฟเวอร์ไฟล์อนุญาตให้เซิร์ฟเวอร์ไฟล์ Salt ทำหน้าที่เป็นอินเทอร์เฟซแบบโปร่งใสไปยังเซิร์ฟเวอร์ไฟล์อื่นเช่นระบบไฟล์ภายในระบบควบคุมเวอร์ชัน Git เป็นต้น
สามารถเปิดใช้งานแบ็กเอนด์เซิร์ฟเวอร์ไฟล์ Git ได้โดยใช้การกำหนดค่าต่อไปนี้ในไฟล์หลัก
fileserver_backend:
- git
ในการเปิดใช้งานระบบไฟล์แบ็กเอนด์หลายระบบเราสามารถใช้การกำหนดค่าต่อไปนี้
fileserver_backend:
- roots
- git
นอกจากนี้เรายังสามารถระบุตัวเลือกเพิ่มเติมสำหรับเซิร์ฟเวอร์แบ็กเอนด์อื่นโดยใช้ส่วนเฉพาะของเซิร์ฟเวอร์แบ็กเอนด์ที่เกี่ยวข้อง
ระบบไฟล์ในเครื่อง
สำหรับการใช้ระบบนี้เราจะต้องใช้รหัสต่อไปนี้
file_roots:
base:
- /srv/salt/prod
ระบบไฟล์ Git
สำหรับการใช้ระบบนี้เราจะต้องใช้รหัสต่อไปนี้
gitfs_remotes:
- https://github.com/sample/sample1.git
การร้องขอไฟล์
Salt มีตัวเลือกในการร้องขอไฟล์สำหรับสภาพแวดล้อมเฉพาะ
salt://path/to/file?saltenv = base
ที่นี่สภาพแวดล้อมถูกกำหนดโดยใช้ตัวเลือกราก
การกำหนดค่าเซิร์ฟเวอร์ไฟล์
ไฟล์ Salt สามารถถูกจัดสรรภายในไดเรกทอรีรากจำนวนมากและเข้าถึงได้โดยระบุทั้งเส้นทางไฟล์และสภาพแวดล้อมที่ต้องการค้นหา สภาพแวดล้อมแต่ละรายการสามารถขยายข้ามไดเร็กทอรีรูทหลาย ๆ
สิ่งแวดล้อม
สภาพแวดล้อมเริ่มต้นคือฐาน สภาพแวดล้อมนี้ถูกกำหนดและใช้เพื่อดาวน์โหลดไฟล์เมื่อไม่มีการระบุสภาพแวดล้อมอื่น
file_roots:
base:
- /srv/salt/base
คุณยังสามารถใช้หลายสภาพแวดล้อมดังแสดงในโค้ดด้านล่าง
file_roots:
base:
- /srv/salt/base
dev:
- /srv/salt/dev
- /srv/salt/base
โมดูล CP
โมดูล CP เป็นโมดูลหลักในการจัดการไฟล์ Salt file server. salt-cp นอกจากนี้ยังสามารถใช้คำสั่งเพื่อแจกจ่ายไฟล์ที่นำเสนอโดยเซิร์ฟเวอร์ไฟล์ Salt
GET_FILE
cp.get_fileสามารถใช้ฟังก์ชันบน minion เพื่อดาวน์โหลดไฟล์จากต้นแบบได้ ถูกกำหนดตามที่แสดงในบล็อกรหัสต่อไปนี้
salt '*' cp.get_file salt://vimrc /etc/vimrc
คำสั่งดังกล่าวสั่งให้มินเนี่ยน Salt ทั้งหมดดาวน์โหลดไฟล์ vimrc ไฟล์และคัดลอกไปที่ /etc/vimrc.
เปิดใช้งานเทมเพลต
คุณสามารถเปิดใช้งานตัวเลือกเทมเพลตใน get_file ดังนี้ -
salt '*' cp.get_file "salt://vimrc" /etc/vimrc template = jinja
ใช้การบีบอัด
หากต้องการใช้การบีบอัดให้ใช้ไฟล์ gzipชื่ออาร์กิวเมนต์ ค่าที่ถูกต้องคือจำนวนเต็มตั้งแต่ 1 ถึง 9 โดยที่ 1 คือการบีบอัดขั้นต่ำและ 9 คือค่าสูงสุด
คำสั่งถูกกำหนดดังนี้ -
salt '*' cp.get_file salt://vimrc /etc/vimrc gzip = 5
GET_DIR
cp.get_dirสามารถใช้ฟังก์ชันบน minion เพื่อดาวน์โหลดไดเร็กทอรีทั้งหมดจากต้นแบบ ถูกกำหนดไว้ในบล็อกรหัสต่อไปนี้
salt '*' cp.get_dir salt://etc/mysql /etc
cp.get_dirรองรับการแสดงผลเทมเพลตและอาร์กิวเมนต์การบีบอัด gzip หากต้องการคุณสามารถกำหนดได้เช่นกัน
โมดูล FILECLIENT
Salt จัดเตรียมโมดูล python ที่ช่วยในการเข้าถึงเซิร์ฟเวอร์ไฟล์เกลือ salt/fileclient.py โมดูลใช้เพื่อตั้งค่าการสื่อสารจากมินเนี่ยนไปยังมาสเตอร์
โค้ดตัวอย่างในการรับไฟล์มีดังนี้ -
import salt.minion
import salt.fileclient
def get_file(path, dest, saltenv = ‘base'):
client = salt.fileclient.get_file_client(__opts__)
return client.get_file(path, dest, true, saltenv)
ที่นี่
ตัวเลือกจะพร้อมใช้งานเมื่อโมดูลทำงานในสภาวะเกลือ มิฉะนั้นเราควรระบุเส้นทางการกำหนดค่า -/etc/salt/minion.
path อ้างถึงเส้นทางของไฟล์ต้นฉบับในเซิร์ฟเวอร์ไฟล์เกลือ
dest หมายถึงเส้นทางปลายทางของไฟล์
saltenv หมายถึงสิ่งแวดล้อม
ในบทต่อไปเราจะเข้าใจวิธีการใช้งาน Git เป็นไฟล์เซิร์ฟเวอร์
Gitเป็นระบบควบคุมเวอร์ชันแจกจ่ายแบบโอเพนซอร์ส สามารถใช้เพื่อติดตามการเปลี่ยนแปลงในไฟล์ใด ๆ Salt ส่งไฟล์จากที่เก็บ Git โดยใช้เซิร์ฟเวอร์ไฟล์ Git คุณสามารถกำหนดค่า Git เป็นไฟล์fileserver_backend รายการตัวเลือกและหากคุณต้องการกำหนดค่าที่เก็บตั้งแต่หนึ่งรายการขึ้นไปคุณสามารถทำได้โดยใช้ gitfs_remotes ตัวเลือก
บทนี้อธิบายเกี่ยวกับวิธีการติดตั้งและกำหนดค่าเซิร์ฟเวอร์ไฟล์ Git ก่อนดำเนินการติดตั้งคุณต้องมีข้อกำหนดเบื้องต้นดังต่อไปนี้
ข้อกำหนดเบื้องต้นของ Salt Server สำหรับการใช้ Git
ข้อกำหนดขั้นต่ำสำหรับ Salt Server ในการใช้ Git เป็นไฟล์เซิร์ฟเวอร์มีดังนี้ -
- pygit2
- Dulwich
Pygit2 และ Dulwich ได้รับการกำหนดค่าโดยใช้ gitfs_providerพารามิเตอร์ในไฟล์ config หลัก ถ้าgitfs_provider ไม่ได้กำหนดค่าไว้ในไฟล์หลัก Salt จะชอบ pygit2 หากมีเวอร์ชันที่เหมาะสมตามด้วย GitPython และ Dulwich.
ติดตั้ง pygit2
คำสั่งต่อไปนี้ใช้เพื่อติดตั้ง pygit2 ในระบบที่ใช้ Fedora และ Ubuntu -
Fedora-based system
yum install python-pygit2
Ubuntu-based system
apt-get install python-pygit2
ที่นี่เวอร์ชันขั้นต่ำที่รองรับของ pygit2 คือ 0.20.3
ติดตั้ง GitPYTHON
GitPython สามารถติดตั้งบนต้นแบบได้อย่างง่ายดายโดยใช้ไฟล์ yum / apt command ดังแสดงด้านล่าง
Fedora-based system
yum install GitPython
Ubuntu-based system
apt-get install python-git
ติดตั้ง DULWICH
สามารถติดตั้ง Dulwich บนต้นแบบได้อย่างง่ายดายโดยใช้คำสั่ง yum
Fedora-based system
yum install python-dulwich
Ubuntu-based system
apt-get install python-dulwich
ตอนนี้เราได้ติดตั้งการอ้างอิงทั้งหมดสำหรับเซิร์ฟเวอร์ไฟล์ Git แล้ว ตอนนี้ให้เรากำหนดค่าเซิร์ฟเวอร์ไฟล์ Git นี้โดยใช้ไฟล์fileserver_backend ในส่วน master config ไฟล์.
การกำหนดค่าแบ็กเอนด์
ในการใช้ไฟล์เซิร์ฟเวอร์ Git คุณต้องเพิ่ม Git ในรายการ fileserver_backend ในไฟล์กำหนดค่าหลัก มีรายละเอียดดังนี้ -
fileserver_backend:
- git
ให้เราทำความเข้าใจเพิ่มเติมเกี่ยวกับวิธีกำหนดค่าเซิร์ฟเวอร์ไฟล์ Git ในการกำหนดค่าระยะไกล
gitfs_remotes Configuration
คุณสามารถระบุ URL อย่างใดอย่างหนึ่งหรือทั้งหมดเช่น git: //, https: //, file: // หรือ ssh: // สำหรับการกำหนดค่า gitfs_remotes ในไฟล์หลัก ใช้เพื่อค้นหาไฟล์ที่ร้องขอ
ข้อกำหนด URL https แบบง่ายถูกกำหนดไว้ด้านล่าง
gitfs_remotes:
- https://github.com
ssh การกำหนดค่าสามารถทำได้ดังภาพด้านล่าง
gitfs_remotes:
- [email protected]:user1/sample.git
- ssh://[email protected]/path/to/sample.git
ตอนนี้เราได้กำหนดค่าเซิร์ฟเวอร์ไฟล์ Git โดยใช้สองตัวเลือก fileserver_backend และ gitfs_remotes.
รีสตาร์ท Master
หลังจากทำการเปลี่ยนแปลงทั้งหมดในไฟล์หลักแล้วให้รีสตาร์ทต้นแบบเพื่อโหลดการกำหนดค่าทั้งหมดในเซิร์ฟเวอร์ไฟล์ Git
การกำหนดค่ารีโมทหลายรายการ
คำสั่งต่อไปนี้ใช้สำหรับการกำหนดค่าหลายรายการใน gitfs_remotes ในไฟล์หลัก
gitfs_remotes:
- git://github.com/sample/sample1.git
- https://github.com/sample/sample2.git
- file:///root/user/sample
นี่คือที่เก็บ sample1.git, sample2.git, และ sample.doc อาจมีไฟล์ต่อไปนี้
sample1.git:
top.sls
sample2.git
edit/vimrc
sample.doc
edit/vimrc
MinionFSเป็นไฟล์เซิร์ฟเวอร์พิเศษที่ Salt จัดเตรียมไว้ให้มินเนี่ยนแลกเปลี่ยนไฟล์ระหว่างกัน ไฟล์ที่ให้บริการโดย MinionFS เป็นไฟล์ที่มินเนี่ยนแชร์โดยเจตนา ในการแชร์ไฟล์ Minion ต้องทำตามขั้นตอนด้านล่างนี้
ซอร์สมินเนี่ยนต้องพุชไฟล์ไปยัง Salt Master โดยใช้ไฟล์ cp.push ฟังก์ชัน
เมื่อไฟล์ถูกผลักโดยมิเนียนต้นทางไฟล์ที่ปรับใช้แล้วจะสามารถเข้าถึงได้โดยมินเนี่ยนอื่น ๆ โดยใช้เซิร์ฟเวอร์ไฟล์ MinionFS
เปิดใช้งานการส่ง
โดยค่าเริ่มต้นการผลักไฟล์โดยมินเนี่ยนไปยังต้นแบบจะถูกปิดใช้งาน ในการยอมรับไฟล์จากมินเนี่ยนมาสเตอร์จำเป็นต้องมีอ็อพชัน“ file_recv” ในไฟล์กำหนดค่าและต้องตั้งค่าเป็นTrue. โดยค่าเริ่มต้นค่าหาก“ file_recv” คือfalse.
file_recv: True
เมื่อเปิดใช้งานตัวเลือกแล้วให้เริ่มบริการหลักใหม่
การผลักดันไฟล์
มินเนี่ยนสามารถดันไฟล์ไปที่มาสเตอร์ได้ ดำเนินการโดยไฟล์cp.pushฟังก์ชัน ฟังก์ชัน cp.push นี้มีกลไกที่ง่ายในการผลักดันไฟล์โดย minion โดยใช้ minion id
salt 'minion-id' cp.push /path/to/the/file
ที่นี่ minion-id ใช้เพื่อระบุว่ามินเนี่ยนตัวใดกำลังพุชไฟล์ คำสั่งนี้จะเก็บไฟล์ไว้ในไดเร็กทอรีย่อยที่ชื่อminions ภายใต้ master's cachedir. โดยปกติเส้นทางคือ - / var / cache / salt / master / minions
สำหรับมินเนี่ยน m1 และไฟล์ - /var/log/mylog.txt ไฟล์จะถูกเก็บไว้ใน - /var/cache/salt/master/minions/m1/var/log/mylog.txt
เปิดใช้งาน MinionFS
ในการเปิดใช้งาน MinionFS เพียงแค่เพิ่ม minion ในการตั้งค่าแบ็กเอนด์ของเซิร์ฟเวอร์ไฟล์ดังที่แสดงในบล็อกโค้ดต่อไปนี้
fileserver_backend:
- roots
- minion
เมื่อเปิดใช้งาน MinionFS ไฟล์ที่ผลักดันมินเนี่ยนจะพร้อมใช้งานในรูปแบบ -
salt://<minion-id>/path/to/pushed/file
สำหรับมินเนี่ยน m1 และไฟล์ที่พุช - /var/log/mylog.txt ไฟล์ที่พุชจะได้รับจาก salt: //m1/var/log/mylog.txt
minionFS นี้สามารถติดตั้งในไดเร็กทอรีพิเศษโดยใช้คอนฟิกูเรชันต่อไปนี้ มันจะแยกไฟล์ minionFS ออกจากไฟล์อื่น ๆ และจะช่วยในการจัดระเบียบไฟล์ minion
minionfs_mountpoint: salt://minionfs
สำหรับการกำหนดค่าข้างต้นไฟล์จะอยู่ในส่วน minionfs ไดเรกทอรีเป็น - salt: //minionfs/m1/var/log/mylog.txt
MinionFS ตัวเลือกขั้นสูง
MinionFS ยังมีตัวเลือกในการเปิด / ปิดความพร้อมใช้งานของไฟล์ที่ผลักจากมินเนี่ยนบางตัว ตัวเลือกคือminionfs_whitelistเพื่อเปิดใช้งานมินเนี่ยนและ minionfs_blacklistเพื่อปิดการใช้งานมินเนี่ยน
minionfs_whitelist:
- webserver
- develop*
- ‘mail\d+.mysite.com'
minionfs_blacklist:
- testing
ในการกำหนดค่าข้างต้นมินเนี่ยนทั้งหมดยกเว้น testing ได้รับอนุญาตให้แชร์ไฟล์โดยใช้ minionFS
Webserver1
มินเนี่ยนที่มีรหัสตรงกับนิพจน์ทั่วไปจะพัฒนา *
มินเนี่ยนที่มีรหัสตรงกับนิพจน์ทั่วไป mail\d+.mysite.com.
Testing
ในบทต่อไปเราจะเรียนรู้วิธีใช้ Cron กับ Salt
สามารถใช้เกลือร่วมกับ Cronใบสมัคร การใช้ทั้งสองแอปพลิเคชันร่วมกันเป็นโอกาสที่ดีในการทำให้ Salt เป็นอัตโนมัติ ในขณะที่ Salt มีตัวเลือกในการดำเนินการคำสั่งจากระยะไกล Cron ช่วยให้สามารถรันในลักษณะที่กำหนดไว้ล่วงหน้าหรือแบบอัตโนมัติ ให้เราเรียนรู้วิธีใช้ Cron และ Salt ร่วมกันในบทนี้
Cron คืออะไร?
Cron เป็นแอปพลิเคชั่นที่มีประโยชน์มากใน Linux Environment ช่วยให้สามารถตั้งค่าคำสั่งหรือสคริปต์ล่วงหน้าเพื่อเรียกใช้ในวันที่และเวลาที่ระบุ นอกจากนี้ยังเปิดใช้งานแอปพลิเคชันในช่วงเวลาปกติเช่นรายวันรายสัปดาห์หรือทุกวันแรกของเดือน
Cron เริ่มทำงานเมื่อระบบเริ่มทำงานและตรวจสอบไฟล์ /etc/crontabไฟล์สำหรับรายละเอียดการกำหนดค่า / etc / crontab มีทุกแอปพลิเคชันและตารางเวลาแยกกันตามที่แสดงด้านล่าง
15 * * * * root echo "This command runs at 15 minutes past every hour"
15 10 * * * root echo "This command is run daily at 10:15 am"
ทุกบรรทัดมีจุดเข้าเจ็ดจุดดังต่อไปนี้ซึ่งคั่นด้วยช่องว่างและมีดังนี้ -
minute - นาทีของชั่วโมงและอยู่ระหว่าง '0' ถึง '59'
hour - ชั่วโมงและระบุไว้ในนาฬิกาแบบ 24 ชั่วโมง
day_of_month- วันของเดือนและอยู่ระหว่าง 1 และ 31 ตัวอย่างเช่น 10 วันของแต่ละเดือนคือ 10
month - เดือนที่ระบุและระบุเป็นตัวเลข (0-12) หรือเป็นชื่อของเดือน (เช่นพฤษภาคม)
day_of_week - วันในสัปดาห์ระบุเป็นตัวเลข (0-7) หรือเป็นชื่อของวัน (เช่นวันอาทิตย์)
user - บัญชีผู้ใช้ที่คำสั่งทำงาน
cmd - คำสั่งจริงและข้อโต้แย้ง
ที่นี่ * แทนที่หากไม่มีการกำหนดอะไร
Salt Caller (สายเกลือ)
Salt มี CLI (Command Line Interface) salt-callเพื่อรันโมดูลในระบบมิเนียนโลคัลแทนจากเซิร์ฟเวอร์หลักโดยใช้คำสั่ง salt Salt call CLI รองรับตัวเลือกทั้งหมดที่สนับสนุนโดยคำสั่ง salt แต่รันในเครื่อง
Salt Caller ได้รับการออกแบบมาเพื่อรองรับการดีบัก แต่ตอนนี้สามารถใช้เป็นแอปพลิเคชันแบบสแตนด์อโลนได้
salt-call test.ping
ใช้ Salt-Call ใน cron
Salt-call CLI มีประโยชน์ในการกำหนดเวลาการทำงานของเกลือโดยใช้ Cron ตัวอย่างเช่นในการตรวจสอบสถานะของมินเนี่ยนทุกวันในเวลาเที่ยงคืนเราสามารถใช้ Salt-call พร้อมกับตัวเลือก - state.apply ตามที่แสดงด้านล่าง
/etc/crontab
PATH = /bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/opt/bin
0 0 * * * salt-call state.apply
ที่นี่
state.apply ฟังก์ชันจะตรวจสอบไฟล์คอนฟิกูเรชัน salt สำหรับ minion และตรวจสอบว่าการกระทำทั้งหมดที่กำหนดไว้สำหรับ minion นั้นได้รับการกำหนดค่าอย่างเหมาะสมหรือไม่
การกำหนดเส้นทางเป็นแนวทางปฏิบัติที่ดีเนื่องจากบางครั้งคำสั่ง salt อาจไม่พร้อมใช้งานในเส้นทางของระบบ
ในบทต่อไปเราจะเรียนรู้ Remote Execution ซึ่งเป็นแนวคิดหลักของ Salt
หนึ่งในแนวคิดหลักของ Salt คือการสั่งการจากระยะไกล Salt สามารถดำเนินการคำสั่งในหลายพันระบบภายในเวลาไม่กี่วินาที Salt ใช้คำสั่งของตัวเองเพื่อทำหน้าที่นี้ ตอนนี้ให้เราเข้าใจคำสั่ง Salt ที่แตกต่างกันสำหรับการดำเนินการระยะไกลในบทนี้
คำสั่งเกลือ
คำสั่ง Salt ช่วยให้ Salt master สามารถสื่อสารกับหนึ่งหรือมากกว่านั้นได้ Salt minions. ไวยากรณ์พื้นฐานมีดังนี้
salt '<target>' <module.function> [arguments]
ไวยากรณ์คำสั่งดังกล่าวประกอบด้วยองค์ประกอบหลักสามส่วนดังต่อไปนี้
target - กำหนดระบบที่ใช้โดยคำสั่ง
module.function- มันคือคำสั่ง คำสั่งประกอบด้วยโมดูลและฟังก์ชัน
arguments - ข้อมูลเพิ่มเติมที่จำเป็นสำหรับการเรียกใช้ฟังก์ชัน
ให้เราเข้าใจส่วนประกอบแต่ละอย่างโดยละเอียด
ส่วนประกอบเป้าหมายคืออะไร?
Target เป็นส่วนประกอบที่ให้คุณกรองมินเนี่ยน (ระบบที่ถูกจัดการ) เพื่อรันฟังก์ชัน คำสั่งง่ายๆโดยใช้องค์ประกอบเป้าหมายถูกกำหนดไว้ด้านล่าง
salt '*' test.ping
มันจะผลิตสิ่งต่อไปนี้ output -
minion2:
True
minion1:
True
ที่นี่เป้าหมาย ‘*’แสดงถึงระบบที่ถูกจัดการทั้งหมด การ 'test'นี่คือโมดูลและ pingเป็นฟังก์ชัน ใช้เพื่อทดสอบบริการ ping ในระบบรีโมต เราจะเรียนรู้เกี่ยวกับโมดูลต่างๆและหน้าที่ของมันในบทต่อ ๆ ไป
เป้าหมายโดยใช้ ID (มินเนี่ยน)
คุณสามารถส่งคำสั่งไปยังมินเนี่ยนเฉพาะโดยใช้ idในเป้าหมาย แทนที่จะใช้'*'คุณสามารถแทนที่ได้โดยใช้ไฟล์ minion id. มีการกำหนดไว้ด้านล่าง
salt 'minion1’ test.ping
มันจะผลิตสิ่งต่อไปนี้ output -
minion1:
True
เป้าหมายโดยใช้นิพจน์ทั่วไป
เป้าหมายสามารถกรองได้โดยนิพจน์ทั่วไปที่ระบุ มีการกำหนดไว้ด้านล่าง
salt -E 'minion[0-9]' test.ping
มันจะผลิตสิ่งต่อไปนี้ output -
minion2:
True
minion1:
True
เป้าหมายโดยใช้รายการ
สามารถระบุเป้าหมายได้อย่างชัดเจนในรายการ ถูกกำหนดไว้ในบล็อกรหัสต่อไปนี้
salt -L 'minion1,minion2' test.ping
มันจะผลิตสิ่งต่อไปนี้ output -
minion2:
True
minion1:
True
กำหนดเป้าหมายตามเงื่อนไข
เป้าหมายสามารถรวมกันได้ในคำสั่งเดียวดังที่แสดงในบล็อกโค้ดด้านล่าง
salt -C 'G@os:Ubuntu and minion* or [email protected].*' test.ping
มันจะผลิตสิ่งต่อไปนี้ output -
minion1:
True
minion2:
True
โมดูลและฟังก์ชัน (module.function)
Salt สามารถรันคำสั่งเชลล์ อัปเดตแพ็กเกจและแจกจ่ายไฟล์ ฯลฯ ในระบบที่ถูกจัดการทั้งหมดพร้อมกัน Salt ดำเนินการเหล่านี้โดยใช้โมดูล Salt มีโมดูลพิเศษสำหรับฟังก์ชันทั้งหมดที่มี ให้เราเข้าใจโมดูลเกลือต่างๆโดยใช้ตัวอย่างง่ายๆในบทนี้
คำสั่งเชลล์
Salt เรียกใช้คำสั่งเชลล์จากระยะไกลในหลายระบบโดยใช้ cmd.runคำสั่ง cmd เป็นโมดูลหลักและ run เป็นหนึ่งในฟังก์ชันที่มีอยู่ในไฟล์ cmdโมดูล. run ฟังก์ชันช่วยให้สามารถเรียกใช้คำสั่งเชลล์ในระบบรีโมตได้ดังที่แสดงในบล็อกโค้ดด้านล่าง
salt '*' cmd.run 'ls -l /etc'
มันจะผลิตสิ่งต่อไปนี้ output -
minion2:
total 868
drwxr-xr-x 7 root root 4096 Jan 26 22:10 X11
drwxr-xr-x 3 root root 4096 Jan 26 21:02 acpi
-rw-r--r-- 1 root root 2981 Jan 26 20:48 adduser.conf
-rw-r--r-- 1 root root 10 Jan 26 21:04 adjtime
drwxr-xr-x 2 root root 4096 Jan 26 22:10 alternatives
drwxr-xr-x 3 root root 4096 Jan 26 20:53 apm
drwxr-xr-x 3 root root 4096 Jan 26 21:02 apparmor
drwxr-xr-x 9 root root 4096 Jan 26 21:02 apparmor.d
drwxr-xr-x 3 root root 4096 Jan 26 21:02 apport
drwxr-xr-x 6 root root 4096 Jan 29 07:14 apt
drwxr-xr-x 2 root root 4096 Jan 26 22:10 at-spi2
……………
……………
minion1:
total 868
drwxr-xr-x 7 root root 4096 Jan 26 22:10 X11
drwxr-xr-x 3 root root 4096 Jan 26 21:02 acpi
-rw-r--r-- 1 root root 2981 Jan 26 20:48 adduser.conf
-rw-r--r-- 1 root root 10 Jan 26 21:04 adjtime
drwxr-xr-x 2 root root 4096 Jan 26 22:10 alternatives
drwxr-xr-x 3 root root 4096 Jan 26 20:53 apm
drwxr-xr-x 3 root root 4096 Jan 26 21:02 apparmor
drwxr-xr-x 9 root root 4096 Jan 26 21:02 apparmor.d
drwxr-xr-x 3 root root 4096 Jan 26 21:02 apport
drwxr-xr-x 6 root root 4096 Jan 29 07:09 apt
drwxr-xr-x 2 root root 4096 Jan 26 22:10 at-spi2
-rw-r----- 1 root daemon 144 Oct 21 2013 at.deny
-rw-r--r-- 1 root root 2177 Apr 9 2014 bash.bashrc
-rw-r--r-- 1 root root 45 Mar 22 2014 bash_completion
……………
……………
แสดงการใช้ดิสก์
เกลือเป็นโมดูลพิเศษ diskเพื่อรับรายละเอียดดิสก์ทั้งหมดของระบบที่ถูกจัดการ diskmodule มี usage ฟังก์ชั่นเพื่อสอบถามรายละเอียด
salt '*' disk.usage
มันจะผลิตสิ่งต่อไปนี้ output -
minion1:
----------
/:
----------
1K-blocks:
41251136
available:
37852804
capacity:
5%
filesystem:
/dev/sda1
used:
1662420
/dev:
----------
1K-blocks:
503908
available:
503896
capacity:
1%
filesystem:
udev
used:
12
/run:
----------
1K-blocks:
101780
available:
101412
capacity:
1%
filesystem:
tmpfs
used:
368
/run/lock:
----------
1K-blocks:
5120
available:
5120
capacity:
0%
filesystem:
none
used:
0
/run/shm:
----------
1K-blocks:
508884
available:
508872
capacity:
1%
filesystem:
none
used:
12
/run/user:
----------
1K-blocks:
102400
available:
102400
capacity:
0%
filesystem:
none
used:
0
/sys/fs/cgroup:
----------
1K-blocks:
4
available:
4
capacity:
0%
filesystem:
none
used:
0
/vagrant:
----------
1K-blocks:
303114632
available:
252331440
capacity:
17%
filesystem:
none
used:
50783192
minion2:
----------
/:
----------
1K-blocks:
41251136
available:
37852804
capacity:
5%
filesystem:
/dev/sda1
used:
1662420
/dev:
----------
1K-blocks:
503908
available:
503896
capacity:
1%
filesystem:
udev
used:
12
/run:
----------
1K-blocks:
101780
available:
101412
capacity:
1%
filesystem:
tmpfs
used:
368
/run/lock:
----------
1K-blocks:
5120
available:
5120
capacity:
0%
filesystem:
none
used:
0
/run/shm:
----------
1K-blocks:
508884
available:
508872
capacity:
1%
filesystem:
none
used:
12
/run/user:
----------
1K-blocks:
102400
available:
102400
capacity:
0%
filesystem:
none
used:
0
/sys/fs/cgroup:
----------
1K-blocks:
4
available:
4
capacity:
0%
filesystem:
none
used:
0
/vagrant:
----------
1K-blocks:
303114632
available:
252331440
capacity:
17%
filesystem:
none
used:
50783192
การเชื่อมต่อเครือข่าย
Salt จัดเตรียมโมดูลเครือข่ายและฟังก์ชันแยกต่างหากอินเทอร์เฟซภายในโมดูลเพื่อสอบถามข้อมูลอินเทอร์เฟซเครือข่ายเกี่ยวกับระบบที่ถูกจัดการ
salt '*' network.interfaces
มันจะผลิตสิ่งต่อไปนี้ output -
minion1:
----------
eth0:
----------
hwaddr:
08:00:27:04:3e:28
inet:
|_
----------
address:
10.0.2.15
broadcast:
10.0.2.255
label:
eth0
netmask:
255.255.255.0
inet6:
|_
----------
address:
fe80::a00:27ff:fe04:3e28
prefixlen:
64
scope:
link
up:
True
eth1:
----------
hwaddr:
08:00:27:34:10:52
inet:
|_
----------
address:
192.168.50.11
broadcast:
192.168.50.255
label:
eth1
netmask:
255.255.255.0
inet6:
|_
----------
address:
fe80::a00:27ff:fe34:1052
prefixlen:
64
scope:
link
up:
True
lo:
----------
hwaddr:
00:00:00:00:00:00
inet:
|_
----------
address:
127.0.0.1
broadcast:
None
label:
lo
netmask:
255.0.0.0
inet6:
|_
----------
address:
::1
prefixlen:
128
scope:
host
up:
True
minion2:
----------
eth0:
----------
hwaddr:
08:00:27:04:3e:28
inet:
|_
----------
address:
10.0.2.15
broadcast:
10.0.2.255
label:
eth0
netmask:
255.255.255.0
inet6:
|_
----------
address:
fe80::a00:27ff:fe04:3e28
prefixlen:
64
scope:
link
up:
True
eth1:
----------
hwaddr:
08:00:27:a7:31:8e
inet:
|_
----------
address:
192.168.50.12
broadcast:
192.168.50.255
label:
eth1
netmask:
255.255.255.0
inet6:
|_
----------
address:
fe80::a00:27ff:fea7:318e
prefixlen:
64
scope:
link
up:
True
lo:
----------
hwaddr:
00:00:00:00:00:00
inet:
|_
----------
address:
127.0.0.1
broadcast:
None
label:
lo
netmask:
255.0.0.0
inet6:
|_
----------
address:
::1
prefixlen:
128
scope:
host
up:
True
sys.doc Execution Module
ฟังก์ชัน Salt สามารถส่งไปยังไฟล์ sys.docโมดูลการดำเนินการ ใช้เพื่อรับรายละเอียดของโมดูลใด ๆ โดยตรงจากบรรทัดคำสั่ง ฟังก์ชั่น Salt เป็นเอกสารในตัว เอกสารเกี่ยวกับฟังก์ชันทั้งหมดสามารถเรียกดูได้จากมินเนี่ยนผ่านทางฟังก์ชัน sys.doc () ซึ่งกำหนดไว้ด้านล่าง
salt '*' sys.doc
อาร์กิวเมนต์สำหรับการเรียกใช้ฟังก์ชัน
อาร์กิวเมนต์ถูกใช้เพื่อให้ข้อมูลเพิ่มเติมสำหรับการเรียกใช้ฟังก์ชัน ตัวอย่างอาร์กิวเมนต์ง่ายๆได้รับด้านล่าง
salt '*' sys.doc pkg.install
ที่นี่อาร์กิวเมนต์ pkg.install เป็นโมดูลสำหรับติดตั้งแพ็คเกจเฉพาะ
ฟังก์ชัน Python
อาร์กิวเมนต์คือพารามิเตอร์ที่คั่นด้วยช่องว่างของฟังก์ชัน อนุญาตให้ส่งรหัส python เป็นอาร์กิวเมนต์ตามที่ระบุด้านล่าง
salt '*' cmd.exec_code python 'import sys;print sys.version'
มันจะผลิตสิ่งต่อไปนี้ output -
minion2:
2.7.6 (default, Oct 26 2016, 20:30:19)
[GCC 4.8.4]
minion1:
2.7.6 (default, Oct 26 2016, 20:30:19)
[GCC 4.8.4]
ในทำนองเดียวกันคุณสามารถใช้คำหลักที่ไม่บังคับและไฟล์ YAML ฟอร์แมตด้วย
การจัดการการกำหนดค่าเป็นหนึ่งในแนวคิดที่สำคัญที่สุดใน SaltStack ใช้เพื่อสร้างเทมเพลตการกำหนดค่าที่ใช้ซ้ำได้เรียกว่าไฟล์state. สถานะอธิบายทุกอย่างที่จำเป็นในการใส่ส่วนประกอบของระบบหรือแอปพลิเคชันในการกำหนดค่าที่รู้จัก
รัฐเกลือ
สถานะเกลือคือการกำหนดค่าที่ใช้ซ้ำได้สำหรับส่วนหนึ่งของระบบ รัฐเข้าใจง่ายกว่าและอธิบายได้โดยใช้ YAML แบบธรรมดา
สร้างรัฐเกลือ
รัฐเกลือสร้างได้ง่าย ให้เราสร้างสถานะง่ายๆในบทนี้ ย้ายไปที่ไดเร็กทอรี“ salt-vagrant-demo / saltstack / salt /” และสร้างไฟล์ชื่อsamples.sls และเพิ่มบรรทัดต่อไปนี้
samples.sls
install_network_packages:
pkg.installed:
- pkgs:
- rsync
- lftp
- curl
ตอนนี้บันทึกไฟล์และเรียกใช้คำสั่งต่อไปนี้ใน Salt master
root@saltmaster:/home/vagrant# salt 'minion1’ state.apply samples
ที่นี่เราติดตั้ง rsync, lftp และ curl ผ่าน pkg.installed โมดูลที่ใช้สถานะเกลือในมิเนียนเกลือ minion1. หากทำงานได้อย่างถูกต้องคุณจะเห็นการตอบสนองดังที่แสดงด้านล่าง
มันจะผลิตสิ่งต่อไปนี้ output -
minion1:
----------
ID: install_network_packages
Function: pkg.installed
Result: True
Comment: All specified packages are already installed
Started: 08:08:48.612336
Duration: 545.385 ms
Changes:
Summary for minion1
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
Total run time: 545.385 ms
ใช้ Salt State
ตอนนี้เราได้สร้างสถานะโดยใช้ไฟล์ ".sls" และนำไปใช้โดยการเรียกใช้โดยเฉพาะ Salt มีไฟล์สถานะเริ่มต้นที่เรียกว่าไฟล์top.slsไฟล์. ไฟล์ด้านบนใช้เพื่อใช้ไฟล์สถานะหลายไฟล์กับ Salt minions ไฟล์ด้านบนอธิบายตำแหน่งที่ควรใช้ ดี,States และ Top file ทำงานร่วมกันเพื่อสร้างแกนหลักของความสามารถในการจัดการการกำหนดค่าของ SaltStack
ตอนนี้ให้เราสร้างไฟล์ top.sls ง่ายๆในไดเร็กทอรี saltstack/salt และเพิ่มสิ่งต่อไปนี้
top.sls
base:
'*':
- common
'minion1':
- samples
ที่นี่ state, อย่างธรรมดา applies ถึง all system สถานะ, samples ใช้กับ minion1.
จากนั้นเรียกใช้ Salt master และใช้สถานะดังที่แสดงด้านล่าง
root@saltmaster:/home/vagrant# salt '*' state.apply
มันจะผลิตสิ่งต่อไปนี้ output -
minion1:
----------
ID: common_packages
Function: pkg.installed
Result: True
Comment: All specified packages are already installed
Started: 09:33:35.642355
Duration: 588.21 ms
Changes:
Summary for minion1
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
Total run time: 588.210 ms
minion2:
----------
ID: common_packages
Function: pkg.installed
Result: True
Comment: All specified packages are already installed
Started: 09:33:35.890331
Duration: 602.79 ms
Changes:
Summary for minion2
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
Total run time: 602.790 ms
ใช้ขนาดแบทช์
หากคุณมีมินเนี่ยนที่เชื่อมต่อจำนวนมากคุณสามารถ จำกัด จำนวนระบบที่อัปเดตพร้อมกันได้ ดำเนินการโดยใช้ไฟล์–batch-size ตัวเลือกซึ่งกำหนดไว้ด้านล่าง
root@saltmaster:/home/vagrant# salt --batch-size 5 '*' state.apply
มันจะผลิตสิ่งต่อไปนี้ output -
Executing run on ['minion2', 'minion1']
jid:
20170314094638482664
minion1:
----------
ID: common_packages
Function: pkg.installed
Result: True
Comment: All specified packages are already installed
Started: 09:46:41.228519
Duration: 582.24 ms
Changes:
Summary for minion1
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
Total run time: 582.240 ms
retcode:
0
jid:
20170314094638482664
minion2:
----------
ID: common_packages
Function: pkg.installed
Result: True
Comment: All specified packages are already installed
Started: 09:46:41.153609
Duration: 605.235 ms
Changes:
Summary for minion2
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
Total run time: 605.235 ms
retcode:
0
ฟังก์ชั่น Salt State
ฟังก์ชัน Salt state ใช้เพื่อติดตั้งและกำหนดค่าแอปพลิเคชันบนระบบรีโมตของคุณ ให้เราติดตั้งแพ็กเกจ "Vim" โดยใช้ฟังก์ชัน Salt state
สร้างและใช้ฟังก์ชันสถานะ
สร้างไฟล์ชื่อ“ sample.sls” ภายใต้ไดเร็กทอรี“ salt-vagrant-demo / saltstack / salt / sample.sls” และเพิ่มสิ่งต่อไปนี้ -
sample.sls
install vim:
pkg.installed:
- name: vim
เมื่อสภาพแวดล้อม Vagrant ขึ้นให้รัน salt master และใช้ sample.sls โดยรันคำสั่งต่อไปนี้
root@saltmaster:/home/vagrant# sudo salt 'minion2’ state.apply sample
มันจะผลิตสิ่งต่อไปนี้ output -
minion2:
----------
ID: install vim
Function: pkg.installed
Name: vim
Result: True
Comment: Package vim is installed
Started: 15:07:45.752764
Duration: 553.506 ms
Changes:
Summary for minion2
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
Total run time: 553.506 ms
ตอนนี้เราได้เพิ่มแพ็กเกจ“ Vim” ตอนนี้ให้เราทดสอบแพ็คเกจโดยใช้วิธีการทดสอบเกลือ
การทดสอบสถานะเกลือ
การทดสอบจะได้รับคำสั่งโดยการเพิ่มตัวเลือก "test = True" ในสถานะ ข้อมูลการส่งคืนจะแสดงสถานะที่จะใช้เป็นสีเหลืองและผลลัพธ์จะถูกรายงานว่า 'ไม่มี'
คำสั่งต่อไปนี้ใช้เพื่อทดสอบสถานะ -
root@saltmaster:/home/vagrant# sudo salt 'minion2’ state.apply sample test = True
มันจะผลิตสิ่งต่อไปนี้ output -
minion2:
----------
ID: install vim
Function: pkg.installed
Name: vim
Result: True
Comment: Package vim is already installed
Started: 15:07:45.752764
Duration: 553.506 ms
Changes:
Summary for minion2
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
Total run time: 553.506 ms
SaltStack ─ส่วนประกอบเสา
Pillar เป็นส่วนประกอบที่สำคัญในการทำให้รัฐเกลือสามารถนำกลับมาใช้ใหม่ได้ ใช้เพื่อกำหนดข้อมูลที่ปลอดภัยสำหรับมินเนี่ยนที่กำหนดโดยใช้เป้าหมาย ข้อมูลเสาเกลือเก็บค่าต่างๆเช่นพอร์ตเส้นทางไฟล์พารามิเตอร์การกำหนดค่าและรหัสผ่าน
ไฟล์กำหนดค่า Pillar
การกำหนดค่าสำหรับ pillar_roots ในไฟล์ config หลักดังแสดงด้านล่าง -
pillar_roots:
base:
- /srv/pillar
ไฟล์นี้อยู่ในไดเร็กทอรี“ / srv / เสา”
พิจารณาไฟล์บนสุดที่อยู่ใน /srv/pillar/top.sls มีโครงสร้างดังนี้ -
base:
'*':
- default
ตอนนี้ย้ายไปที่ไฟล์ default.sls ที่อยู่ใน /srv/pillar/default.sls และเพิ่มรหัสต่อไปนี้
# Default pillar values
apache
git
หลังจากบันทึกไฟล์แล้วให้รีเฟรชเสาเพื่ออัปเดตการเปลี่ยนแปลงทั้งหมด
รีเฟรชเสา
คุณสามารถรีเฟรชเสาโดยใช้คำสั่งต่อไปนี้
root@saltmaster:/home/vagrant# salt '*' saltutil.refresh_pillar
คำสั่งดังกล่าวใช้เพื่อรีเฟรชข้อมูลเสาเกลือของมินเนี่ยนทั้งหมด
แสดงรายการข้อมูลเสา
หากต้องการแสดงรายการข้อมูลเสาหลักคุณสามารถใช้คำสั่งที่ระบุด้านล่าง
root@saltmaster:/home/vagrant# salt '*' pillar.ls
มันจะผลิตสิ่งต่อไปนี้ output -
minion2:
- apache
- git
minion1:
- apache
- git
รายการเสา
เมื่อตั้งค่าเสาแล้วจะสามารถดูข้อมูลเกี่ยวกับมินเนี่ยนผ่านโมดูลเสาได้ สามารถเข้าถึงได้ผ่านฟังก์ชั่นpillar.itemsซึ่งกำหนดไว้ด้านล่าง
root@saltmaster:/home/vagrant# salt '*' pillar.items
มันจะผลิตสิ่งต่อไปนี้ output -
minion2:
----------
apache:
httpd
git:
git
minion1:
----------
apache:
httpd
git:
git
SaltStack - รวมส่วนประกอบ
คอมโพเนนต์ "รวม" ใช้เพื่อกำหนดงานคอนฟิกูเรชันเดียวกันในหลาย ๆ ที่ ง่ายต่อการปฏิบัติ ที่ด้านบนของไฟล์สถานะของคุณให้เพิ่มการรวมโดยใช้รูปแบบต่อไปนี้ -
include:
- state file 1
- state file 2
ที่นี่ state file 1 และ state file 2คือชื่อของไฟล์ SLS ที่คุณต้องการรวม ไม่จำเป็นต้องรวมไฟล์.slsส่วนขยาย. สถานะเกลือรวมจะถูกแทรกที่ด้านบนของไฟล์ปัจจุบัน
ไฟล์สถานะในไดเร็กทอรีย่อย
คุณสามารถรวมไฟล์สถานะไดเร็กทอรีย่อยโดยใช้จุด (.) ทำหน้าที่เป็นตัวคั่นไดเร็กทอรี
include:
- dir.sls1
อินเทอร์เฟซ Grains
Grains เป็นอินเทอร์เฟซที่ใช้ในการรับข้อมูลเกี่ยวกับระบบพื้นฐาน เกรนถูกรวบรวมสำหรับระบบปฏิบัติการชื่อโดเมนที่อยู่ IP เคอร์เนลประเภทของระบบปฏิบัติการหน่วยความจำและคุณสมบัติของระบบอื่น ๆ อีกมากมาย
การกำหนดเป้าหมายธัญพืช
ข้อมูลเมล็ดพืชสามารถใช้เมื่อกำหนดเป้าหมายมินเนี่ยนซึ่งกำหนดไว้ในบล็อกโค้ดต่อไปนี้
root@saltmaster:/home/vagrant# salt -G 'os:Ubuntu' test.ping
มันจะผลิตสิ่งต่อไปนี้ output -
minion1:
True
minion2:
True
รายชื่อธัญพืช
ธัญพืชสามารถแสดงรายการได้โดยใช้โมดูล 'grain.ls' ซึ่งกำหนดไว้ด้านล่าง
root@saltmaster:/home/vagrant# salt '*' grains.ls
รายการ
เช่นเดียวกับ Pillar ข้อมูล Grains สามารถแสดงรายการได้โดยใช้ 'grain.items'
root@saltmaster:/home/vagrant# salt '*' grains.items
การบันทึกใช้เพื่อติดตามเหตุการณ์ซอฟต์แวร์ที่กำลังทำงานอยู่ เหตุการณ์ถูกอธิบายโดยข้อความอธิบายซึ่งอาจมีข้อมูลตัวแปรก็ได้ วิธีการบันทึกเกลือใช้เพื่อแก้ไขปัญหาใด ๆ ที่คุณอาจประสบ คุณสามารถตรวจสอบกับระดับการบันทึกที่เฉพาะเจาะจง
การตั้งค่าการกำหนดค่า
ให้เราเข้าใจการตั้งค่าการกำหนดค่าต่างๆสำหรับการบันทึกโดยละเอียด
LOG_FILE
บันทึกข้อมูลเกลือจะถูกส่งผ่านไฟล์ซึ่งมีชื่อพา ธ ภายในเครื่องหรือตำแหน่งเครือข่ายเพื่อระบุตัวตน ไฟล์นี้ถือเป็นล็อกไฟล์
log_file: /var/log/salt/master
ที่นี่ไฟล์ขึ้นอยู่กับไบนารีที่ดำเนินการในต้นแบบ ในทำนองเดียวกันคุณสามารถใช้งานใน minion ได้เช่นกันซึ่งแสดงไว้ด้านล่าง
log_file: /var/log/salt/minion
คุณยังสามารถใช้ที่อยู่ระยะไกล ไวยากรณ์สำหรับการใช้ที่อยู่ระยะไกลคือ - <file | udp | tcp>: // <host | socketpath>: <port-if-required> / <log-facility>
log_file: udp://loghost:port
ที่นี่ Log-facility มีค่าเริ่มต้นเป็น LOG_USER
LOG_LEVEL
ระดับการบันทึกจะเรียงลำดับตามค่าที่กำหนดเป็นตัวเลข ไลบรารี Python ได้กำหนดระดับการบันทึกส่วนใหญ่ตามค่าเริ่มต้น นอกจากนั้น Salt ยังใช้ระดับอื่น ๆ อีก บางระดับมีคำอธิบายด้านล่าง
log_level: error; level value is 40 - ระบุว่าบันทึกคำสั่งบันทึกที่มีข้อผิดพลาด
log_level: quiet; level value is 1000 - บ่งชี้ว่าไม่ควรบันทึกสิ่งใดในระดับนี้
log_level: info; level value is 20 - ระบุข้อมูลบันทึกปกติ
log_level: warn; level value is 30 - ระบุบันทึกคำสั่งบันทึกเมื่อมีการเตือน
log_level: debug; level value is 10 - ข้อมูลที่เป็นประโยชน์สำหรับการดีบักทั้งการใช้เกลือและรหัสเกลือ
log_level: trace; level value is 5 - ข้อมูลการดีบักโค้ดโดยละเอียดเพิ่มเติม
LOG_LEVEL_LOGFILE
กำหนดระดับของข้อความที่จะส่งไปยังล็อกไฟล์
log_level_logfile: info
LOG_DATEFMT
กำหนดรูปแบบวันที่บันทึก โดยค่าเริ่มต้นจะแสดงเป็น% Y-% m-% d% H:% M:% S
log_datefmt_logfile: '%Y-%m-%d %H:%M:%S'
LOG_FMT_CONSOLE
กำหนดรูปแบบของคอนโซลที่บันทึกข้อความ เกลือใช้แบบกำหนดเองLogRecordแอตทริบิวต์เพื่อปรับสีเอาต์พุตบันทึกของคอนโซล เป็นไปตามไวยากรณ์ต่อไปนี้ -
'%(colorlevel)s' # log level name colorized by level
'%(colorname)s' # colorized module name
'%(colorprocess)s' # colorized process number
'%(colormsg)s' # colorized messages name
LOG_FMT_LOGFILE
เป็นการกำหนดรูปแบบของไฟล์บันทึกที่บันทึกข้อความ ไวยากรณ์พื้นฐานมีดังนี้ -
%(asctime)s,%(msecs)03d [%(name)-17s][%(levelname)-8s] %(message)s
LOG_GRANULAR_LEVELS
ระดับนี้ใช้เพื่อควบคุมระดับการบันทึกโดยเฉพาะมากขึ้น
log_granular_levels:
'salt': 'info'
'salt.modules': ‘trace'
ที่นี่ไลบรารีเกลือหลักที่ระดับ 'ข้อมูล' จะตั้งค่าไฟล์ salt.modules เพื่อบันทึกที่ระดับการติดตาม
ตัวจัดการบันทึกภายนอก
Salt ใช้ตัวจัดการบันทึกภายนอก LogStash และ Sentry สำหรับการบันทึก ให้เราเข้าใจโดยละเอียดในบทนี้
ตัวจัดการ LOGSTASH
LogStash เป็นโอเพ่นซอร์ส ไปป์ไลน์การประมวลผลข้อมูลที่ปลอดภัยฝั่งเซิร์ฟเวอร์ ให้เราพิจารณาตัวจัดการการบันทึก UDP แบบง่ายๆใน Salt ที่ใช้ LogStash
ระบุการเปลี่ยนแปลงต่อไปนี้ในไฟล์ Salt master -
logstash_udp_handler:
host: 127.0.0.1
port: 9999
version: 1
msg_type: logstash
จากนั้นเพิ่มการเปลี่ยนแปลงในไฟล์กำหนดค่า Logstash -
input {
udp {
port ⇒ 9999
codec ⇒ json
}
}
ที่นี่ UDP - คืออินพุตที่ต้องมีรูปแบบเป็น json_eventซึ่งเป็นสิ่งที่เราส่งผ่านสาย
SENTRY Logging Handler
Sentry คือการติดตามข้อผิดพลาดแบบเรียลไทม์ในการปรับใช้การผลิตและข้อมูลในการสร้างซ้ำและแก้ไขข้อขัดข้อง การกำหนดค่าเริ่มต้นในไฟล์หลักถูกกำหนดไว้ด้านล่าง
sentry_handler:
dsn: https://pub-key:[email protected]/app-id
log_level: debug
ที่นี่ระดับการบันทึกเริ่มต้นสำหรับตัวจัดการยามคือ ERROR แต่เรากำหนดการดีบัก log_level ภายใต้คีย์การกำหนดค่า sentry_handler
Salt ดำเนินการคำสั่งในระบบระยะไกลโดยใช้ salt-minion. นี่คือพฤติกรรมปกติ ในบางสถานการณ์ระบบรีโมตสามารถเข้าถึงได้โดยโปรโตคอล SSH เท่านั้น สำหรับสถานการณ์เหล่านี้ Salt มีตัวเลือกในการเชื่อมต่อระบบระยะไกลโดยใช้โปรโตคอล SSH เท่านั้นและดำเนินการคำสั่งผ่านเลเยอร์ SSH
Salt SSHง่ายมากในการกำหนดค่า การกำหนดค่าที่จำเป็นเพียงอย่างเดียวคือการระบุรายละเอียดระบบระยะไกลในไฟล์พิเศษที่เรียกว่าRoster file. โดยปกติไฟล์บัญชีรายชื่อนี้จะอยู่ใน/etc/salt/roster. ไฟล์บัญชีรายชื่อจะมีข้อมูลทั้งหมดเกี่ยวกับระบบระยะไกลและเราจะเชื่อมต่อกับมันได้อย่างไร เมื่อกำหนดค่าไฟล์บัญชีรายชื่อแล้วคำสั่ง Salt ทั้งหมดจะดำเนินการโดยใช้ไฟล์salt-ssh แทนคำสั่งเกลือ
ไฟล์บัญชีรายชื่อ
ระบบบัญชีรายชื่อได้รับการออกแบบมาโดยเฉพาะสำหรับ Salt SSH สิ่งนี้ได้รับการออกแบบให้เป็นระบบที่เสียบปลั๊กได้ จุดประสงค์เดียวของระบบบัญชีรายชื่อคือการรวบรวมข้อมูลเกี่ยวกับระบบระยะไกล ไฟล์บัญชีรายชื่อคือไฟล์YAML based configuration file มีข้อมูลระบบระยะไกลเป็น targets. เป้าหมายเหล่านี้เป็นโครงสร้างข้อมูลพิเศษที่มีชุดแอตทริบิวต์ที่กำหนดไว้ล่วงหน้า ไฟล์บัญชีรายชื่อมีเป้าหมายตั้งแต่หนึ่งรายการขึ้นไปและแต่ละเป้าหมายจะถูกระบุโดยไฟล์Salt ID.
โครงสร้างพื้นฐานของไฟล์บัญชีรายชื่อมีดังนี้ -
<Salt ID>:
host: <host name>
user: <user name>
passwd: <password of the user>
แอตทริบิวต์อื่น ๆ ทั้งหมดที่สนับสนุนโดยไฟล์บัญชีรายชื่อเป็นทางเลือก มีดังนี้ -
port - หมายเลขพอร์ต SSH
sudo - ไม่ว่าจะเรียกใช้คำสั่งผ่าน sudo
sudo_user - ชื่อผู้ใช้ sudo
tty - จริงถ้าเปิดใช้งาน sudo
priv - คีย์ส่วนตัว
timeout - หมดเวลาสำหรับการเชื่อมต่อ SSH
minion_opts - พจนานุกรมของ minion ตัวเลือก
thin_dir - ไดเร็กทอรีหน่วยเก็บข้อมูลของระบบเป้าหมายสำหรับส่วนประกอบเกลือ
cmd_umask - umask เพื่อบังคับสำหรับคำสั่ง salt-call
ไฟล์บัญชีรายชื่อตัวอย่างมีดังนี้ -
web:
host: 192.168.2.1
user: webuser
passwd: secret
sudo: True
db:
host: 192.168.2.2
ปรับใช้คีย์ SSH
Salt SSH จะสร้างคู่คีย์สาธารณะ / ส่วนตัวเริ่มต้นสำหรับการเข้าสู่ระบบ SSH เส้นทางเริ่มต้นจะเป็น /etc/salt/pki/master/ssh/salt-ssh.rsa คีย์นี้สามารถปรับใช้กับระบบรีโมตโดยใช้ssh-copy-id คำสั่งดังที่แสดงด้านล่าง
ssh-copy-id -i /etc/salt/pki/master/ssh/salt-ssh.rsa.pub [email protected]
ดำเนินการคำสั่ง
การดำเนินการคำสั่ง salt ทำได้ง่ายเพียงแค่เปลี่ยนไฟล์ salt cli สั่งเป็น salt-ssh ดังแสดงด้านล่าง
salt-ssh '*' test.ping
คำสั่งเชลล์ดิบ
Salt SSH มีอ็อพชัน (-r) เพื่อดำเนินการคำสั่ง raw ในระบบรีโมตโดยข้ามโมดูลและฟังก์ชันของเกลือ
salt-ssh '*' -r 'ls'
กำหนดเป้าหมายด้วย Salt SSH
การกำหนดเป้าหมายระบบระยะไกลใน Salt SSH รองรับเฉพาะเป้าหมาย glob และ regex เนื่องจาก Salt SSH เป็นโมดูลแยกต่างหากจึงมีตัวเลือกที่ จำกัด เท่านั้น ณ ตอนนี้และจะให้คุณสมบัติเพิ่มเติมในอนาคตอันใกล้
เกลือมีโมดูลแยกต่างหาก Salt Cloud เพื่อจัดหาเครื่องเสมือนของผู้ให้บริการคลาวด์ต่างๆเช่น Amazon AWS, Google Compute เป็นต้น Salt Cloud เป็นอินเทอร์เฟซทั่วไปสำหรับกำหนดค่าและจัดการ VM ของผู้ให้บริการคลาวด์ต่างๆ
Cloud Config- ไฟล์คอนฟิกูเรชันหลักสำหรับ Salt Cloud คือ / etc / salt / cloud และใช้กับ VM ทั้งหมด ไฟล์คอนฟิกูเรชันหลักเรียกว่าCloud Config.
Cloud Providers - ในการกำหนดเป้าหมายผู้ให้บริการระบบคลาวด์ที่เฉพาะเจาะจงเราสามารถใช้ไฟล์การกำหนดค่าเฉพาะและอยู่ใน /etc/salt/cloud.providers.d/*.conf สิ่งเหล่านี้เรียกว่า Cloud Providers.
Cloud Profiles - ในการกำหนดเป้าหมาย VM เฉพาะเรายังสามารถใช้ไฟล์การกำหนดค่าพิเศษซึ่งใช้กับ VM นั้น ๆ เท่านั้นและอยู่ที่ /etc/salt/cloud.profiles.d/*.conf ซึ่งจะเรียกว่า Cloud Profiles.
สำหรับเครื่องเสมือนการตั้งค่าในไฟล์ Cloud Config ถูกนำไปใช้ก่อนจากนั้นในไฟล์ Cloud Providers และในที่สุดการแทนที่ก็ทำได้โดย Cloud Profiles.
การติดตั้ง Salt Cloud
โดยค่าเริ่มต้น Salt Cloud ถูกสร้างขึ้นใน Salt และพร้อมใช้งาน หากไม่สามารถใช้งานได้เราสามารถติดตั้งได้โดยใช้คำสั่งด้านล่าง
pip install salt-cloud
เนื่องจาก Salt Cloud เป็นโมดูลแยกต่างหากและทำงานในกระบวนการของตัวเองจึงสามารถติดตั้งในระบบ Salt Minion ได้เช่นกันแทน Salt Master
การจัดเตรียมเครื่องเสมือน
ในการจัดเตรียมเครื่องเสมือนเราจำเป็นต้องกำหนดผู้ให้บริการระบบคลาวด์และโปรไฟล์ระบบคลาวด์ เมื่อสร้างทั้งสองแล้วเราสามารถจัดเตรียมเครื่องเสมือนใหม่เพื่อใช้งานได้
ผู้ให้บริการระบบคลาวด์
ข้อมูลโฮสต์คลาวด์ได้รับการกำหนดค่าในไฟล์การกำหนดค่าผู้ให้บริการระบบคลาวด์ โดยปกติข้อมูลพื้นฐานซึ่งจำเป็นต้องกำหนดค่า ได้แก่ โปรแกรมควบคุมระบบคลาวด์ชื่อผู้ใช้รหัสผ่านคีย์ส่วนตัวเป็นต้นให้เราสร้างผู้ให้บริการระบบคลาวด์ใหม่ชื่อเป็นmy-amazon-cloud.
สร้างไฟล์ my-amazon-cloud.conf ภายใต้ /etc/salt/cloud.providers.d/
เพิ่มผู้ให้บริการใหม่โดยใช้ไฟล์ ec2 คนขับ.
my-amazon-cloud:
driver: ec2
id: '<AWS_ID>'
key: '<AWS_KEY>'
private_key: /path/to/privatekey.pem
keyname: <name of the key>
securitygroup: default
minion:
master: <master server>
Salt จัดเตรียมไดรเวอร์สำหรับโฮสต์บนคลาวด์ที่หลากหลายเช่น GoGrid, HP Cloud, Google Compute Engine (GCE), Amazon AWS, Joyent, Linode, OpenNebula, ProfitBricks, Proxmox, Saltify, VexxHost, VMWare เป็นต้น
เมื่อกำหนดค่าผู้ให้บริการระบบคลาวด์แล้วเราสามารถสอบถามตำแหน่งที่มีอยู่ของผู้ให้บริการรูปภาพเครื่องที่มีอยู่และขนาดต่างๆ
salt-cloud --list-location my-amazon-cloud
salt-cloud --list-images my-amazon-cloud
salt-cloud --list-sizes my-amazon-cloud
โปรไฟล์คลาวด์
โปรไฟล์ Cloud ระบุอิมเมจและขนาดเครื่องเสมือน สามารถกำหนดค่าได้ภายใต้ - /etc/salt/cloud.profiles.d/ ให้เราสร้างโปรไฟล์ง่ายๆsimple.conf.
aws_micro:
provider: my-amazon-cloud
image: <image_id>
size: <machine_id e.g. t1.micro>
เครื่องเสมือน
เมื่อกำหนดค่าผู้ให้บริการและโปรไฟล์แล้วเราสามารถจัดหาเครื่องเสมือนได้อย่างง่ายดายโดยใช้ Salt-cloud ดังที่แสดงด้านล่าง
salt-cloud -p aws_micro master minion1 minion2
ที่ไหน p - Profile name master, minion1 และ minion2 เป็นเครื่องเสมือนใหม่
รายละเอียดของเครื่องเสมือนที่สร้างขึ้นใหม่สามารถรับได้โดยใช้คำสั่งต่อไปนี้
salt-cloud --query
เครื่องเสมือนสามารถทำลายได้โดยใช้คำสั่งต่อไปนี้ -
slat-cloud -d master minion1
แผนที่เมฆ
Cloud Map เป็นรูปแบบพิเศษในการสร้างเครื่องเสมือนหลายเครื่องพร้อมกัน รูปแบบของไฟล์แผนที่คือการระบุโปรไฟล์จากนั้นเพิ่มรายชื่อเครื่องเสมือนที่อยู่ด้านล่าง
ไฟล์แผนที่ตัวอย่างมีดังนี้ -
micro:
- web1
- web2
large:
- db1
- db2
ไฟล์แผนที่สามารถส่งผ่านเป็นอาร์กิวเมนต์ไปยังคำสั่ง salt-cloud เพื่อสร้างเครื่องเสมือนดังต่อไปนี้ -
salt-cloud -m /path/to/mapfile
มีอุปกรณ์จำนวนมากเช่นเราเตอร์อุปกรณ์เครือข่าย ฯลฯ มีระบบปฏิบัติการที่กำหนดเองหน่วยความจำ จำกัด และข้อควรพิจารณาด้านความปลอดภัยสูง ในอุปกรณ์เหล่านั้นเราไม่สามารถติดตั้งมาตรฐานได้salt-minionและต่อมาไม่สามารถจัดการระบบเหล่านั้นได้ อย่างไรก็ตาม Salt เป็นเทคโนโลยีที่สร้างสรรค์เพื่อเอาชนะข้อ จำกัด นี้
Salt มีโมดูลแยกต่างหากมิเนียนพร็อกซีเกลือที่ควบคุมระบบระยะไกลโดยใช้บริการ REST ที่ทำงานในระบบรีโมต บริการ REST นี้เป็นบริการเว็บที่ใช้ HTTP ที่เขียนโดยใช้ไฟล์Representational State Transfer (REST) แนวคิดและทั้งสองใช้งานง่ายและง่ายต่อการบริโภค
อุปกรณ์ทุกเครื่องจะมี SDK และสภาพแวดล้อมการพัฒนาของตัวเองเพื่อเขียนแอปพลิเคชันที่ซับซ้อน Salt คาดว่าจะมีการพัฒนาบริการ REST ในอุปกรณ์ตามข้อกำหนดของอินเตอร์เฟส Salt Salt ยังมีโมดูล python เพื่อเขียนบริการเว็บ REST หากอุปกรณ์รองรับ python การพัฒนาบริการเว็บ REST จะเป็นเรื่องง่าย
เมื่อบริการเว็บ REST ได้รับการพัฒนาและปรับใช้ในระบบระยะไกลแล้ว Salt สามารถกำหนดค่าให้ควบคุมอุปกรณ์ระยะไกลโดยใช้บริการเว็บ REST แทนมินเนี่ยนเกลือ
ตัวอย่างการทำงาน
ให้เราเรียนรู้แนวคิดของ salt proxy minionใช้สภาพแวดล้อมการทำงานแบบสด สำหรับสภาพแวดล้อมที่ใช้งานจริงเราเลือกระบบ Linux สำหรับทั้ง master และ proxy minion เราจะควบคุมระบบโดยใช้ REST web service แทน salt-minion
ติดตั้งและกำหนดค่า REST Web Service
Salt ให้ตัวอย่างการใช้งานบริการเว็บ REST ซึ่งตั้งชื่อเป็น proxyminion_rest_example ในโมดูลการสนับสนุน ให้เราติดตั้งบริการเว็บตัวอย่าง
ติดตั้ง ‘bottle’ใช้ pip bottle คำสั่งคือเฟรมเวิร์กเว็บ python สำหรับพัฒนาเว็บแอปพลิเคชัน
pip install bottle = 0.12.8
ดาวน์โหลดไฟล์ saltstack/salt-contribโครงการจาก github มิฉะนั้นโคลนโครงการโดยใช้คำสั่งต่อไปนี้
git clone https://github.com/saltstack/salt-contrib
เปิดเทอร์มินัลแล้วไปที่ไฟล์ salt-contrib ไดเรกทอรี
ไดเร็กทอรี salt-Contrib นี้จะมีโฟลเดอร์ proxyminion_rest_example. โฟลเดอร์นี้มีตัวอย่างการใช้งานสำหรับบริการเว็บ REST ไปที่โฟลเดอร์ proxyminion_rest_example
รันคำสั่งต่อไปนี้เพื่อเริ่มบริการเว็บ REST
python rest.py --address <your ip address> --port 8000
เปิดเบราว์เซอร์และโหลด http: // «ที่อยู่ IP ของคุณ»: 8000 ซึ่งจะแสดงหน้าเริ่มต้นพร้อมบริการและแพ็คเกจดังที่แสดงในภาพหน้าจอด้านล่าง
ตอนนี้เราได้กำหนดค่าบริการเว็บ REST แล้วและจะตรวจสอบวิธีกำหนดค่าพร็อกซีเกลือเพื่อค้นหาบริการเว็บ REST และควบคุมระบบ
กำหนดค่า Salt-Proxy
ในการกำหนดค่า Salt-Proxy เราต้องทำตามขั้นตอนด้านล่าง
เราต้องระบุโหนดหลักสำหรับ salt-proxy แก้ไขตำแหน่งไฟล์การกำหนดค่าพร็อกซีซึ่งอยู่ใน / etc / salt / proxy และป้อนรหัสต่อไปนี้
master: <your ip address>
แก้ไข / สร้างไฟล์เสาหลักใน /srv/pillar/top.sls ดังแสดงในบล็อกรหัสต่อไปนี้
base:
'p8000':
- p8000
เพิ่มไฟล์เสาใหม่ p8000.sls ใน /srv/pillar ดังที่แสดงในบล็อกโค้ดด้านล่าง
proxy:
proxytype: rest_sample
url: http://<your ip address>:8000
เริ่ม salt-proxy ในโหมด debug โดยใช้คำสั่งต่อไปนี้
salt-proxy --proxyid = p8000 -l debug
เช่นเดียวกับเกลือ - มินเนี่ยนให้ยอมรับ salt-proxy key ดังแสดงด้านล่าง
salt-key -y -a p8000
The following keys are going to be accepted:
Unaccepted Keys:
p8000
Key for minion p8000 accepted.
วิ่งเกลือ
ตอนนี้เรียกใช้ salt คำสั่งและเรียกไฟล์ ping.test ฟังก์ชันดังแสดงด้านล่าง
salt p8000 test.ping
เราสามารถเรียกใช้ฟังก์ชันใด ๆ ที่สนับสนุนโดยบริการเว็บ REST โดยใช้ saltซึ่งคล้ายกับ salt-minion.
ตัวอย่างเช่นข้อมูลเกรนสามารถรับได้โดยใช้คำสั่งต่อไปนี้
salt p8000 grains.items
ระบบอีเวนต์ใน Salt เป็นอินเทอร์เฟซ ZeroMQ PUB ในพื้นที่ซึ่งยิงเหตุการณ์ที่เป็นเกลือ ดำเนินการโดยส่วนประกอบต่อไปนี้
Event Sockets - ใช้เพื่อเผยแพร่กิจกรรม
Event library - ใช้เพื่อฟังเหตุการณ์และส่งเหตุการณ์เข้าสู่ระบบเกลือ
กิจกรรม Salt Master
ผู้เชี่ยวชาญด้านเกลือจัดเตรียมเหตุการณ์ประเภทต่างๆซึ่งมีรายละเอียดอธิบายไว้ด้านล่าง -
- เหตุการณ์การพิสูจน์ตัวตน
- เริ่มกิจกรรม
- เหตุการณ์สำคัญ
- งานอีเว้นท์
- กิจกรรมนักวิ่ง
- เหตุการณ์การแสดงตน
- เหตุการณ์บนคลาวด์
ให้เราดูรายละเอียดของเหตุการณ์แต่ละประเภท
เหตุการณ์การพิสูจน์ตัวตน
เหตุการณ์การพิสูจน์ตัวตนเหล่านี้เริ่มทำงานเมื่อมินเนี่ยนทำการตรวจสอบการพิสูจน์ตัวตนกับมาสเตอร์ แสดงโดย salt / auth
เริ่มกิจกรรม
เหตุการณ์เริ่มต้นจะเริ่มขึ้นเมื่อใดก็ตามที่มินเนี่ยนเชื่อมต่อกับซอลท์มาสเตอร์และมันจะแสดงด้วย salt / minion // start
เหตุการณ์สำคัญ
เหตุการณ์สำคัญจะเริ่มขึ้นเมื่อนายเกลือยอมรับและปฏิเสธกุญแจของมิเนียนเกลือ คุณสามารถเข้าถึงเหตุการณ์นี้ได้โดยใช้คำสั่ง salt-key
กิจกรรมงาน
เหตุการณ์งานจะถูกไล่ออกทุกครั้งที่งานใหม่กำลังจะเริ่มขึ้น มันแสดงโดยsalt/job//new. ที่นี่ JID - Job id new - new job
กิจกรรมนักวิ่ง
เมื่อนักวิ่งเริ่มดำเนินการเหตุการณ์นักวิ่งจะเริ่มขึ้น แสดงโดย salt / run // new
เหตุการณ์การแสดงตน
เมื่อมินเนี่ยนเชื่อมต่อหรือเชื่อมต่อใหม่หรือตัดการเชื่อมต่อเหตุการณ์นี้จะเริ่มทำงานในช่วงเวลาปกติ แสดงโดย -salt/presence/present และ salt/presence/change. ที่นี่
Present - หมายถึง Salt master เชื่อมต่อกับรายชื่อมินเนี่ยน
Change - ใช้ตรวจจับมินเนี่ยนตัวใหม่ - เชื่อมต่อหรือตัดการเชื่อมต่อ
เหตุการณ์บนคลาวด์
เหตุการณ์ Salt-Cloud ถูกยิงบนเครื่องเสมือน มินเนี่ยนจะไม่ดำเนินการ คุณสามารถเข้าถึงได้โดยใช้ -salt/cloud//creating. จะเริ่มทำงานเมื่อ Salt cloud เริ่มกระบวนการเรียกใช้เครื่องเสมือน
เครื่องมือเหตุการณ์
ตอนนี้ให้เราดูเครื่องมือเหตุการณ์และสคริปต์ คุณสามารถเข้าถึงบัสเหตุการณ์โดยใช้ CLI เข้าถึงได้โดยคำสั่งต่อไปนี้
salt-run state.event pretty = True
ที่นี่รันเนอร์ได้รับการออกแบบมาเพื่อโต้ตอบกับบัสเหตุการณ์จากเครื่องมือภายนอกและเชลล์สคริปต์ รถบัสเหตุการณ์ของ Salt สามารถเข้าถึงได้จากระยะไกลผ่านทางREST API. แสดงโดย - (URL ตัวอย่าง)
curl -SsNk https://salt-api.example.com:8000/events?token = 05A3.
ในทำนองเดียวกันคุณสามารถเข้าถึงเหตุการณ์จากสคริปต์ Python ได้เช่นกัน
โดยทั่วไปแล้ว orchestrationคือการประสานงานและการจัดระบบอัตโนมัติ Orchestrate Runner ใช้เพื่อทำการออเคสตร้าใน SaltStack
Orchestrate Runner
เขา Orchestrate Runner นำเสนอฟังก์ชันทั้งหมดของ OverState(ระบบก่อนหน้า) เดิมเรียกว่าstate.slsนักวิ่ง. นักวิ่งออเคสเตรตนี้ใช้เพื่อสรุประบบ Salt state ให้เป็นบริบทของ Salt master
state.sls และ state.highstate ฟังก์ชั่นจะถูกเรียกใช้งานกับ Salt minion แต่ละตัว แต่ไฟล์ state.orchestrateนักวิ่งจะถูกดำเนินการบนต้นแบบ state.orchestrateนักวิ่งช่วยให้คุณสามารถจัดการโครงสร้างพื้นฐานทั้งหมดของคุณได้อย่างสมบูรณ์ ให้เราเข้าใจวิธีดำเนินการตามขั้นตอนง่ายๆ
การดำเนินการอย่างง่าย
คำสั่ง Orchestrate Runner เหมือนกับคำสั่ง state.sls แต่คุณสามารถใช้งานได้โดยใช้ "salt-run" แทนการใช้เกลือ
สมมติว่าคุณมีไฟล์ sample.sls ไฟล์อยู่ที่ /srv/salt/orch/samples.sls. เพิ่มรหัสต่อไปนี้ในไฟล์นั้น
sample.sls
install_nginx:
salt.state:
- tgt: 'web*'
- sls:
- nginx
คำสั่งต่อไปนี้ใช้เพื่อรันบนต้นแบบและจะใช้สถานะที่กำหนดไว้ในไฟล์นั้น
salt-run state.orchestrate orch.sample
มันจะผลิตสิ่งต่อไปนี้ output -
saltmaster.local_master:
----------
ID: install_nginx
Function: salt.state
Result: True
Comment: States ran successfully.
Started: 11:54:56.308078
Duration: 63.401 ms
Changes:
Summary for saltmaster.local_master
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
Total run time: 63.401 ms
root@saltmaster:/home/vagrant#
ที่นี่ตามเวอร์ชันปัจจุบันฟังก์ชันตัววิ่งถูกเปลี่ยนชื่อเป็น state.orchestrate. สิ่งนี้จะเป็นประโยชน์ในการหลีกเลี่ยงความสับสนกับฟังก์ชันการดำเนินการ state.sls แต่เวอร์ชันก่อนหน้าของstate.sls ต้องใช้
เรียกใช้ฟังก์ชัน
ในการเรียกใช้ฟังก์ชันคุณควรใช้ไฟล์ salt.function. พิจารณาไฟล์data.sls ตั้งอยู่ที่ /srv/salt/orch/data.sls. ตอนนี้เพิ่มการเปลี่ยนแปลงต่อไปนี้ในไฟล์นั้น
data.sls
cmd.run:
salt.function:
- tgt: '*'
- arg:
- rm -rf /tmp/data
คำสั่งต่อไปนี้ใช้เพื่อเรียกใช้ฟังก์ชัน Salt
root@saltmaster:/home/vagrant# salt-run state.orchestrate orch.data
มันจะผลิตสิ่งต่อไปนี้ output -
saltmaster.local_master:
----------
ID: cmd.run
Function: salt.function
Result: True
Comment: Function ran successfully. Function cmd.run ran on minion1, minion2.
Started: 12:14:54.791635
Duration: 234.615 ms
Changes:
minion1:
minion2:
Summary for saltmaster.local_master
------------
Succeeded: 1 (changed = 1)
Failed: 0
------------
Total states run: 1
Total run time: 234.615 ms
สูตรเกลือได้รับการบรรจุและแจกจ่ายให้กับผู้เชี่ยวชาญด้านเกลือโดยใช้ตัวจัดการแพ็คเกจ แนวคิดนี้ได้รับอิทธิพลมาจากRPM, Yum และ Pacmanระบบบรรจุภัณฑ์ สูตรเกลือเสาแม่แบบไฟล์และไฟล์อื่น ๆ ใช้แล้วรวมเป็นไฟล์เดียว
หลังจากสร้างแพ็กเกจสูตรแล้วจะถูกคัดลอกไปยัง Repository System เพื่อให้ใช้สำหรับ Salt Masters ก่อนที่จะย้ายไปที่ตัวจัดการแพ็คเกจให้เราดูวิธีการติดตั้งแพ็คเกจ“ nginx” โดยใช้คำสั่ง Salt basic
ไวยากรณ์ต่อไปนี้ใช้เพื่อติดตั้งแพ็กเกจ“ nginx”
root@saltmaster:/home/vagrant# salt '*' pkg.install nginx
ที่นี่ pkg.install nginxคำสั่งใช้เพื่อติดตั้งแพ็คเกจ หลังจากดำเนินการคุณจะเห็นคำตอบต่อไปนี้
มันจะผลิตสิ่งต่อไปนี้ output -
minion2:
----------
httpd:
----------
new:
1
old:
httpd-cgi:
----------
new:
1
old:
libxslt1.1:
----------
new:
1.1.28-2build1
old:
nginx:
----------
new:
1.4.6-1ubuntu3.7
old:
nginx-common:
----------
new:
1.4.6-1ubuntu3.7
old:
nginx-core:
----------
new:
1.4.6-1ubuntu3.7
old:
minion1:
----------
httpd:
----------
new:
1
old:
httpd-cgi:
----------
new:
1
old:
libxslt1.1:
----------
new:
1.1.28-2build1
old:
nginx:
----------
new:
1.4.6-1ubuntu3.7
old:
nginx-common:
----------
new:
1.4.6-1ubuntu3.7
old:
nginx-core:
----------
new:
1.4.6-1ubuntu3.7
old:
ตอนนี้คุณได้ติดตั้งแพ็คเกจแล้ว ในการเริ่มบริการสำหรับแพ็คเกจนั้นให้ใช้คำสั่งที่ระบุด้านล่าง
root@saltmaster:/home/vagrant# salt '*' service.start nginx
หลังจากรันคำสั่งนี้ผลลัพธ์จะมีลักษณะดังที่แสดงในบล็อกโค้ดด้านล่าง
minion1:
True
minion2:
True
ดังนั้นเราจึงได้ติดตั้งและเริ่มบริการสำหรับแพ็คเกจ“ nginx” โดยใช้คำสั่งพื้นฐาน ตอนนี้ให้เราพูดถึงวิธีการสร้างและติดตั้งแพ็คเกจใน Salt package manager
แพ็คเกจอาคาร
สามารถสร้างแพ็คเกจบนระบบใดก็ได้ที่คุณสามารถติดตั้ง Salt แพคเกจมีสามประเภทดังนี้
- Formula
- Reactor
- Conf
ตอนนี้ให้เราเข้าใจวิธีสร้างแพ็คเกจโดยใช้ไฟล์ Fomula ไฟล์.
ไฟล์สูตร
ไฟล์ส่วนใหญ่จากแพ็กเกจจะอยู่ที่ไดเร็กทอรี - / srv / spm / salt / โดยดีฟอลต์ แต่ไฟล์เสาหลักสามารถวางไว้ในไดเร็กทอรี - / srv / spm / Pillars / ไฟล์สูตรอธิบายแพ็คเกจ
Example
name: apache
os: RedHat
os_family: RedHat
version: 201607
release: 2
summary: Formula for installing Apache
description: Formula for installing Apache
ที่นี่
Name- ชื่อแพ็กเกจ ชื่อแพ็กเกจคือapache.
os - ใช้เพื่อทราบว่าระบบปฏิบัติการใดสามารถรองรับแพ็คเกจนี้ได้
os_family - ใช้เพื่อทราบว่าตระกูลระบบปฏิบัติการใดที่สามารถรองรับแพ็คเกจนี้ได้
Version- เวอร์ชันของแพ็คเกจ ระบุไว้ในรูปแบบปปปปป
Release - ฟิลด์นี้หมายถึงรุ่นของเวอร์ชันเป็นหลัก
Summary - คำอธิบายสั้น ๆ ของแพ็คเกจ
Description - คำอธิบายรายละเอียดเพิ่มเติมของแพ็คเกจ
เครื่องปฏิกรณ์
ไฟล์เครื่องปฏิกรณ์อยู่ในไฟล์ /srv/spm/reactor/ ไดเรกทอรี
คอนเฟิม
ไฟล์ในแพ็กเกจประเภทนี้เป็นไฟล์คอนฟิกูเรชันสำหรับ Salt ซึ่งโดยปกติจะอยู่ในไฟล์ /etc/salt/ไดเรกทอรี ไฟล์คอนฟิกูเรชันสำหรับแพ็กเกจอื่นที่ไม่ใช่ Salt can และควรจัดการด้วย Salt State (โดยใช้แพ็กเกจประเภทสูตร)
ให้เราทำตามขั้นตอนต่อไปนี้เพื่อสร้างแพ็คเกจ
สร้างไฟล์ FORMULA และวางไว้ในรูทของโฟลเดอร์แพ็คเกจ
รวบรวมไฟล์สูตรในโฟลเดอร์บนระบบบิลด์
วิ่ง spm build. แพ็กเกจถูกสร้างและวางไว้ในโฟลเดอร์ / srv / spm_build คำสั่งต่อไปนี้ใช้เพื่อสร้างแพ็คเกจ
spm build /path/to/salt-packages-source/formula
ตอนนี้คัดลอกไฟล์ .spm ไฟล์ไปยังโฟลเดอร์บนระบบที่เก็บ
คุณสามารถแบ่งปันไฟล์ srv/spm_build โฟลเดอร์บนเครือข่ายหรือคัดลอกไฟล์ไปยัง FTP ของคุณหรือเว็บเซิร์ฟเวอร์
สร้างข้อมูลเมตาของ repo โดยใช้คำสั่งต่อไปนี้
spm create_repo /srv/spm_build
การติดตั้งแพ็คเกจ
ส่วนนี้จะอธิบายเกี่ยวกับการติดตั้งแพ็คเกจ Salt package manager
กำหนดค่าที่เก็บระยะไกล
ในการกำหนดค่าที่เก็บระยะไกล Salt Master จำเป็นต้องทราบว่าที่เก็บอยู่ที่ไหนผ่านกระบวนการกำหนดค่า
ไฟล์อยู่ในรูปแบบ /etc/salt/spm.repos.d/spm.repo ไดเรกทอรี
Example
file_repository:
url: https://spm.example.com/
ที่นี่ไฟล์มีชื่อของที่เก็บและลิงก์ไปยังที่เก็บ คุณยังสามารถใช้ http, https, ftp หรือเส้นทางของไฟล์ ในการใช้เส้นทางไฟล์คุณสามารถเข้าถึงได้โดยใช้ URL: file: /// srv / spm_build
อัปเดตข้อมูลเมตา
หลังจากกำหนดค่าที่เก็บบน Salt master แล้วข้อมูลเมตาของที่เก็บจะถูกดาวน์โหลดโดยใช้คำสั่งด้านล่าง
spm update_repo
อัปเดต File Roots
แพ็คเกจ SPM อยู่ในไดเร็กทอรี srv / spm / salt เพิ่มพา ธ ต่อไปนี้ไปยังรูทไฟล์บน Salt master
file_roots:
base:
1. /srv/salt
2. /srv/spm/salt
ตอนนี้เริ่มต้นเกลือใหม่
ติดตั้ง Apache Package
ในการติดตั้งแพ็กเกจ apache ให้ใช้คำสั่งต่อไปนี้
spm install apache
คุณยังสามารถติดตั้งได้โดยตรงจากไฟล์ SPM โดยใช้คำสั่งด้านล่าง
spm local install /srv/spm/apache-201607-1.spm
การลบแพ็คเกจ
หากต้องการลบแพ็คเกจตัวอย่างเช่น - apache ให้ใช้คำสั่งต่อไปนี้
spm remove apache
โปรดทราบว่าหากมีการแก้ไขไฟล์ใด ๆ ไฟล์เหล่านั้นจะไม่ถูกลบออก
Salt ให้การเข้าถึงแบบเป็นโปรแกรมสำหรับคำสั่งทั้งหมด Salt มีโมดูลที่แตกต่างกันสำหรับทุกส่วนของระบบ Salt ให้เราเรียนรู้พื้นฐานของ python API และวิธีเรียกใช้คำสั่ง salt พื้นฐานในบทนี้
การกำหนดค่า
salt.config โมดูลใช้เพื่อเข้าถึงรายละเอียดการกำหนดค่า Salt
import salt.config
opts = salt.config.client_config('/etc/salt/master')
ที่นี่ client_config อ่านไฟล์คอนฟิกูเรชัน salt และส่งกลับรายละเอียดการกำหนดค่าเป็นพจนานุกรม
รถตัก
salt.loader โมดูลใช้เพื่อโหลดแต่ละโมดูลใน Salt เช่นธัญพืชมินเนี่ยนเป็นต้น
import salt.loader
opts = salt.config.minion_config('/etc/salt/minion')
grains = salt.loader.grains(opts)
ที่นี่ grains อ่านรายละเอียดของธัญพืชในระบบเกลือและส่งคืน
โมดูลไคลเอนต์
salt.client โมดูลใช้เพื่อดำเนินการคำสั่ง salt, salt-call และ salt-SSH โดยทางโปรแกรม
คลาส python ที่สำคัญที่สุดมีดังนี้ -
- salt.client.LocalClient
- salt.client.Caller
- salt.client.ssh.client.SSHClient
ฟังก์ชันหลักที่มาจากโมดูลไคลเอ็นต์ส่วนใหญ่คือ cmd. ฟังก์ชันนี้จะรวมอ็อพชัน CLI และเรียกใช้งานซึ่งคล้ายกับบรรทัดคำสั่งและส่งคืนผลลัพธ์เป็นโครงสร้างข้อมูล python
LocalClient
LocalClient ใช้เพื่อส่งคำสั่งจากมาสเตอร์ไปยังมินเนี่ยนเกลือและส่งผลลัพธ์กลับไปยังมาสเตอร์
import salt.client
local = salt.client.LocalClient()
local.cmd('*', 'test.ping')
มันจะผลิตสิ่งต่อไปนี้ output -
{'minion1': True, 'minion2': True }
ผู้โทร
Caller ใช้ในการเรียกใช้ salt-call โดยทางโปรแกรมและส่งคืนผลลัพธ์
import salt.client
caller = salt.client.Caller()
caller.cmd('test.ping')
มันจะผลิตสิ่งต่อไปนี้ output -
True
SSHClient
SSHCient ใช้เพื่อเรียกใช้ไฟล์ salt-ssh โดยทางโปรแกรมและส่งคืนผลลัพธ์
import salt.client.ssh.client
ssh = salt.client.ssh.client.SSHClient()
ssh.cmd('*', 'test.ping')
มันจะผลิตสิ่งต่อไปนี้ output -
{'minion1': True, 'minion2': True }
CloudClient
โมดูล salt.cloud ใช้เพื่อดำเนินการคำสั่ง salt-cloud โดยทางโปรแกรม
client = salt.cloud.CloudClient(path = '/etc/salt/cloud')
โมดูลคลาวด์มีฟังก์ชันในการสร้าง VMs (สร้าง) เพื่อทำลาย VM (ทำลาย) แสดงรายการรูปภาพที่ผู้ให้บริการระบบคลาวด์ (list_images) จัดเตรียมรายการตำแหน่งของผู้ให้บริการระบบคลาวด์ (list_locations) แสดงรายการขนาดเครื่องของผู้ให้บริการคลาวด์ (list_sizes) เป็นต้น
ในตัวอย่างการทำงานนี้เราจะสร้างสูตร Salt ที่จะกำหนดค่าเว็บเซิร์ฟเวอร์ apache พร้อมกับซอฟต์แวร์ PHP Salt เป็นวิธีที่ยอดเยี่ยมในการดำเนินการคำสั่งเฉพาะกิจ แต่คุณไม่ต้องการกำหนดค่าโครงสร้างพื้นฐานของคุณด้วยวิธีนี้อย่างต่อเนื่อง ด้วยการสร้างชุดสูตร Salt คุณสามารถสร้างการกำหนดค่าใด ๆ ซ้ำได้อย่างน่าเชื่อถือ
สูตรเกลือเป็นไฟล์ข้อความ YAML ที่เรียบง่ายและโดยค่าเริ่มต้นจะอยู่ใน Salt Master ของคุณในรูปแบบ /srv/salt/*. เริ่มต้นด้วยการสร้าง Salt Formula เพื่อติดตั้งเว็บเซิร์ฟเวอร์ Apache และ PHP ในเวลาเดียวกัน
สร้างไฟล์ชื่อ“ websetup.sls” ภายใต้ /srv/salt/ ไดเรกทอรีและเพิ่มรหัสต่อไปนี้
websetup.sls
websetup:
pkg:
- installed
- pkgs:
- apache2
- php5
- php5-mysql
ในตัวอย่างนี้ให้สังเกตอาร์กิวเมนต์“ - pkgs:” แต่ละรายการในรายการด้านล่าง“ - pkgs:” จะถูกส่งต่อไปยังตัวจัดการแพ็คเกจของ OS เพื่อติดตั้งร่วมกัน เมื่อใดก็ตามที่คุณมีรายการแพ็คเกจจำนวนมากเพื่อติดตั้งนี่เป็นวิธีที่มีประสิทธิภาพที่สุดในการติดตั้ง
นำสูตรนี้ไปใช้กับ Salt master โดยใช้คำสั่งต่อไปนี้
root@saltmaster:/home/vagrant# salt 'minion2' state.sls websetup
ตอนนี้คุณจะเห็นสิ่งต่อไปนี้ output -
minion2:
----------
ID: websetup
Function: pkg.installed
Result: True
Comment: 3 targeted packages were installed/updated.
Started: 01:50:53.978396
Duration: 86738.132 ms
Changes:
----------
apache2:
----------
new:
2.4.7-1ubuntu4.13
old:
apache2-api-20120211:
----------
new:
1
old:
apache2-bin:
----------
new:
2.4.7-1ubuntu4.13
old:
apache2-data:
----------
new:
2.4.7-1ubuntu4.13
old:
libapache2-mod-php5:
----------
new:
5.5.9+dfsg-1ubuntu4.21
old:
libapr1:
----------
new:
1.5.0-1
old:
libaprutil1:
----------
new:
1.5.3-1
old:
libaprutil1-dbd-sqlite3:
----------
new:
1.5.3-1
old:
libaprutil1-ldap:
----------
new:
1.5.3-1
old:
php5:
----------
new:
5.5.9+dfsg-1ubuntu4.21
old:
php5-cli:
----------
new:
5.5.9+dfsg-1ubuntu4.21
old:
php5-common:
----------
new:
5.5.9+dfsg-1ubuntu4.21
old:
php5-json:
----------
new:
1.3.2-2build1
old:
php5-mhash:
----------
new:
1
old:
php5-mysql:
----------
new:
5.5.9+dfsg-1ubuntu4.21
old:
php5-readline:
----------
new:
5.5.9+dfsg-1ubuntu4.21
old:
phpapi-20121212:
----------
new:
1
old:
ssl-cert:
----------
new:
1.0.33
old:
Summary for minion2
------------
Succeeded: 1 (changed = 1)
Failed: 0
------------
Total states run: 1
Total run time: 86.738 s
ตอนนี้คุณได้ติดตั้งแพ็คเกจใน minion2.
รัฐสูง
“ ไฮสเตท” เป็นวิธีที่เกลือในการพิจารณาว่าสูตรเกลือใดที่ควรใช้กับมินเนี่ยนบางตัว ดำเนินการ“ highstate” โดยใช้คำสั่งต่อไปนี้
root@saltmaster:/home/vagrant# salt <targets> state.highstate
top.sls
เมื่อมินเนี่ยนร้องขอให้เรียกใช้ไฮสเตตตามที่กล่าวไว้ก่อนมินเนี่ยนจะร้องขอ top.sls จาก Salt master และค้นหาสูตรที่ตรง ตามค่าเริ่มต้นไฟล์นี้จะอยู่ที่ /srv/salt/top.sls ให้เราเพิ่มสูตรของเราไปที่ไฟล์ top.sls และตั้งค่า minion2 เป็นเป้าหมาย
base:
'*':
- common
'minion2’:
- websetup
ตอนนี้ดำเนินการ highstate กำหนดเป้าหมาย minion2 ดังที่แสดงด้านล่าง
root@saltmaster:/home/vagrant# salt 'minion2' state.highstate
หลังจากใช้สิ่งนี้คุณจะเห็นสิ่งต่อไปนี้ output -
minion2:
----------
ID: common_packages
Function: pkg.installed
Result: True
Comment: All specified packages are already installed
Started: 01:55:17.998824
Duration: 461.615 ms
Changes:
Summary for minion2
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
Total run time: 461.615 ms
ตอนนี้เว็บเซิร์ฟเวอร์ Apache และ PHP ได้รับการติดตั้งใน minion2 แล้ว ด้วยวิธีนี้เราต้องกำหนดเป้าหมายให้มินเนี่ยนใช้ทั้งสองอย่างtop.sls และ highstate และติดตั้งซอฟต์แวร์ที่ต้องการโดยใช้งานน้อยที่สุดและมีความยืดหยุ่นสูงสุด