OpenShift - คู่มือฉบับย่อ
OpenShift เป็นแพลตฟอร์มการพัฒนาระบบคลาวด์เป็นบริการ (PaaS) ซึ่งโฮสต์โดย Red Hat เป็นแพลตฟอร์มที่ใช้งานง่ายบนคลาวด์โอเพ่นซอร์สที่ใช้ในการสร้างทดสอบและเรียกใช้แอปพลิเคชันและในที่สุดก็ปรับใช้บนคลาวด์
OpenShift สามารถจัดการแอปพลิเคชันที่เขียนด้วยภาษาต่างๆเช่น Node.js, Ruby, Python, Perl และ Java หนึ่งในคุณสมบัติหลักของ OpenShift คือสามารถขยายได้ซึ่งช่วยให้ผู้ใช้รองรับแอปพลิเคชันที่เขียนในภาษาอื่น ๆ
OpenShift มาพร้อมกับแนวคิดต่างๆของการจำลองเสมือนเป็นเลเยอร์นามธรรม แนวคิดพื้นฐานเบื้องหลัง OpenShift นั้นขึ้นอยู่กับการจำลองเสมือน
Virtualization
โดยทั่วไปการจำลองเสมือนสามารถกำหนดได้ว่าเป็นการสร้างระบบเสมือนแทนที่จะเป็นเวอร์ชันจริงหรือเวอร์ชันจริงของสิ่งใดก็ตามที่เริ่มต้นจากระบบหน่วยเก็บข้อมูลหรือระบบปฏิบัติการ เป้าหมายหลักของการจำลองเสมือนคือการทำให้โครงสร้างพื้นฐานไอทีสามารถปรับขนาดได้และเชื่อถือได้มากขึ้น แนวคิดของเวอร์ชวลไลเซชันมีมานานหลายทศวรรษและด้วยวิวัฒนาการของอุตสาหกรรมไอทีในปัจจุบันสามารถนำไปใช้กับเลเยอร์ต่างๆได้ตั้งแต่ระดับระบบระดับฮาร์ดแวร์ไปจนถึงการจำลองเสมือนระดับเซิร์ฟเวอร์
มันทำงานอย่างไร
สามารถอธิบายได้ว่าเป็นเทคโนโลยีที่แอปพลิเคชันหรือระบบปฏิบัติการใด ๆ แยกออกจากเลเยอร์ทางกายภาพจริง การใช้เทคโนโลยีเวอร์ชวลไลเซชันที่สำคัญอย่างหนึ่งคือการจำลองเสมือนของเซิร์ฟเวอร์ซึ่งใช้ซอฟต์แวร์ที่เรียกว่าไฮเปอร์ไวเซอร์เพื่อแยกเลเยอร์ออกจากฮาร์ดแวร์พื้นฐาน ประสิทธิภาพของระบบปฏิบัติการที่ทำงานบนเวอร์ชวลไลเซชั่นนั้นดีพอ ๆ กับเมื่อทำงานบนฮาร์ดแวร์ทางกายภาพ อย่างไรก็ตามแนวคิดของการจำลองเสมือนเป็นที่นิยมเนื่องจากระบบและแอปพลิเคชันส่วนใหญ่ที่ทำงานอยู่ไม่จำเป็นต้องใช้ฮาร์ดแวร์พื้นฐาน
สถาปัตยกรรมทางกายภาพและเสมือนจริง
ประเภทของ Virtualization
Application Virtualization- ในวิธีนี้แอปพลิเคชันจะแยกตัวออกจากระบบปฏิบัติการพื้นฐาน วิธีนี้มีประโยชน์มากในการเรียกใช้แอปพลิเคชันแบบแยกส่วนโดยไม่ขึ้นอยู่กับระบบปฏิบัติการที่อยู่ข้างใต้
Desktop Virtualization- วิธีนี้ใช้เพื่อลดภาระของเวิร์กสเตชันซึ่งสามารถเข้าถึงเดสก์ท็อปจากระยะไกลโดยใช้ไคลเอ็นต์แบบบางที่โต๊ะทำงาน ด้วยวิธีนี้เดสก์ท็อปส่วนใหญ่จะทำงานในดาต้าเซ็นเตอร์ ตัวอย่างคลาสสิกอาจเป็น Virtual Desktop Image (VDI) ซึ่งใช้ในองค์กรส่วนใหญ่
Data Virtualization - เป็นวิธีการสรุปและหลีกหนีจากวิธีการดั้งเดิมของข้อมูลและการจัดการข้อมูล
Server Virtualization- ในวิธีนี้ทรัพยากรที่เกี่ยวข้องกับเซิร์ฟเวอร์จะถูกจำลองเสมือนซึ่งรวมถึงเซิร์ฟเวอร์ทางกายภาพกระบวนการและระบบปฏิบัติการ ซอฟต์แวร์ที่เปิดใช้งานนามธรรมนี้มักเรียกว่าไฮเปอร์ไวเซอร์
Storage Virtualization - เป็นกระบวนการรวมอุปกรณ์จัดเก็บข้อมูลหลายเครื่องไว้ในอุปกรณ์จัดเก็บข้อมูลเดียวที่จัดการจากคอนโซลกลางเดียว
Network Virtualization - เป็นวิธีการที่ทรัพยากรเครือข่ายที่มีอยู่ทั้งหมดจะถูกรวมเข้าด้วยกันโดยการแยกแบนด์วิดท์และแชนเนลที่มีอยู่ซึ่งแต่ละช่องจะไม่แยกจากกัน
OpenShift
OpenShift เป็นแพลตฟอร์มแอปพลิเคชันที่เปิดใช้งานระบบคลาวด์เป็นบริการ (PaaS) เป็นเทคโนโลยีโอเพ่นซอร์สที่ช่วยให้องค์กรย้ายโครงสร้างพื้นฐานและแพลตฟอร์มแอปพลิเคชันแบบเดิมจากสื่อเสมือนจริงไปยังระบบคลาวด์
OpenShift รองรับแอปพลิเคชันที่หลากหลายซึ่งสามารถพัฒนาและปรับใช้บนแพลตฟอร์มคลาวด์ OpenShift ได้อย่างง่ายดาย OpenShift โดยทั่วไปรองรับแพลตฟอร์มสามประเภทสำหรับนักพัฒนาและผู้ใช้
โครงสร้างพื้นฐานเป็นบริการ (IaaS)
ในรูปแบบนี้ผู้ให้บริการจัดเตรียมเครื่องเสมือนระดับฮาร์ดแวร์พร้อมกับการกำหนดค่าฮาร์ดแวร์เสมือนที่กำหนดไว้ล่วงหน้าบางส่วน มีคู่แข่งหลายรายในพื้นที่นี้เริ่มจาก AWS Google cloud, Rackspace และอื่น ๆ อีกมากมาย
ข้อเสียเปรียบหลักของการมี IaaS หลังจากขั้นตอนการติดตั้งและการลงทุนที่ยาวนานคือหนึ่งยังคงรับผิดชอบในการติดตั้งและบำรุงรักษาระบบปฏิบัติการและแพ็คเกจเซิร์ฟเวอร์การจัดการเครือข่ายโครงสร้างพื้นฐานและดูแลการดูแลระบบขั้นพื้นฐาน
ซอฟต์แวร์เป็นบริการ (SaaS)
ด้วย SaaS สิ่งหนึ่งที่มีความกังวลน้อยที่สุดเกี่ยวกับโครงสร้างพื้นฐานพื้นฐาน มันง่ายเหมือนปลั๊กแอนด์เพลย์ซึ่งผู้ใช้เพียงแค่สมัครใช้บริการและเริ่มใช้งาน ข้อเสียเปรียบหลักของการตั้งค่านี้คือเราสามารถปรับแต่งได้เพียงเล็กน้อยเท่านั้นซึ่งได้รับอนุญาตจากผู้ให้บริการ หนึ่งในตัวอย่างที่พบบ่อยที่สุดของ SaaS คือ Gmail ซึ่งผู้ใช้เพียงแค่ต้องเข้าสู่ระบบและเริ่มใช้งาน ผู้ใช้ยังสามารถทำการแก้ไขเล็กน้อยในบัญชีของเขาได้ อย่างไรก็ตามมันไม่มีประโยชน์มากนักจากมุมมองของผู้พัฒนา
แพลตฟอร์มเป็นบริการ (PaaS)
ถือได้ว่าเป็นชั้นกลางระหว่าง SaaS และ IaaS เป้าหมายหลักของการประเมิน PaaS คือสำหรับนักพัฒนาที่สามารถหมุนสภาพแวดล้อมการพัฒนาได้ด้วยคำสั่งไม่กี่คำสั่ง สภาพแวดล้อมเหล่านี้ได้รับการออกแบบมาเพื่อให้สามารถตอบสนองความต้องการในการพัฒนาทั้งหมดได้ตั้งแต่การมีเว็บแอปพลิเคชันเซิร์ฟเวอร์ที่มีฐานข้อมูล ในการดำเนินการนี้คุณต้องใช้คำสั่งเดียวจากนั้นผู้ให้บริการจะดำเนินการให้คุณ
ทำไมต้องใช้ OpenShift
OpenShift เป็นแพลตฟอร์มทั่วไปสำหรับหน่วยงานระดับองค์กรในการโฮสต์แอปพลิเคชันบนคลาวด์โดยไม่ต้องกังวลเกี่ยวกับระบบปฏิบัติการพื้นฐาน ทำให้ใช้งานพัฒนาและปรับใช้แอปพลิเคชันบนคลาวด์ได้ง่ายมาก คุณสมบัติหลักประการหนึ่งคือมีฮาร์ดแวร์ที่มีการจัดการและทรัพยากรเครือข่ายสำหรับการพัฒนาและการทดสอบทุกประเภท ด้วย OpenShift นักพัฒนา PaaS มีอิสระในการออกแบบสภาพแวดล้อมที่ต้องการพร้อมข้อกำหนด
OpenShift ให้ข้อตกลงระดับการบริการที่แตกต่างกันเมื่อพูดถึงแผนการบริการ
Free - แผนนี้ จำกัด ไว้ที่สามปีโดยมีพื้นที่ 1GB ต่อคน
Bronze - แผนนี้รวม 3 ปีและขยายได้ถึง 16 ปีพร้อมพื้นที่ 1GB ต่อปี
Sliver - นี่คือแผนทองสัมฤทธิ์ 16 ปี แต่มีความจุ 6GB โดยไม่มีค่าใช้จ่ายเพิ่มเติม
นอกเหนือจากคุณสมบัติข้างต้นแล้ว OpenShift ยังมีเวอร์ชันในองค์กรที่เรียกว่า OpenShift Enterprise ใน OpenShift นักพัฒนามีประโยชน์ในการออกแบบแอปพลิเคชันที่ปรับขนาดได้และไม่สามารถปรับขนาดได้และการออกแบบเหล่านี้จะนำไปใช้โดยใช้เซิร์ฟเวอร์ HAproxy
คุณสมบัติ
OpenShift รองรับคุณสมบัติหลายอย่าง มีไม่กี่คน -
- รองรับหลายภาษา
- รองรับหลายฐานข้อมูล
- ระบบตลับที่ขยายได้
- การจัดการเวอร์ชันซอร์สโค้ด
- การปรับใช้ด้วยคลิกเดียว
- การสนับสนุนหลายสภาพแวดล้อม
- ขั้นตอนการทำงานของนักพัฒนาที่ได้มาตรฐาน
- การพึ่งพาและการจัดการการสร้าง
- การปรับขนาดแอปพลิเคชันอัตโนมัติ
- คอนโซลเว็บที่ตอบสนอง
- Rich Command-line Toolset
- SSH ระยะไกลเข้าสู่แอปพลิเคชัน
- รองรับ API ที่เหลือ
- กองแอปพลิเคชันตามความต้องการแบบบริการตนเอง
- บริการฐานข้อมูลในตัว
- การผสานรวมและการจัดการรีลีสอย่างต่อเนื่อง
- การรวม IDE
- การดีบักแอปพลิเคชันจากระยะไกล
OpenShift เกิดขึ้นจากฐานที่ชื่อ OpenShift V2 ซึ่งส่วนใหญ่ขึ้นอยู่กับแนวคิดของปีและตลับหมึกโดยที่ส่วนประกอบแต่ละส่วนมีข้อกำหนดเริ่มตั้งแต่การสร้างเครื่องจักรจนถึงการปรับใช้แอปพลิเคชันตั้งแต่การสร้างจนถึงการปรับใช้แอปพลิเคชัน
Cartridges - เป็นจุดโฟกัสของการสร้างแอปพลิเคชันใหม่โดยเริ่มจากประเภทของแอปพลิเคชันที่สภาพแวดล้อมต้องการเพื่อเรียกใช้และการอ้างอิงทั้งหมดที่เป็นไปตามในส่วนนี้
year- สามารถกำหนดเป็นเครื่องโลหะหมีหรือเซิร์ฟเวอร์ที่มีข้อกำหนดบางประการเกี่ยวกับทรัพยากรหน่วยความจำและ CPU พวกเขาถือเป็นหน่วยพื้นฐานสำหรับการเรียกใช้แอปพลิเคชัน
Application - สิ่งเหล่านี้อ้างถึงแอปพลิเคชันหรือแอปพลิเคชันการรวมใด ๆ ที่จะติดตั้งและทำงานบนสภาพแวดล้อม OpenShift
เมื่อเราลงลึกในส่วนนี้เราจะพูดคุยเกี่ยวกับรูปแบบและข้อเสนอต่างๆของ OpenShift ในช่วงก่อนหน้านี้ OpenShift มีสามเวอร์ชันหลัก ๆ
OpenShift Origin- นี่คือการเพิ่มชุมชนหรือ OpenShift เวอร์ชันโอเพ่นซอร์ส เป็นที่รู้จักกันในชื่อโครงการต้นน้ำสำหรับอีกสองเวอร์ชัน
OpenShift Online - เป็น PaaS pubic เป็นบริการที่โฮสต์บน AWS
OpenShift Enterprise - เป็น OpenShift เวอร์ชันชุบแข็งพร้อม ISV และใบอนุญาตผู้ขาย
OpenShift ออนไลน์
OpenShift online เป็นข้อเสนอของชุมชน OpenShift โดยใช้ซึ่งสามารถสร้างปรับใช้และปรับขนาดแอปพลิเคชันที่มีคอนเทนเนอร์บนคลาวด์สาธารณะได้อย่างรวดเร็ว เป็นแพลตฟอร์มการพัฒนาแอปพลิเคชันระบบคลาวด์สาธารณะและโฮสติ้งของ Red Hat ซึ่งเปิดใช้งานการจัดเตรียมการจัดการและการปรับขนาดแอปพลิเคชันโดยอัตโนมัติซึ่งช่วยให้นักพัฒนามุ่งเน้นไปที่การเขียนตรรกะของแอปพลิเคชัน
การตั้งค่าบัญชีบน Red Hat OpenShift Online
Step 1 - ไปที่เบราว์เซอร์และเยี่ยมชมเว็บไซต์ https://manage.openshift.com/
Step 2 - หากคุณมีบัญชี Red Hat ให้ลงชื่อเข้าใช้บัญชี OpenShift โดยใช้รหัสเข้าสู่ระบบ Red Hat และรหัสผ่านโดยใช้ URL ต่อไปนี้ https://developers.redhat.com
Step 3 - หากคุณไม่มีการเข้าสู่ระบบบัญชี Red Hat ให้สมัครใช้บริการออนไลน์ OpenShift โดยใช้ลิงก์ต่อไปนี้
https://developers.redhat.com/auth/realms/rhd/login-actions/registration?code=G4w-myLd3GCH_QZCqMUmIOQlU7DIf_gfIvGu38nnzZQ.cb229a9d-3cff-4c58-b7f6-7b2c9eb17926
หลังจากเข้าสู่ระบบคุณจะเห็นหน้าต่อไปนี้
เมื่อคุณมีทุกอย่างเรียบร้อยแล้ว Red Hat จะแสดงรายละเอียดบัญชีพื้นฐานดังที่แสดงในภาพหน้าจอต่อไปนี้
สุดท้ายเมื่อคุณเข้าสู่ระบบคุณจะพบหน้าต่อไปนี้
แพลตฟอร์มคอนเทนเนอร์ OpenShift
แพลตฟอร์มคอนเทนเนอร์ OpenShift เป็นแพลตฟอร์มระดับองค์กรที่ช่วยให้หลายทีมเช่นทีมพัฒนาและทีมปฏิบัติการด้านไอทีสร้างและปรับใช้โครงสร้างพื้นฐานแบบคอนเทนเนอร์ คอนเทนเนอร์ทั้งหมดที่สร้างขึ้นใน OpenShift ใช้เทคโนโลยี Docker containerization ที่เชื่อถือได้มากซึ่งสามารถปรับใช้บนศูนย์ข้อมูลใดก็ได้ของแพลตฟอร์มคลาวด์ที่โฮสต์แบบสาธารณะ
แพลตฟอร์มคอนเทนเนอร์ OpenShift เป็นที่รู้จักอย่างเป็นทางการในชื่อ OpenShift Enterprises เป็นแพลตฟอร์มส่วนตัวในสถานที่ของ Red Hat เป็นบริการที่สร้างขึ้นจากแนวคิดหลักของแอปพลิเคชันคอนเทนเนอร์ที่ขับเคลื่อนโดย Docker ซึ่ง Kubernetes จัดการการควบคุมและการดูแลระบบ
กล่าวอีกนัยหนึ่ง OpenShift นำ Docker และ Kubernetes มารวมกันในระดับองค์กร เป็นซอฟต์แวร์แพลตฟอร์มคอนเทนเนอร์สำหรับหน่วยงานองค์กรในการปรับใช้และจัดการผู้สมัครในโครงสร้างพื้นฐานที่เลือกเอง ตัวอย่างเช่นการโฮสต์อินสแตนซ์ OpenShift บนอินสแตนซ์ AWS
แพลตฟอร์มคอนเทนเนอร์ OpenShift มีให้บริการใน two package levels.
OpenShift Container Local- สำหรับนักพัฒนาที่ต้องการปรับใช้และทดสอบแอปพลิเคชันบนเครื่องท้องถิ่น แพ็คเกจนี้ส่วนใหญ่ใช้โดยทีมพัฒนาในการพัฒนาและทดสอบแอปพลิเคชัน
OpenShift Container Lab - ออกแบบมาสำหรับการประเมินแอปพลิเคชันแบบขยายตั้งแต่การพัฒนาจนถึงการปรับใช้ไปจนถึงสภาพแวดล้อมก่อนการผลิต
OpenShift เฉพาะ
นี่เป็นอีกหนึ่งข้อเสนอที่เพิ่มเข้ามาในพอร์ตโฟลิโอของ OpenShift ซึ่งมีทางเลือกของลูกค้าในการโฮสต์แพลตฟอร์มคอนเทนเนอร์บนคลาวด์สาธารณะที่พวกเขาเลือก สิ่งนี้ทำให้ผู้ใช้สัมผัสได้ถึงข้อเสนอแบบมัลติคลาวด์ที่แท้จริงซึ่งพวกเขาสามารถใช้ OpenShift บนคลาวด์ใดก็ได้ที่ตรงกับความต้องการของพวกเขา
นี่เป็นหนึ่งในข้อเสนอใหม่ล่าสุดของ Red Hat ที่ผู้ใช้ปลายทางสามารถใช้ OpenShift เพื่อสร้างการทดสอบการปรับใช้และเรียกใช้แอปพลิเคชันของตนบน OpenShift ซึ่งโฮสต์บนคลาวด์
คุณสมบัติของ OpenShift เฉพาะ
OpenShift ทุ่มเทนำเสนอแพลตฟอร์มแอปพลิเคชันโซลูชันที่กำหนดเองบนคลาวด์สาธารณะและสืบทอดมาจากเทคโนโลยี OpenShift 3
Extensible and Open - สิ่งนี้สร้างขึ้นจากแนวคิดแบบเปิดของ Docker และนำไปใช้บนคลาวด์เนื่องจากสามารถใช้จ่ายเองได้ตามต้องการและเมื่อจำเป็น
Portability - เนื่องจากสร้างขึ้นโดยใช้ Docker แอปพลิเคชันที่ทำงานบน Docker สามารถจัดส่งจากที่หนึ่งไปยังอีกที่หนึ่งได้อย่างง่ายดายโดยรองรับ Docker
Orchestration - ด้วย OpenShift 3 หนึ่งในคุณสมบัติหลักของการจัดระเบียบคอนเทนเนอร์และการจัดการคลัสเตอร์ได้รับการสนับสนุนโดยใช้ Kubernetes ซึ่งมาพร้อมกับ OpenShift เวอร์ชัน 3
Automation - OpenShift เวอร์ชันนี้เปิดใช้งานด้วยคุณสมบัติของการจัดการซอร์สโค้ดการสร้างระบบอัตโนมัติและการปรับใช้อัตโนมัติซึ่งทำให้เป็นที่นิยมอย่างมากในตลาดในฐานะแพลตฟอร์มในฐานะผู้ให้บริการ
คู่แข่งของ OpenShift
Google App Engine- นี่คือแพลตฟอร์มฟรีของ Google สำหรับการพัฒนาและโฮสต์แอปพลิเคชันเว็บ แอปเอ็นจิ้นของ Google นำเสนอแพลตฟอร์มการพัฒนาและการปรับใช้ที่รวดเร็ว
Microsoft Azure - Azure cloud โฮสต์โดย Microsoft บนศูนย์ข้อมูลของตน
Amazon Elastic Cloud Compute - เป็นบริการในตัวที่ให้บริการโดย Amazon ซึ่งช่วยในการพัฒนาและโฮสต์แอปพลิเคชันเว็บที่ปรับขนาดได้บนคลาวด์
Cloud Foundry - เป็นแพลตฟอร์ม PaaS แบบโอเพ่นซอร์สสำหรับแอปพลิเคชัน Java, Ruby, Python และ Node.js
CloudStack - CloudStack ของ Apache เป็นโครงการที่พัฒนาโดย Citrix และได้รับการออกแบบมาเพื่อเป็นคู่แข่งโดยตรงของ OpenShift และ OpenStack
OpenStack - เทคโนโลยีคลาวด์อื่นที่ Red Hat จัดเตรียมไว้สำหรับการประมวลผลแบบคลาวด์
Kubernetes - เป็นเทคโนโลยีการจัดการโดยตรงและการจัดการคลัสเตอร์ที่สร้างขึ้นเพื่อจัดการคอนเทนเนอร์ Docker
OpenShift เป็นระบบเลเยอร์โดยแต่ละเลเยอร์จะถูกผูกไว้อย่างแน่นหนากับเลเยอร์อื่นโดยใช้คลัสเตอร์ Kubernetes และ Docker สถาปัตยกรรมของ OpenShift ได้รับการออกแบบให้สามารถรองรับและจัดการคอนเทนเนอร์ Docker ซึ่งโฮสต์อยู่ด้านบนของเลเยอร์ทั้งหมดโดยใช้ Kubernetes ซึ่งแตกต่างจาก OpenShift V2 เวอร์ชันก่อนหน้าคือ OpenShift V3 เวอร์ชันใหม่รองรับโครงสร้างพื้นฐานแบบคอนเทนเนอร์ ในรุ่นนี้ Docker ช่วยในการสร้างคอนเทนเนอร์ที่ใช้ Linux ที่มีน้ำหนักเบาและ Kubernetes รองรับงานในการจัดเตรียมและจัดการคอนเทนเนอร์บนโฮสต์หลาย ๆ โฮสต์
ส่วนประกอบของ OpenShift
องค์ประกอบหลักอย่างหนึ่งของสถาปัตยกรรม OpenShift คือการจัดการโครงสร้างพื้นฐานแบบคอนเทนเนอร์ใน Kubernetes Kubernetes รับผิดชอบการปรับใช้และการจัดการโครงสร้างพื้นฐาน ในคลัสเตอร์ Kubernetes เราสามารถมีโหนดหลักมากกว่าหนึ่งโหนดและหลายโหนดได้ซึ่งจะช่วยให้มั่นใจได้ว่าไม่มีจุดล้มเหลวในการตั้งค่า
Kubernetes Master Machine Components
Etcd- จัดเก็บข้อมูลการกำหนดค่าซึ่งแต่ละโหนดในคลัสเตอร์สามารถใช้ได้ เป็นที่เก็บค่าคีย์ที่มีความพร้อมใช้งานสูงซึ่งสามารถกระจายไปตามโหนดต่างๆได้ เซิร์ฟเวอร์ Kubernetes API ควรเข้าถึงได้เท่านั้นเนื่องจากอาจมีข้อมูลที่ละเอียดอ่อน เป็นที่เก็บค่าคีย์แบบกระจายซึ่งทุกคนสามารถเข้าถึงได้
API Server- Kubernetes เป็นเซิร์ฟเวอร์ API ที่ให้การดำเนินการทั้งหมดในคลัสเตอร์โดยใช้ API เซิร์ฟเวอร์ API ใช้อินเทอร์เฟซซึ่งหมายความว่าเครื่องมือและไลบรารีต่างๆสามารถสื่อสารกับมันได้อย่างง่ายดาย kubeconfig เป็นแพ็คเกจพร้อมกับเครื่องมือฝั่งเซิร์ฟเวอร์ที่สามารถใช้สำหรับการสื่อสาร มันแสดง Kubernetes API”
Controller Manager- ส่วนประกอบนี้มีหน้าที่รับผิดชอบต่อนักสะสมส่วนใหญ่ที่ควบคุมสถานะของคลัสเตอร์และปฏิบัติงาน ถือได้ว่าเป็น daemon ที่รันในลูปแบบไม่สิ้นสุดและมีหน้าที่รวบรวมและส่งข้อมูลไปยังเซิร์ฟเวอร์ API ทำงานเพื่อรับสถานะที่ใช้ร่วมกันของคลัสเตอร์จากนั้นทำการเปลี่ยนแปลงเพื่อนำสถานะปัจจุบันของเซิร์ฟเวอร์ไปสู่สถานะที่ต้องการ ตัวควบคุมที่สำคัญ ได้แก่ ตัวควบคุมการจำลองตัวควบคุมปลายทางตัวควบคุมเนมสเปซและตัวควบคุมบัญชีบริการ ตัวจัดการคอนโทรลเลอร์เรียกใช้คอนโทรลเลอร์ประเภทต่างๆเพื่อจัดการกับโหนดปลายทางและอื่น ๆ
Scheduler- เป็นองค์ประกอบหลักของ Kubernetes master เป็นบริการหลักที่รับผิดชอบในการกระจายภาระงาน มีหน้าที่ติดตามการใช้ภาระงานบนโหนดคลัสเตอร์จากนั้นวางภาระงานที่ทรัพยากรที่มีอยู่และยอมรับปริมาณงาน กล่าวอีกนัยหนึ่งนี่คือกลไกที่รับผิดชอบในการจัดสรรพ็อดให้กับโหนดที่มีอยู่ ตัวกำหนดตารางเวลารับผิดชอบการใช้งานเวิร์กโหลดและจัดสรรพ็อดไปยังโหนดใหม่
ส่วนประกอบโหนด Kubernetes
ต่อไปนี้เป็นองค์ประกอบหลักของเซิร์ฟเวอร์โหนดซึ่งจำเป็นในการสื่อสารกับ Kubernetes ต้นแบบ
Docker - ข้อกำหนดแรกของแต่ละโหนดคือ Docker ซึ่งช่วยในการเรียกใช้คอนเทนเนอร์แอ็พพลิเคชันที่ห่อหุ้มในสภาพแวดล้อมการทำงานที่ค่อนข้างแยก แต่มีน้ำหนักเบา
Kubelet Service- นี่คือบริการเล็ก ๆ ในแต่ละโหนดซึ่งมีหน้าที่ในการถ่ายทอดข้อมูลไปยังและจากบริการเครื่องบินควบคุม มันโต้ตอบกับ etcd store เพื่ออ่านรายละเอียดการกำหนดค่าและค่าไรท์ สิ่งนี้สื่อสารกับคอมโพเนนต์หลักเพื่อรับคำสั่งและทำงาน จากนั้นกระบวนการ kubelet จะรับผิดชอบในการรักษาสถานะการทำงานและโหนดเซิร์ฟเวอร์ จัดการกฎเครือข่ายการส่งต่อพอร์ต ฯลฯ
Kubernetes Proxy Service- นี่คือบริการพร็อกซีที่ทำงานบนแต่ละโหนดและช่วยในการทำให้บริการพร้อมใช้งานสำหรับโฮสต์ภายนอก ช่วยในการส่งต่อคำขอแก้ไขตู้คอนเทนเนอร์ Kubernetes Proxy Service สามารถดำเนินการโหลดบาลานซ์แบบดั้งเดิมได้ ตรวจสอบให้แน่ใจว่าสภาพแวดล้อมเครือข่ายสามารถคาดเดาได้และสามารถเข้าถึงได้ แต่ในขณะเดียวกันก็แยกได้เช่นกัน มันจัดการพ็อดบนโหนดไดรฟ์ข้อมูลความลับสร้างการตรวจสอบความสมบูรณ์ของคอนเทนเนอร์ใหม่ ฯลฯ
Integrated OpenShift Container Registry
รีจิสทรีคอนเทนเนอร์ OpenShift เป็นหน่วยเก็บข้อมูลในตัวของ Red Hat ซึ่งใช้สำหรับจัดเก็บอิมเมจ Docker ด้วย OpenShift เวอร์ชันรวมล่าสุดมันได้มาพร้อมกับอินเทอร์เฟซผู้ใช้เพื่อดูภาพในที่จัดเก็บข้อมูลภายใน OpenShift รีจิสเตอร์เหล่านี้สามารถเก็บรูปภาพที่มีแท็กที่ระบุซึ่งจะใช้ในการสร้างคอนเทนเนอร์จากนั้นในภายหลัง
ข้อกำหนดที่ใช้บ่อย
Image- อิมเมจ Kubernetes (Docker) เป็นส่วนประกอบสำคัญของ Containerized Infrastructure ณ ตอนนี้ Kubernetes รองรับเฉพาะอิมเมจ Docker เท่านั้น คอนเทนเนอร์แต่ละอันในพ็อดจะมีอิมเมจ Docker ทำงานอยู่ข้างใน เมื่อกำหนดค่าพ็อดคุณสมบัติรูปภาพในไฟล์คอนฟิกูเรชันจะมีไวยากรณ์เหมือนกับคำสั่ง Docker
Project - สามารถกำหนดเป็นเวอร์ชันที่เปลี่ยนชื่อของโดเมนซึ่งมีอยู่ใน OpenShift V2 เวอร์ชันก่อนหน้า
Container - เป็นภาพที่สร้างขึ้นหลังจากใช้งานอิมเมจบนโหนดคลัสเตอร์ Kubernetes
Node- โหนดเป็นเครื่องจักรที่ทำงานในคลัสเตอร์ Kubernetes ซึ่งเรียกอีกอย่างว่า minion for master เป็นหน่วยงานที่สามารถเป็นอินสแตนซ์จริง VM หรือคลาวด์
Pod- พ็อดคือชุดของคอนเทนเนอร์และที่เก็บข้อมูลภายในโหนดของคลัสเตอร์ Kubernetes เป็นไปได้ที่จะสร้างพ็อดที่มีภาชนะหลายอันอยู่ข้างใน ตัวอย่างเช่นการเก็บคอนเทนเนอร์ฐานข้อมูลและคอนเทนเนอร์เว็บเซิร์ฟเวอร์ไว้ในพ็อด
ในบทนี้เราจะเรียนรู้เกี่ยวกับการตั้งค่าสภาพแวดล้อมของ OpenShift
ความต้องการของระบบ
ในการตั้งค่า OpenShift ขององค์กรเราจำเป็นต้องมีบัญชี Red Hat ที่ใช้งานได้ เนื่องจาก OpenShift ทำงานบนสถาปัตยกรรมหลักและโหนดของ Kubernetes เราจึงจำเป็นต้องตั้งค่าทั้งสองอย่างบนเครื่องแยกกันโดยเครื่องหนึ่งทำหน้าที่เป็นหลักและทำงานอื่น ๆ บนโหนด ในการตั้งค่าทั้งสองอย่างมีข้อกำหนดขั้นต่ำของระบบ
การกำหนดค่าเครื่องหลัก
ต่อไปนี้เป็นข้อกำหนดขั้นต่ำของระบบสำหรับการกำหนดค่าเครื่องหลัก
เครื่องฐานที่โฮสต์บนทางกายภาพเสมือนหรือบนสภาพแวดล้อมคลาวด์ใด ๆ
อย่างน้อย Linux 7 พร้อมแพ็กเกจที่จำเป็นบนอินสแตนซ์นั้น
2 แกน CPU
RAM อย่างน้อย 8 GB
หน่วยความจำฮาร์ดดิสก์ภายใน 30 GB
การกำหนดค่าเครื่องโหนด
- อิมเมจพื้นฐานทางกายภาพหรือเสมือนตามที่กำหนดสำหรับเครื่องต้นแบบ
- อย่างน้อย Linux 7 บนเครื่อง
- นักเทียบท่าที่ติดตั้งรุ่นไม่ต่ำกว่า 1.6
- 1 แกน CPU
- แรม 8 GB
- ฮาร์ดดิสก์ 15 GB สำหรับโฮสต์ภาพและ 15 GB สำหรับจัดเก็บภาพ
คำแนะนำทีละขั้นตอนในการตั้งค่า OpenShift
ในคำอธิบายต่อไปนี้เราจะตั้งค่าสภาพแวดล้อมของห้องปฏิบัติการ OpenShift ซึ่งสามารถขยายไปยังคลัสเตอร์ที่ใหญ่ขึ้นได้ในภายหลัง เนื่องจาก OpenShift ต้องการการตั้งค่าหลักและโหนดเราจึงจำเป็นต้องมีอย่างน้อยสองเครื่องที่โฮสต์บนคลาวด์เครื่องจริงหรือเครื่องเสมือน
Step 1- ก่อนอื่นให้ติดตั้ง Linux บนทั้งสองเครื่องโดยที่ Linux 7 ควรเป็นเวอร์ชันที่น้อยที่สุด สามารถทำได้โดยใช้คำสั่งต่อไปนี้หากมีการสมัครสมาชิก Red Hat ที่ใช้งานอยู่
# subscription-manager repos --disable = "*"
# subscription-manager repos --enable = "rhel-7-server-rpms"
# subscription-manager repos --enable = "rhel-7-server-extras-rpms"
# subscription-manager repos --enable = "rhel-7-server-optional-rpms"
# subscription-manager repos --enable = "rhel-7-server-ose-3.0-rpms"
# yum install wget git net-tools bind-utils iptables-services bridge-utils
# yum install wget git net-tools bind-utils iptables-services bridge-utils
# yum install python-virtualenv
# yum install gcc
# yum install httpd-tools
# yum install docker
# yum update
เมื่อเราติดตั้งแพ็กเกจพื้นฐานทั้งหมดข้างต้นในทั้งสองเครื่องแล้วขั้นตอนต่อไปคือการตั้งค่า Docker บนเครื่องที่เกี่ยวข้อง
Step 2- กำหนดค่า Docker เพื่อให้สามารถสื่อสารที่ไม่ปลอดภัยบนเครือข่ายท้องถิ่นเท่านั้น สำหรับสิ่งนี้ให้แก้ไขไฟล์ Docker ภายใน / etc / sysconfig หากไม่มีไฟล์อยู่คุณต้องสร้างด้วยตนเอง
# vi /etc/sysconfig/docker
OPTIONS = --selinux-enabled --insecure-registry 192.168.122.0/24
หลังจากกำหนดค่า Docker บนเครื่องหลักแล้วเราจำเป็นต้องตั้งค่าการสื่อสารแบบไม่ใช้รหัสผ่านระหว่างเครื่องทั้งสอง สำหรับสิ่งนี้เราจะใช้การตรวจสอบสิทธิ์คีย์สาธารณะและส่วนตัว
Step 3 - สร้างคีย์บนเครื่องหลักจากนั้นคัดลอกคีย์ id_rsa.pub ไปยังไฟล์คีย์ที่ได้รับอนุญาตของเครื่องโหนดซึ่งสามารถทำได้โดยใช้คำสั่งต่อไปนี้
# ssh-keygen
# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
เมื่อคุณตั้งค่าทั้งหมดข้างต้นเรียบร้อยแล้วขั้นต่อไปคือการตั้งค่า OpenShift เวอร์ชัน 3 บนเครื่องหลัก
Step 4 - จากเครื่องต้นแบบให้เรียกใช้คำสั่ง curl ต่อไปนี้
# sh <(curl -s https://install.openshift.com/ose)
คำสั่งดังกล่าวจะวางการตั้งค่าสำหรับ OSV3 ขั้นตอนต่อไปคือการกำหนดค่า OpenShift V3 บนเครื่อง
หากคุณไม่สามารถดาวน์โหลดจากอินเทอร์เน็ตได้โดยตรงก็สามารถดาวน์โหลดได้จาก https://install.openshift.com/portable/oo-install-ose.tgz เป็นแพ็กเกจ tar ที่โปรแกรมติดตั้งสามารถรันบนเครื่องหลักภายในเครื่อง
เมื่อเรามีการตั้งค่าพร้อมแล้วเราต้องเริ่มต้นด้วยการกำหนดค่าจริงของ OSV3 บนเครื่อง การตั้งค่านี้มีความเฉพาะเจาะจงมากเพื่อทดสอบสภาพแวดล้อมสำหรับการผลิตจริงเรามี LDAP และสิ่งอื่น ๆ
Step 5 - บนเครื่องต้นแบบกำหนดค่ารหัสต่อไปนี้ที่อยู่ภายใต้ /etc/openshift/master/master-config.yaml
# vi /etc/openshift/master/master-config.yaml
identityProviders:
- name: my_htpasswd_provider
challenge: true
login: true
provider:
apiVersion: v1
kind: HTPasswdPasswordIdentityProvider
file: /root/users.htpasswd
routingConfig:
subdomain: testing.com
จากนั้นสร้างผู้ใช้มาตรฐานสำหรับการดูแลระบบเริ่มต้น
# htpasswd -c /root/users.htpasswd admin
Step 6- เนื่องจาก OpenShift ใช้ Docker Registry ในการกำหนดค่ารูปภาพเราจึงจำเป็นต้องกำหนดค่ารีจิสทรีของ Docker ใช้สำหรับสร้างและจัดเก็บอิมเมจ Docker หลังจากสร้าง
สร้างไดเร็กทอรีบนเครื่องโหนด OpenShift โดยใช้คำสั่งต่อไปนี้
# mkdir /images
จากนั้นเข้าสู่เครื่องหลักโดยใช้ข้อมูลประจำตัวของผู้ดูแลระบบเริ่มต้นซึ่งสร้างขึ้นขณะตั้งค่ารีจิสทรี
# oc login
Username: system:admin
เปลี่ยนเป็นโปรเจ็กต์ที่สร้างตามค่าเริ่มต้น
# oc project default
Step 7 - สร้าง Docker Registry
#echo '{"kind":"ServiceAccount","apiVersion":"v1","metadata":{"name":"registry"}}' | oc create -f -
แก้ไขสิทธิ์ของผู้ใช้
#oc edit scc privileged
users:
- system:serviceaccount:openshift-infra:build-controller
- system:serviceaccount:default:registry
สร้างและแก้ไขรีจิสตรีรูปภาพ
#oadm registry --service-account = registry --
config = /etc/openshift/master/admin.kubeconfig --
credentials = /etc/openshift/master/openshift-registry.kubeconfig --
images = 'registry.access.redhat.com/openshift3/ose-${component}:${version}' --
mount-host = /images
Step 8 - สร้างเส้นทางเริ่มต้น
ตามค่าเริ่มต้น OpenShift ใช้ OpenVswitch เป็นเครือข่ายซอฟต์แวร์ ใช้คำสั่งต่อไปนี้เพื่อสร้างการกำหนดเส้นทางเริ่มต้น ใช้สำหรับการทำโหลดบาลานซ์และการกำหนดเส้นทางพร็อกซี เราเตอร์คล้ายกับรีจิสทรีของนักเทียบท่าและยังทำงานในรีจิสทรีด้วย
# echo '{"kind":"ServiceAccount","apiVersion":"v1","metadata":{"name":"router"}}' | oc create -f -
จากนั้นแก้ไขสิทธิ์ของผู้ใช้
#oc edit scc privileged
users:
- system:serviceaccount:openshift-infra:build-controller
- system:serviceaccount:default:registry
- system:serviceaccount:default:router
#oadm router router-1 --replicas = 1 --
credentials = '/etc/openshift/master/openshift-router.kubeconfig' --
images = 'registry.access.redhat.com/openshift3/ose-${component}:${version}'
Step 9 - กำหนดค่า DNS
ในการจัดการคำขอ URL OpenShift ต้องการสภาพแวดล้อม DNS ที่ใช้งานได้ จำเป็นต้องมีการกำหนดค่า DNS นี้เพื่อสร้างไวด์การ์ดซึ่งจำเป็นสำหรับการสร้างไวลด์การ์ด DNS ที่ชี้ไปที่เราเตอร์
# yum install bind-utils bind
# systemctl start named
# systemctl enable named
vi /etc/named.conf
options {listen-on port 53 { 10.123.55.111; };
forwarders {
10.38.55.13;
;
};
zone "lab.com" IN {
type master;
file "/var/named/dynamic/test.com.zone";
allow-update { none; };
};
Step 10- ขั้นตอนสุดท้ายคือการตั้งค่าเซิร์ฟเวอร์ github บนเครื่องต้นแบบ OpenShift V3 ซึ่งเป็นทางเลือก สามารถทำได้อย่างง่ายดายโดยใช้ลำดับคำสั่งต่อไปนี้
#yum install curl openssh-server
#systemctl enable sshd
# systemctl start sshd
# firewall-cmd --permanent --add-service = http
# systemctl reload firewalld
#curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-
#yum install gitlab-ce
# gitlab-ctl reconfigure
เมื่อการตั้งค่าด้านบนเสร็จสมบูรณ์คุณสามารถตรวจสอบได้โดยการทดสอบและปรับใช้แอปพลิเคชันซึ่งเราจะทราบข้อมูลเพิ่มเติมในบทต่อ ๆ ไป
ก่อนที่จะเริ่มการตั้งค่าและการปรับใช้แอปพลิเคชันจริงเราจำเป็นต้องเข้าใจคำศัพท์และแนวคิดพื้นฐานบางประการที่ใช้ใน OpenShift V3
ภาชนะและรูปภาพ
รูปภาพ
สิ่งเหล่านี้เป็นส่วนประกอบพื้นฐานของ OpenShift ซึ่งประกอบขึ้นจากอิมเมจ Docker ในแต่ละพ็อดบน OpenShift คลัสเตอร์จะมีอิมเมจของตัวเองที่ทำงานอยู่ภายใน เมื่อเรากำหนดค่าพ็อดเราจะมีฟิลด์ที่จะรวบรวมจากรีจิสทรี ไฟล์คอนฟิกูเรชันนี้จะดึงอิมเมจและปรับใช้บนโหนดคลัสเตอร์
apiVersion: v1
kind: pod
metadata:
name: Tesing_for_Image_pull -----------> Name of Pod
spec:
containers:
- name: neo4j-server ------------------------> Name of the image
image: <Name of the Docker image>----------> Image to be pulled
imagePullPolicy: Always ------------->Image pull policy
command: [“echo”, “SUCCESS”] -------------------> Massage after image pull
ในการดึงและสร้างภาพออกมาให้เรียกใช้คำสั่งต่อไปนี้ OC เป็นไคลเอนต์ในการสื่อสารกับสภาพแวดล้อม OpenShift หลังจากเข้าสู่ระบบ
$ oc create –f Tesing_for_Image_pull
คอนเทนเนอร์
สิ่งนี้ถูกสร้างขึ้นเมื่ออิมเมจ Docker ถูกปรับใช้บนคลัสเตอร์ OpenShift ในขณะที่กำหนดการกำหนดค่าใด ๆ เรากำหนดส่วนคอนเทนเนอร์ในไฟล์กำหนดค่า คอนเทนเนอร์เดียวสามารถมีหลายภาพทำงานอยู่ภายในและคอนเทนเนอร์ทั้งหมดที่ทำงานบนโหนดคลัสเตอร์ได้รับการจัดการโดย OpenShift Kubernetes
spec:
containers:
- name: py ------------------------> Name of the container
image: python----------> Image going to get deployed on container
command: [“python”, “SUCCESS”]
restartPocliy: Never --------> Restart policy of container
ต่อไปนี้เป็นข้อกำหนดสำหรับการกำหนดคอนเทนเนอร์ที่มีรูปภาพหลายรูปทำงานอยู่ภายใน
apiVersion: v1
kind: Pod
metadata:
name: Tomcat
spec:
containers:
- name: Tomcat
image: tomcat: 8.0
ports:
- containerPort: 7500
imagePullPolicy: Always
-name: Database
Image: mongoDB
Ports:
- containerPort: 7501
imagePullPolicy: Always
ในการกำหนดค่าข้างต้นเราได้กำหนดพ็อดหลายคอนเทนเนอร์ที่มีภาพ Tomcat และ MongoDB สองภาพอยู่ภายใน
พ็อดและบริการ
พ็อด
Pod สามารถกำหนดเป็นคอลเล็กชันของคอนเทนเนอร์และที่เก็บข้อมูลภายในโหนดของคลัสเตอร์ OpenShift (Kubernetes) โดยทั่วไปเรามีพ็อดสองประเภทโดยเริ่มจากพ็อดคอนเทนเนอร์เดียวไปจนถึงพ็อดหลายคอนเทนเนอร์
Single Container Pod - สิ่งเหล่านี้สามารถสร้างได้อย่างง่ายดายด้วยคำสั่ง OC หรือโดยไฟล์ yml การกำหนดค่าพื้นฐาน
$ oc run <name of pod> --image = <name of the image from registry>
สร้างด้วยไฟล์ yaml ง่ายๆดังนี้
apiVersion: v1
kind: Pod
metadata:
name: apache
spec:
containers:
- name: apache
image: apache: 8.0
ports:
- containerPort: 7500
imagePullPolicy: Always
เมื่อสร้างไฟล์ด้านบนแล้วไฟล์จะสร้างพ็อดด้วยคำสั่งต่อไปนี้
$ oc create –f apache.yml
Multi-Container Pod- พ็อดหลายคอนเทนเนอร์คือพ็อดที่เรามีคอนเทนเนอร์มากกว่าหนึ่งตู้ที่ทำงานอยู่ภายในนั้น สร้างขึ้นโดยใช้ไฟล์ yaml ดังต่อไปนี้
apiVersion: v1
kind: Pod
metadata:
name: Tomcat
spec:
containers:
- name: Tomcat
image: tomcat: 8.0
ports:
- containerPort: 7500
imagePullPolicy: Always
-name: Database
Image: mongoDB
Ports:
- containerPort: 7501
imagePullPolicy: Always
หลังจากสร้างไฟล์เหล่านี้แล้วเราสามารถใช้วิธีเดียวกับด้านบนเพื่อสร้างคอนเทนเนอร์
Service- เนื่องจากเรามีชุดคอนเทนเนอร์ที่ทำงานอยู่ภายในพ็อดในทำนองเดียวกันเราจึงมีบริการที่สามารถกำหนดเป็นชุดพ็อดเชิงตรรกะได้ เป็นเลเยอร์นามธรรมที่ด้านบนของพ็อดซึ่งมีชื่อ IP และ DNS เดียวที่สามารถเข้าถึงพ็อดได้ บริการช่วยในการจัดการการกำหนดค่าการจัดสรรภาระงานและปรับขนาดพ็อดได้อย่างง่ายดาย ใน OpenShift เซอร์วิสคืออ็อบเจ็กต์ REST ซึ่งสามารถโพสต์ deification ไปยัง apiService บน OpenShift master เพื่อสร้างอินสแตนซ์ใหม่
apiVersion: v1
kind: Service
metadata:
name: Tutorial_point_service
spec:
ports:
- port: 8080
targetPort: 31999
สร้างและสตรีม
สร้าง
ใน OpenShift บิลด์เป็นกระบวนการเปลี่ยนรูปภาพเป็นคอนเทนเนอร์ เป็นการประมวลผลที่แปลงซอร์สโค้ดเป็นรูปภาพ กระบวนการสร้างนี้ทำงานบนกลยุทธ์ที่กำหนดไว้ล่วงหน้าในการสร้างซอร์สโค้ดเป็นรูปภาพ
การสร้างประมวลผลกลยุทธ์และแหล่งที่มาต่างๆ
สร้างกลยุทธ์
Source to Image- โดยพื้นฐานแล้วเป็นเครื่องมือที่ช่วยในการสร้างภาพที่ทำซ้ำได้ อิมเมจเหล่านี้อยู่ในขั้นตอนที่พร้อมสำหรับการรันโดยใช้คำสั่ง Docker run เสมอ
Docker Build - นี่คือกระบวนการที่สร้างภาพโดยใช้ไฟล์ Docker โดยเรียกใช้คำสั่ง Docker build แบบง่าย
Custom Build - นี่คืองานสร้างที่ใช้สำหรับสร้างอิมเมจ Docker พื้นฐาน
สร้างแหล่งที่มา
Git- แหล่งที่มานี้ถูกใช้เมื่อใช้ที่เก็บ git สำหรับการสร้างอิมเมจ Dockerfile เป็นทางเลือก การกำหนดค่าจากซอร์สโค้ดมีลักษณะดังต่อไปนี้
source:
type: "Git"
git:
uri: "https://github.com/vipin/testing.git"
ref: "master"
contextDir: "app/dir"
dockerfile: "FROM openshift/ruby-22-centos7\nUSER example"
Dockerfile - Dockerfile ใช้เป็นอินพุตในไฟล์กำหนดค่า
source:
type: "Dockerfile"
dockerfile: "FROM ubuntu: latest
RUN yum install -y httpd"
Image Streams- สตรีมภาพถูกสร้างขึ้นหลังจากดึงภาพ ข้อได้เปรียบของสตรีมรูปภาพคือการค้นหาการอัปเดตเกี่ยวกับเวอร์ชันใหม่ของรูปภาพ ใช้เพื่อเปรียบเทียบอิมเมจคอนเทนเนอร์ที่จัดรูปแบบ Docker จำนวนเท่าใดก็ได้ที่ระบุโดยแท็ก
สตรีมรูปภาพสามารถดำเนินการได้โดยอัตโนมัติเมื่อสร้างภาพใหม่ การสร้างและการปรับใช้ทั้งหมดสามารถรับชมการทำงานของภาพและดำเนินการตามนั้น ต่อไปนี้เป็นวิธีที่เรากำหนดสร้างสตรีม
apiVersion: v1
kind: ImageStream
metadata:
annotations:
openshift.io/generated-by: OpenShiftNewApp
generation: 1
labels:
app: ruby-sample-build
selflink: /oapi/v1/namespaces/test/imagestreams/origin-ruby-sample
uid: ee2b9405-c68c-11e5-8a99-525400f25e34
spec: {}
status:
dockerImageRepository: 172.30.56.218:5000/test/origin-ruby-sample
tags:
- items:
- created: 2016-01-29T13:40:11Z
dockerImageReference: 172.30.56.218:5000/test/origin-apache-sample
generation: 1
image: vklnld908.int.clsa.com/vipin/test
tag: latest
เส้นทางและเทมเพลต
เส้นทาง
ใน OpenShift การกำหนดเส้นทางเป็นวิธีการเปิดเผยบริการไปยังโลกภายนอกโดยการสร้างและกำหนดค่าชื่อโฮสต์ที่เข้าถึงได้จากภายนอก เส้นทางและจุดสิ้นสุดถูกใช้เพื่อเปิดเผยบริการสู่โลกภายนอกซึ่งผู้ใช้สามารถใช้ชื่อการเชื่อมต่อ (DNS) เพื่อเข้าถึงแอปพลิเคชันที่กำหนด
ใน OpenShift เส้นทางถูกสร้างขึ้นโดยใช้เราเตอร์ที่ปรับใช้โดยผู้ดูแลระบบ OpenShift บนคลัสเตอร์ เราเตอร์ใช้เพื่อผูกพอร์ต HTTP (80) และ https (443) กับแอปพลิเคชันภายนอก
ต่อไปนี้เป็นโปรโตคอลประเภทต่างๆที่เส้นทางรองรับ -
- HTTP
- HTTPS
- TSL และเว็บซ็อกเก็ต
เมื่อกำหนดค่าบริการตัวเลือกจะใช้เพื่อกำหนดค่าบริการและค้นหาจุดสิ้นสุดโดยใช้บริการนั้น ต่อไปนี้เป็นตัวอย่างวิธีที่เราสร้างบริการและการกำหนดเส้นทางสำหรับบริการนั้นโดยใช้โปรโตคอลที่เหมาะสม
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {"name": "Openshift-Rservice"},
"spec": {
"selector": {"name":"RService-openshift"},
"ports": [
{
"protocol": "TCP",
"port": 8888,
"targetPort": 8080
}
]
}
}
จากนั้นรันคำสั่งต่อไปนี้และบริการจะถูกสร้างขึ้น
$ oc create -f ~/training/content/Openshift-Rservice.json
นี่คือลักษณะของบริการหลังการสร้าง
$ oc describe service Openshift-Rservice
Name: Openshift-Rservice
Labels: <none>
Selector: name = RService-openshift
Type: ClusterIP
IP: 172.30.42.80
Port: <unnamed> 8080/TCP
Endpoints: <none>
Session Affinity: None
No events.
สร้างเส้นทางสำหรับบริการโดยใช้รหัสต่อไปนี้
{
"kind": "Route",
"apiVersion": "v1",
"metadata": {"name": "Openshift-service-route"},
"spec": {
"host": "hello-openshift.cloudapps.example.com",
"to": {
"kind": "Service",
"name": "OpenShift-route-service"
},
"tls": {"termination": "edge"}
}
}
เมื่อใช้คำสั่ง OC เพื่อสร้างเส้นทางระบบจะสร้างอินสแตนซ์ใหม่ของทรัพยากรเส้นทาง
เทมเพลต
เทมเพลตถูกกำหนดให้เป็นวัตถุมาตรฐานใน OpenShift ซึ่งสามารถใช้ได้หลายครั้ง มีการกำหนดพารามิเตอร์ด้วยรายการตัวยึดตำแหน่งซึ่งใช้ในการสร้างวัตถุหลายชิ้น สิ่งนี้สามารถใช้เพื่อสร้างอะไรก็ได้ตั้งแต่พ็อดไปจนถึงระบบเครือข่ายซึ่งผู้ใช้มีสิทธิ์ในการสร้าง สามารถสร้างรายการออบเจ็กต์ได้หากเทมเพลตจากอินเทอร์เฟซ CLI หรือ GUI ในอิมเมจถูกอัปโหลดไปยังไดเร็กทอรีโปรเจ็กต์
apiVersion: v1
kind: Template
metadata:
name: <Name of template>
annotations:
description: <Description of Tag>
iconClass: "icon-redis"
tags: <Tages of image>
objects:
- apiVersion: v1
kind: Pod
metadata:
name: <Object Specification>
spec:
containers:
image: <Image Name>
name: master
ports:
- containerPort: <Container port number>
protocol: <Protocol>
labels:
redis: <Communication Type>
การรับรองความถูกต้องและการอนุญาต
การรับรองความถูกต้อง
ใน OpenShift ในขณะที่กำหนดค่าโครงสร้างหลักและไคลเอ็นต์ต้นแบบจะมาพร้อมกับคุณสมบัติที่สร้างขึ้นของเซิร์ฟเวอร์ OAuth เซิร์ฟเวอร์ OAuth ใช้สำหรับสร้างโทเค็นซึ่งใช้สำหรับการตรวจสอบสิทธิ์กับ API เนื่องจาก OAuth มาเป็นการตั้งค่าเริ่มต้นสำหรับต้นแบบเราจึงมีการใช้ผู้ให้บริการข้อมูลประจำตัวอนุญาตทั้งหมดโดยค่าเริ่มต้น มีผู้ให้บริการข้อมูลประจำตัวที่แตกต่างกันซึ่งสามารถกำหนดค่าได้ที่/etc/openshift/master/master-config.yaml.
มีผู้ให้บริการข้อมูลประจำตัวประเภทต่างๆที่มีอยู่ใน OAuth
- อนุญาตทั้งหมด
- ปฏิเสธทั้งหมด
- HTPasswd
- LDAP
- การรับรองความถูกต้องขั้นพื้นฐาน
อนุญาตทั้งหมด
apiVersion: v1
kind: Pod
metadata:
name: redis-master
spec:
containers:
image: dockerfile/redis
name: master
ports:
- containerPort: 6379
protocol: TCP
oauthConfig:
identityProviders:
- name: my_allow_provider
challenge: true
login: true
provider:
apiVersion: v1
kind: AllowAllPasswordIdentityProvider
ปฏิเสธทั้งหมด
apiVersion: v1
kind: Pod
metadata:
name: redis-master
spec:
containers:
image: dockerfile/redis
name: master
ports:
- containerPort: 6379
protocol: TCP
oauthConfig:
identityProviders:
- name: my_allow_provider
challenge: true
login: true
provider:
apiVersion: v1
kind: DenyAllPasswordIdentityProvider
HTPasswd
ในการใช้ HTPasswd เราต้องตั้งค่า Httpd-tools บนเครื่องหลักก่อนจากนั้นกำหนดค่าในลักษณะเดียวกับที่เราทำกับผู้อื่น
identityProviders:
- name: my_htpasswd_provider
challenge: true
login: true
provider:
apiVersion: v1
kind: HTPasswdPasswordIdentityProvider
การอนุญาต
การอนุญาตเป็นคุณสมบัติของ OpenShift master ซึ่งใช้ในการตรวจสอบความถูกต้องของผู้ใช้ ซึ่งหมายความว่าจะตรวจสอบผู้ใช้ที่พยายามดำเนินการเพื่อดูว่าผู้ใช้ได้รับอนุญาตให้ดำเนินการกับโปรเจ็กต์นั้น ๆ หรือไม่ สิ่งนี้ช่วยให้ผู้ดูแลระบบสามารถควบคุมการเข้าถึงโครงการ
นโยบายการอนุญาตถูกควบคุมโดยใช้ -
- Rules
- Roles
- Bindings
การประเมินการอนุญาตทำได้โดยใช้ -
- Identity
- Action
- Bindings
การใช้นโยบาย -
- นโยบายคลัสเตอร์
- นโยบายท้องถิ่น
OpenShift ประกอบด้วยค่ามัธยฐานสองประเภทในการสร้างและปรับใช้แอปพลิเคชันโดย GUI หรือ CLI ในบทนี้เราจะใช้ CLI เพื่อสร้างแอปพลิเคชันใหม่ เราจะใช้ไคลเอนต์ OC เพื่อสื่อสารกับสภาพแวดล้อม OpenShift
การสร้างแอปพลิเคชันใหม่
ใน OpenShift มีสามวิธีในการสร้างแอปพลิเคชันใหม่
- จากซอร์สโค้ด
- จากรูปภาพ
- จากเทมเพลต
จากซอร์สโค้ด
เมื่อเราพยายามสร้างแอปพลิเคชันจากซอร์สโค้ด OpenShift จะค้นหาไฟล์ Docker ที่ควรอยู่ใน repo ซึ่งกำหนดขั้นตอนการสร้างแอปพลิเคชัน เราจะใช้ oc new-app เพื่อสร้างแอปพลิเคชัน
สิ่งแรกที่ควรคำนึงถึงในขณะที่ใช้ repo คือควรชี้ไปที่จุดเริ่มต้นใน repo จากที่ OpenShift จะดึงรหัสและสร้างขึ้น
หาก repo ถูกโคลนบนเครื่อง Docker ที่ติดตั้งไคลเอนต์ OC และผู้ใช้อยู่ในไดเร็กทอรีเดียวกันก็สามารถสร้างได้โดยใช้คำสั่งต่อไปนี้
$ oc new-app . <Hear. Denotes current working directory>
ต่อไปนี้เป็นตัวอย่างของการพยายามสร้างจาก repo ระยะไกลสำหรับสาขาเฉพาะ
$ oc new-app https://github.com/openshift/Testing-deployment.git#test1
ที่นี่ test1 เป็นสาขาที่เราพยายามสร้างแอปพลิเคชันใหม่ใน OpenShift
เมื่อระบุไฟล์ Docker ในที่เก็บเราจำเป็นต้องกำหนดกลยุทธ์การสร้างดังที่แสดงด้านล่าง
$ oc new-app OpenShift/OpenShift-test~https://github.com/openshift/Testingdeployment.git
จากรูปภาพ
ในขณะที่สร้างแอปพลิเคชันโดยใช้รูปภาพรูปภาพจะปรากฏในเซิร์ฟเวอร์ Docker ในเครื่องในที่เก็บ Docker ที่โฮสต์ภายในหรือบนฮับ Docker สิ่งเดียวที่ผู้ใช้ต้องแน่ใจคือเขาสามารถเข้าถึงเพื่อดึงภาพจากฮับได้โดยไม่มีปัญหาใด ๆ
OpenShift มีความสามารถในการกำหนดแหล่งที่มาที่ใช้ไม่ว่าจะเป็นอิมเมจ Docker หรือสตรีมต้นทาง อย่างไรก็ตามหากผู้ใช้ต้องการเขาสามารถระบุได้อย่างชัดเจนว่าเป็นสตรีมรูปภาพหรืออิมเมจ Docker
$ oc new-app - - docker-image tomcat
การใช้สตรีมรูปภาพ -
$ oc new-app tomcat:v1
จากเทมเพลต
สามารถใช้เทมเพลตสำหรับการสร้างแอปพลิเคชันใหม่ อาจเป็นเทมเพลตที่มีอยู่แล้วหรือสร้างเทมเพลตใหม่
ไฟล์ yaml ต่อไปนี้เป็นเทมเพลตที่สามารถใช้สำหรับการปรับใช้
apiVersion: v1
kind: Template
metadata:
name: <Name of template>
annotations:
description: <Description of Tag>
iconClass: "icon-redis"
tags: <Tages of image>
objects:
- apiVersion: v1
kind: Pod
metadata:
name: <Object Specification>
spec:
containers:
image: <Image Name>
name: master
ports:
- containerPort: <Container port number>
protocol: <Protocol>
labels:
redis: <Communication Type>
พัฒนาและปรับใช้โปรแกรมประยุกต์บนเว็บ
การพัฒนาแอปพลิเคชันใหม่ใน OpenShift
ในการสร้างแอปพลิเคชันใหม่ใน OpenShift เราต้องเขียนโค้ดแอปพลิเคชันใหม่และสร้างโดยใช้คำสั่งสร้าง OpenShift OC ตามที่กล่าวไว้เรามีหลายวิธีในการสร้างภาพใหม่ ที่นี่เราจะใช้เทมเพลตเพื่อสร้างแอปพลิเคชัน เทมเพลตนี้จะสร้างแอปพลิเคชันใหม่เมื่อรันด้วยคำสั่ง oc new-app
เทมเพลตต่อไปนี้จะสร้างขึ้น - แอปพลิเคชันส่วนหน้าสองรายการและฐานข้อมูลเดียว นอกจากนั้นจะสร้างบริการใหม่สองบริการและแอปพลิเคชันเหล่านั้นจะถูกปรับใช้กับคลัสเตอร์ OpenShift ในขณะที่สร้างและปรับใช้แอปพลิเคชันในขั้นต้นเราต้องสร้างเนมสเปซใน OpenShift และปรับใช้แอปพลิเคชันภายใต้เนมสเปซนั้น
Create a new namespace
$ oc new-project openshift-test --display-name = "OpenShift 3 Sample" --
description = "This is an example project to demonstrate OpenShift v3"
เทมเพลต
{
"kind": "Template",
"apiVersion": "v1",
"metadata": {
"name": "openshift-helloworld-sample",
"creationTimestamp": null,
"annotations": {
"description": "This example shows how to create a simple openshift
application in openshift origin v3",
"iconClass": "icon-openshift",
"tags": "instant-app,openshift,mysql"
}
}
},
คำจำกัดความของวัตถุ
Secret definition in a template
"objects": [
{
"kind": "Secret",
"apiVersion": "v1",
"metadata": {"name": "dbsecret"},
"stringData" : {
"mysql-user" : "${MYSQL_USER}",
"mysql-password" : "${MYSQL_PASSWORD}"
}
},
Service definition in a template
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "frontend",
"creationTimestamp": null
},
"spec": {
"ports": [
{
"name": "web",
"protocol": "TCP",
"port": 5432,
"targetPort": 8080,
"nodePort": 0
}
],
"selector": {"name": "frontend"},
"type": "ClusterIP",
"sessionAffinity": "None"
},
"status": {
"loadBalancer": {}
}
},
Route definition in a template
{
"kind": "Route",
"apiVersion": "v1",
"metadata": {
"name": "route-edge",
"creationTimestamp": null,
"annotations": {
"template.openshift.io/expose-uri": "http://{.spec.host}{.spec.path}"
}
},
"spec": {
"host": "www.example.com",
"to": {
"kind": "Service",
"name": "frontend"
},
"tls": {
"termination": "edge"
}
},
"status": {}
},
{
"kind": "ImageStream",
"apiVersion": "v1",
"metadata": {
"name": "origin-openshift-sample",
"creationTimestamp": null
},
"spec": {},
"status": {
"dockerImageRepository": ""
}
},
{
"kind": "ImageStream",
"apiVersion": "v1",
"metadata": {
"name": "openshift-22-ubuntu7",
"creationTimestamp": null
},
"spec": {
"dockerImageRepository": "ubuntu/openshift-22-ubuntu7"
},
"status": {
"dockerImageRepository": ""
}
},
Build config definition in a template
{
"kind": "BuildConfig",
"apiVersion": "v1",
"metadata": {
"name": "openshift-sample-build",
"creationTimestamp": null,
"labels": {name": "openshift-sample-build"}
},
"spec": {
"triggers": [
{ "type": "GitHub",
"github": {
"secret": "secret101" }
},
{
"type": "Generic",
"generic": {
"secret": "secret101",
"allowEnv": true }
},
{
"type": "ImageChange",
"imageChange": {}
},
{ "type": "ConfigChange”}
],
"source": {
"type": "Git",
"git": {
"uri": https://github.com/openshift/openshift-hello-world.git }
},
"strategy": {
"type": "Docker",
"dockerStrategy": {
"from": {
"kind": "ImageStreamTag",
"name": "openshift-22-ubuntu7:latest”
},
"env": [
{
"name": "EXAMPLE",
"value": "sample-app"
}
]
}
},
"output": {
"to": {
"kind": "ImageStreamTag",
"name": "origin-openshift-sample:latest"
}
},
"postCommit": {
"args": ["bundle", "exec", "rake", "test"]
},
"status": {
"lastVersion": 0
}
}
},
Deployment config in a template
"status": {
"lastVersion": 0
}
{
"kind": "DeploymentConfig",
"apiVersion": "v1",
"metadata": {
"name": "frontend",
"creationTimestamp": null
}
},
"spec": {
"strategy": {
"type": "Rolling",
"rollingParams": {
"updatePeriodSeconds": 1,
"intervalSeconds": 1,
"timeoutSeconds": 120,
"pre": {
"failurePolicy": "Abort",
"execNewPod": {
"command": [
"/bin/true"
],
"env": [
{
"name": "CUSTOM_VAR1",
"value": "custom_value1"
}
]
}
}
}
}
}
"triggers": [
{
"type": "ImageChange",
"imageChangeParams": {
"automatic": true,
"containerNames": [
"openshift-helloworld"
],
"from": {
"kind": "ImageStreamTag",
"name": "origin-openshift-sample:latest"
}
}
},
{
"type": "ConfigChange"
}
],
"replicas": 2,
"selector": {
"name": "frontend"
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"name": "frontend"
}
},
"spec": {
"containers": [
{
"name": "openshift-helloworld",
"image": "origin-openshift-sample",
"ports": [
{
"containerPort": 8080,
"protocol": "TCP”
}
],
"env": [
{
"name": "MYSQL_USER",
"valueFrom": {
"secretKeyRef" : {
"name" : "dbsecret",
"key" : "mysql-user"
}
}
},
{
"name": "MYSQL_PASSWORD",
"valueFrom": {
"secretKeyRef" : {
"name" : "dbsecret",
"key" : "mysql-password"
}
}
},
{
"name": "MYSQL_DATABASE",
"value": "${MYSQL_DATABASE}"
}
],
"resources": {},
"terminationMessagePath": "/dev/termination-log",
"imagePullPolicy": "IfNotPresent",
"securityContext": {
"capabilities": {},
"privileged": false
}
}
],
"restartPolicy": "Always",
"dnsPolicy": "ClusterFirst"
},
"status": {}
},
Service definition in a template
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "database",
"creationTimestamp": null
},
"spec": {
"ports": [
{
"name": "db",
"protocol": "TCP",
"port": 5434,
"targetPort": 3306,
"nodePort": 0
}
],
"selector": {
"name": "database
},
"type": "ClusterIP",
"sessionAffinity": "None" },
"status": {
"loadBalancer": {}
}
},
Deployment config definition in a template
{
"kind": "DeploymentConfig",
"apiVersion": "v1",
"metadata": {
"name": "database",
"creationTimestamp": null
},
"spec": {
"strategy": {
"type": "Recreate",
"resources": {}
},
"triggers": [
{
"type": "ConfigChange"
}
],
"replicas": 1,
"selector": {"name": "database"},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {"name": "database"}
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"name": "database"
}
},
"spec": {
"containers": [
{
"name": "openshift-helloworld-database",
"image": "ubuntu/mysql-57-ubuntu7:latest",
"ports": [
{
"containerPort": 3306,
"protocol": "TCP"
}
],
"env": [
{
"name": "MYSQL_USER",
"valueFrom": {
"secretKeyRef" : {
"name" : "dbsecret",
"key" : "mysql-user"
}
}
},
{
"name": "MYSQL_PASSWORD",
"valueFrom": {
"secretKeyRef" : {
"name" : "dbsecret",
"key" : "mysql-password"
}
}
},
{
"name": "MYSQL_DATABASE",
"value": "${MYSQL_DATABASE}"
}
],
"resources": {},
"volumeMounts": [
{
"name": "openshift-helloworld-data",
"mountPath": "/var/lib/mysql/data"
}
],
"terminationMessagePath": "/dev/termination-log",
"imagePullPolicy": "Always",
"securityContext": {
"capabilities": {},
"privileged": false
}
}
],
"volumes": [
{
"name": "openshift-helloworld-data",
"emptyDir": {"medium": ""}
}
],
"restartPolicy": "Always",
"dnsPolicy": "ClusterFirst”
}
}
},
"status": {}
},
"parameters": [
{
"name": "MYSQL_USER",
"description": "database username",
"generate": "expression",
"from": "user[A-Z0-9]{3}",
"required": true
},
{
"name": "MYSQL_PASSWORD",
"description": "database password",
"generate": "expression",
"from": "[a-zA-Z0-9]{8}",
"required": true
},
{
"name": "MYSQL_DATABASE",
"description": "database name",
"value": "root",
"required": true
}
],
"labels": {
"template": "application-template-dockerbuild"
}
}
ต้องรวบรวมไฟล์เทมเพลตด้านบนพร้อมกัน ก่อนอื่นเราต้องคัดลอกเนื้อหาทั้งหมดลงในไฟล์เดียวและตั้งชื่อเป็นไฟล์ yaml เมื่อเสร็จแล้ว
เราต้องเรียกใช้คำสั่งต่อไปนี้เพื่อสร้างแอปพลิเคชัน
$ oc new-app application-template-stibuild.json
--> Deploying template openshift-helloworld-sample for "application-template-stibuild.json"
openshift-helloworld-sample
---------
This example shows how to create a simple ruby application in openshift origin v3
* With parameters:
* MYSQL_USER = userPJJ # generated
* MYSQL_PASSWORD = cJHNK3se # generated
* MYSQL_DATABASE = root
--> Creating resources with label app = ruby-helloworld-sample ...
service "frontend" created
route "route-edge" created
imagestream "origin-ruby-sample" created
imagestream "ruby-22-centos7" created
buildconfig "ruby-sample-build" created
deploymentconfig "frontend" created
service "database" created
deploymentconfig "database" created
--> Success
Build scheduled, use 'oc logs -f bc/ruby-sample-build' to track its progress.
Run 'oc status' to view your app.
หากเราต้องการตรวจสอบบิลด์สามารถทำได้โดยใช้ -
$ oc get builds
NAME TYPE FROM STATUS STARTED DURATION
openshift-sample-build-1 Source Git@bd94cbb Running 7 seconds ago 7s
เราสามารถตรวจสอบแอปพลิเคชันที่ปรับใช้บน OpenShift โดยใช้ -
$ oc get pods
NAME READY STATUS RESTARTS AGE
database-1-le4wx 1/1 Running 0 1m
frontend-1-e572n 1/1 Running 0 27s
frontend-1-votq4 1/1 Running 0 31s
opeshift-sample-build-1-build 0/1 Completed 0 1m
เราสามารถตรวจสอบได้ว่ามีการสร้างบริการแอปพลิเคชันตามข้อกำหนดของบริการโดยใช้หรือไม่
$ oc get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) SELECTOR AGE
database 172.30.80.39 <none> 5434/TCP name=database 1m
frontend 172.30.17.4 <none> 5432/TCP name=frontend 1m
ใน OpenShift เรามีหลายวิธีในการสร้างไปป์ไลน์โดยอัตโนมัติ ในการดำเนินการดังกล่าวเราจำเป็นต้องสร้างทรัพยากร BuildConfig เพื่ออธิบายขั้นตอนการสร้าง โฟลว์ใน BuildConfig สามารถเปรียบเทียบได้กับนิยามงานในนิยามงานของเจนกินส์ ในขณะที่สร้างขั้นตอนการสร้างเราต้องเลือกกลยุทธ์การสร้าง
ไฟล์ BuildConfig
ใน OpenShift BuildConfig เป็นอ็อบเจ็กต์ที่เหลือที่ใช้เพื่อเชื่อมต่อกับ API แล้วสร้างอินสแตนซ์ใหม่
kind: "BuildConfig"
apiVersion: "v1"
metadata:
name: "<Name of build config file>"
spec:
runPolicy: "Serial"
triggers:
-
type: "GitHub"
github:
secret: "<Secrete file name>"
- type: "Generic"
generic:
secret: "secret101"
-
type: "ImageChange"
source:
type: "<Source of code>"
git:
uri: "https://github.com/openshift/openshift-hello-world"
dockerfile: "FROM openshift/openshift-22-centos7\nUSER example"
strategy:
type: "Source"
sourceStrategy:
from:
kind: "ImageStreamTag"
name: "openshift-20-centos7:latest"
output:
to:
kind: "ImageStreamTag"
name: "origin-openshift-sample:latest"
postCommit:
script: "bundle exec rake test"
ใน OpenShift มีกลยุทธ์การสร้างสี่ประเภท
- กลยุทธ์ต้นทางสู่รูปภาพ
- กลยุทธ์นักเทียบท่า
- กลยุทธ์ที่กำหนดเอง
- กลยุทธ์ท่อ
กลยุทธ์ที่มาสู่ภาพ
อนุญาตให้สร้างอิมเมจคอนเทนเนอร์โดยเริ่มจากซอร์สโค้ด ในขั้นตอนนี้โค้ดจริงจะถูกดาวน์โหลดก่อนในคอนเทนเนอร์จากนั้นจึงรวบรวมไว้ภายใน โค้ดที่คอมไพล์จะถูกปรับใช้ภายในคอนเทนเนอร์เดียวกันและอิมเมจถูกสร้างขึ้นจากโค้ดนั้น
strategy:
type: "Source"
sourceStrategy:
from:
kind: "ImageStreamTag"
name: "builder-image:latest"
forcePull: true
มีนโยบายกลยุทธ์หลายประการ
- Forcepull
- การสร้างที่เพิ่มขึ้น
- งานสร้างภายนอก
กลยุทธ์นักเทียบท่า
ในขั้นตอนนี้ OpenShift ใช้ Dockerfile เพื่อสร้างภาพจากนั้นอัปโหลดภาพที่สร้างขึ้นไปยังรีจิสทรีของ Docker
strategy:
type: Docker
dockerStrategy:
from:
kind: "ImageStreamTag"
name: "ubuntu:latest"
ตัวเลือกไฟล์ Docker สามารถใช้ได้ในหลายตำแหน่งโดยเริ่มจากเส้นทางไฟล์ไม่มีแคชและบังคับดึง
- จากรูปภาพ
- เส้นทาง Dockerfile
- ไม่มีแคช
- แรงดึง
กลยุทธ์ที่กำหนดเอง
นี่เป็นหนึ่งในกลยุทธ์การสร้างที่แตกต่างกันโดยที่ไม่มีการบังคับเช่นนี้ว่าผลลัพธ์ของงานสร้างจะเป็นภาพ เปรียบได้กับงานฟรีสไตล์ของเจนกินส์ ด้วยวิธีนี้เราสามารถสร้าง Jar, rpm และแพ็คเกจอื่น ๆ
strategy:
type: "Custom"
customStrategy:
from:
kind: "DockerImage"
name: "openshift/sti-image-builder"
ประกอบด้วยกลยุทธ์การสร้างหลายแบบ
- เปิดเผยซ็อกเก็ต Docker
- Secrets
- แรงดึง
กลยุทธ์ท่อส่ง
กลยุทธ์ไปป์ไลน์ใช้เพื่อสร้างท่อส่งแบบกำหนดเอง โดยทั่วไปจะใช้เพื่อนำเวิร์กโฟลว์ไปใช้ในท่อ ขั้นตอนการสร้างนี้ใช้ขั้นตอนการสร้างแบบกำหนดเองโดยใช้ภาษา Groovy DSL OpenShift จะสร้างงานไปป์ไลน์ใน Jenkins และดำเนินการ การไหลไปป์ไลน์นี้สามารถใช้ใน Jenkins ในกลยุทธ์นี้เราใช้ Jenkinsfile และต่อท้ายด้วยคำจำกัดความ buildconfig
Strategy:
type: "JenkinsPipeline"
jenkinsPipelineStrategy:
jenkinsfile: "node('agent') {\nstage 'build'\nopenshiftBuild(buildConfig: 'OpenShift-build', showBuildLogs: 'true')\nstage 'deploy'\nopenshiftDeploy(deploymentConfig: 'backend')\n}"
Using build pipeline
kind: "BuildConfig"
apiVersion: "v1"
metadata:
name: "test-pipeline"
spec:
source:
type: "Git"
git:
uri: "https://github.com/openshift/openshift-hello-world"
strategy:
type: "JenkinsPipeline"
jenkinsPipelineStrategy:
jenkinsfilePath: <file path repository>
OpenShift CLI ใช้สำหรับจัดการแอปพลิเคชัน OpenShift จากบรรทัดคำสั่ง OpenShift CLI มีความสามารถในการจัดการวงจรชีวิตของแอปพลิเคชัน end-to-end โดยทั่วไปเราจะใช้ OC ซึ่งเป็นไคลเอนต์ OpenShift เพื่อสื่อสารกับ OpenShift
การตั้งค่า OpenShift CLI
ในการตั้งค่าไคลเอนต์ OC บนระบบปฏิบัติการอื่นเราจำเป็นต้องทำตามลำดับขั้นตอนต่างๆ
OC Client สำหรับ Windows
Step 1 - ดาวน์โหลด oc cli จากลิงค์ต่อไปนี้ https://github.com/openshift/origin/releases/tag/v3.6.0-alpha.2
Step 2 - คลายซิปแพคเกจบนเส้นทางเป้าหมายบนเครื่อง
Step 3 - แก้ไขตัวแปรสภาพแวดล้อมเส้นทางของระบบ
C:\Users\xxxxxxxx\xxxxxxxx>echo %PATH%
C:\oraclexe\app\oracle\product\10.2.0\server\bin;C:\Program Files
(x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Program Files
(x86)\AMD APP\bin\x86_64;C:\Program Files (x86)\AMD APP\bin\x86;
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\
v1.0\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files
(x86)\ATI Technologies\ATI.ACE\C
ore-Static;C:\Program Files\Intel\Intel(R) Management Engine
Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine
Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;
Step 4 - ตรวจสอบการตั้งค่า OC บน Windows
C:\openshift-origin-client-tools-v3.6.0-alpha.2-3c221d5-windows>oc version
oc v3.6.0-alpha.2+3c221d5
kubernetes v1.6.1+5115d708d7
features: Basic-Auth
OC Client สำหรับ Mac OS X
เราสามารถดาวน์โหลดไบนารีการตั้งค่า Mac OS สำหรับตำแหน่งเดียวกับ Windows และคลายซิปในภายหลังที่ตำแหน่งและกำหนดเส้นทางของการปฏิบัติการภายใต้ตัวแปร PATH สภาพแวดล้อม
Alternatively
เราสามารถใช้ Home brew และตั้งค่าได้โดยใช้คำสั่งต่อไปนี้
$ brew install openshift-cli
OC Client สำหรับ Linux
ในหน้าเดียวกันเรามีไฟล์ tar สำหรับการติดตั้ง Linux ที่สามารถใช้สำหรับการติดตั้ง ต่อมาสามารถตั้งค่าตัวแปรพา ธ โดยชี้ไปยังตำแหน่งปฏิบัติการนั้น ๆ
https://github.com/openshift/origin/releases/tag/v3.6.0-alpha.2
คลายไฟล์ tar โดยใช้คำสั่งต่อไปนี้
$ tar –xf < path to the OC setup tar file >
รันคำสั่งต่อไปนี้เพื่อตรวจสอบการพิสูจน์ตัวตน
C:\openshift-origin-client-tools-v3.6.0-alpha.2-3c221d5-windows>oc login
Server [https://localhost:8443]:
ไฟล์คอนฟิกูเรชัน CLI
ไฟล์คอนฟิกูเรชัน OC CLI ใช้สำหรับจัดการการเชื่อมต่อเซิร์ฟเวอร์ OpenShift หลายตัวและกลไกการพิสูจน์ตัวตน ไฟล์คอนฟิกูเรชันนี้ยังใช้สำหรับจัดเก็บและจัดการหลายโปรไฟล์และเพื่อสลับระหว่างโปรไฟล์ ไฟล์คอนฟิกูเรชันปกติมีลักษณะดังต่อไปนี้
$ oc config view
apiVersion: v1
clusters:
- cluster:
server: https://vklnld908.int.example.com
name: openshift
contexts:
- context:
cluster: openshift
namespace: testproject
user: alice
name: alice
current-context: alice
kind: Config
preferences: {}
users:
- name: vipin
user:
token: ZCJKML2365jhdfafsdj797GkjgjGKJKJGjkg232
การตั้งค่าไคลเอนต์ CLI
สำหรับการตั้งค่าข้อมูลรับรองผู้ใช้
$ oc config set-credentials <user_nickname>
[--client-certificate = <path/to/certfile>] [--client-key=<path/to/keyfile>]
[--token = <bearer_token>] [--username = <basic_user>] [--password = <basic_password>]
สำหรับการตั้งค่าคลัสเตอร์
$ oc config set-cluster <cluster_nickname> [--server = <master_ip_or_fqdn>]
[--certificate-authority = <path/to/certificate/authority>]
[--api-version = <apiversion>] [--insecure-skip-tls-verify = true]
ตัวอย่าง
$ oc config set-credentials vipin --token = ZCJKML2365jhdfafsdj797GkjgjGKJKJGjkg232
สำหรับการตั้งค่าบริบท
$ oc config set-context <context_nickname> [--cluster = <cluster_nickname>]
[--user = <user_nickname>] [--namespace = <namespace>]
โปรไฟล์ CLI
ในไฟล์คอนฟิกูเรชัน CLI ไฟล์เดียวเราสามารถมีได้หลายโปรไฟล์โดยแต่ละโปรไฟล์มีการกำหนดค่าเซิร์ฟเวอร์ OpenShift ที่แตกต่างกันซึ่งสามารถใช้ในภายหลังเพื่อสลับระหว่างโปรไฟล์ CLI ที่แตกต่างกัน
apiVersion: v1
clusters: --→ 1
- cluster:
insecure-skip-tls-verify: true
server: https://vklnld908.int.example.com:8443
name: vklnld908.int.example.com:8443
- cluster:
insecure-skip-tls-verify: true
server: https://vklnld1446.int.example.com:8443
name: vklnld1446.int.example.com:8443
contexts: ---→ 2
- context:
cluster: vklnld908.int.example.com:8443
namespace: openshift-project
user: vipin/vklnld908.int.example.com:8443
name: openshift-project/vklnld908.int.example.com:8443/vipin
- context:
cluster: vklnld908.int.example.com:8443
namespace: testing-project
user: alim/vklnld908.int.example.com:8443
name: testproject-project/openshift1/alim
current-context: testing-project/vklnld908.int.example.com:8443/vipin - 3
kind: Config
preferences: {}
users:
- name: vipin/vklnld908.int.example.com:8443
user: ---→ 4
token: ZCJKML2365jhdfafsdj797GkjgjGKJKJGjkg232
ในการกำหนดค่าข้างต้นเราจะเห็นว่ามันแบ่งออกเป็นสี่ส่วนหลักโดยเริ่มจากคลัสเตอร์ซึ่งกำหนดสองอินสแตนซ์ของเครื่องต้นแบบ OpenShift ส่วนบริบทที่สองกำหนดสองบริบทชื่อ vipin และ alim บริบทปัจจุบันกำหนดบริบทที่ใช้อยู่ในปัจจุบัน สามารถเปลี่ยนเป็นบริบทหรือโปรไฟล์อื่นได้หากเราเปลี่ยนคำจำกัดความที่นี่ สุดท้ายนิยามผู้ใช้และโทเค็นการตรวจสอบความถูกต้องถูกกำหนดซึ่งในกรณีของเราคือ vipin
หากต้องการตรวจสอบโปรไฟล์ปัจจุบันที่ใช้งานสามารถทำได้โดยใช้ -
$ oc status oc status In project testing Project (testing-project) $ oc project
Using project "testing-project" from context named "testing-
project/vklnld908.int.example.com:8443/vipin" on server "https://vklnld908.int.example.com:8443".
หากเราต้องการเปลี่ยนไปใช้ CLI อื่นสามารถทำได้จากบรรทัดคำสั่งโดยใช้คำสั่งต่อไปนี้
$ oc project openshift-project
Now using project "Openshift-project" on server "
https://vklnld908.int.example.com:8443".
ใช้คำสั่งด้านบนเราสามารถสลับระหว่างโปรไฟล์ เมื่อใดก็ตามที่เราต้องการดูการกำหนดค่าเราสามารถใช้คำสั่ง $ oc config view
OpenShift CLI สามารถดำเนินการกำหนดค่าพื้นฐานและขั้นสูงการจัดการการเพิ่มเติมและการปรับใช้แอปพลิเคชันทั้งหมด
เราสามารถดำเนินการประเภทต่างๆได้โดยใช้คำสั่ง OC ไคลเอนต์นี้ช่วยคุณพัฒนาสร้างปรับใช้และรันแอปพลิเคชันของคุณบนแพลตฟอร์มใด ๆ ที่เข้ากันได้กับ OpenShift หรือ Kubernetes นอกจากนี้ยังมีคำสั่งการดูแลระบบสำหรับจัดการคลัสเตอร์ภายใต้คำสั่งย่อย "adm"
คำสั่งพื้นฐาน
ตารางต่อไปนี้แสดงรายการคำสั่ง OC พื้นฐาน
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | Types บทนำเกี่ยวกับแนวคิดและประเภท |
2 | Login ล็อกอินเข้าสู่เซิร์ฟเวอร์ |
3 | new-project ขอโครงการใหม่ |
4 | new-app สร้างแอปพลิเคชันใหม่ |
5 | Status แสดงภาพรวมของโครงการปัจจุบัน |
6 | Project เปลี่ยนไปใช้โปรเจ็กต์อื่น |
7 | Projects แสดงโครงการที่มีอยู่ |
8 | Explain เอกสารทรัพยากร |
9 | Cluster เริ่มและหยุดคลัสเตอร์ OpenShift |
เข้าสู่ระบบ
ล็อกอินเข้าสู่เซิร์ฟเวอร์ของคุณและบันทึกล็อกอินเพื่อใช้ในภายหลัง ผู้ใช้ไคลเอ็นต์ครั้งแรกควรรันคำสั่งนี้เพื่อเชื่อมต่อกับเซิร์ฟเวอร์สร้างเซสชันที่พิสูจน์ตัวตนและบันทึกการเชื่อมต่อไปยังไฟล์คอนฟิกูเรชัน การกำหนดค่าเริ่มต้นจะถูกบันทึกลงในโฮมไดเร็กทอรีของคุณภายใต้ ".kube / config"
ข้อมูลที่จำเป็นในการเข้าสู่ระบบเช่นชื่อผู้ใช้และรหัสผ่านโทเค็นเซสชันหรือรายละเอียดเซิร์ฟเวอร์สามารถระบุได้ผ่านแฟล็ก หากไม่ได้ระบุคำสั่งจะแจ้งให้ผู้ใช้ป้อนข้อมูลตามต้องการ
Usage
oc login [URL] [options]
Example
# Log in interactively
oc login
# Log in to the given server with the given certificate authority file
oc login localhost:8443 --certificate-authority = /path/to/cert.crt
# Log in to the given server with the given credentials (will not prompt interactively)
oc login localhost:8443 --username = myuser --password=mypass
ตัวเลือก -
-p, --password = " - รหัสผ่านจะแจ้งหากไม่มีให้
-u, --username = " - ชื่อผู้ใช้จะแจ้งหากไม่ได้ระบุ
--certificate-authority = "- เส้นทางสู่ใบรับรอง ไฟล์สำหรับผู้ออกใบรับรอง
--insecure-skip-tls-verify = false- หากเป็นจริงใบรับรองของเซิร์ฟเวอร์จะไม่ถูกตรวจสอบความถูกต้อง ซึ่งจะทำให้การเชื่อมต่อ HTTPS ของคุณไม่ปลอดภัย
--token = " - โทเค็นผู้ถือสำหรับการรับรองความถูกต้องไปยังเซิร์ฟเวอร์ API
หากต้องการรับรายละเอียดทั้งหมดเกี่ยวกับคำสั่งใด ๆ ให้ใช้ไฟล์ oc <Command Name> --help คำสั่ง
สร้างและปรับใช้คำสั่ง
ตารางต่อไปนี้แสดงรายการคำสั่งสร้างและปรับใช้
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | Rollout จัดการการปรับใช้ Kubernetes หรือการปรับใช้ OpenShift |
2 | Deploy ดูเริ่มต้นยกเลิกหรือลองปรับใช้อีกครั้ง |
3 | Rollback เปลี่ยนบางส่วนของแอปพลิเคชันกลับสู่สถานะก่อนหน้า |
4 | new-build สร้างคอนฟิกูเรชันบิลด์ใหม่ |
5 | start-build เริ่มงานสร้างใหม่ |
6 | cancel-build ยกเลิกการทำงานรอดำเนินการหรืองานสร้างใหม่ |
7 | import-image นำเข้าภาพจาก Docker Registry |
8 | Tag แท็กรูปภาพที่มีอยู่ลงในสตรีมรูปภาพ |
คำสั่งการจัดการแอปพลิเคชัน
ตารางต่อไปนี้แสดงรายการคำสั่งการจัดการแอปพลิเคชัน
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | Get แสดงทรัพยากรหนึ่งหรือหลายรายการ |
2 | Describe แสดงรายละเอียดของทรัพยากรเฉพาะหรือกลุ่มของทรัพยากร |
3 | Edit แก้ไขทรัพยากรบนเซิร์ฟเวอร์ |
4 | Set คำสั่งที่ช่วยตั้งค่าคุณลักษณะเฉพาะบนวัตถุ |
5 | Label อัปเดตป้ายกำกับบนทรัพยากร |
6 | Annotate อัปเดตคำอธิบายประกอบบนทรัพยากร |
7 | Expose แสดงแอปพลิเคชันที่จำลองแบบเป็นบริการหรือเส้นทาง |
8 | Delete ลบทรัพยากรอย่างน้อยหนึ่งรายการ |
9 | Scale เปลี่ยนจำนวนพ็อดในการปรับใช้ |
10 | Autoscale ปรับขนาดการกำหนดค่าการปรับใช้การปรับใช้การจำลองตัวควบคุมหรือชุดแบบจำลองโดยอัตโนมัติ |
11 | Secrets จัดการความลับ |
12 | Serviceaccounts จัดการบัญชีบริการในโครงการของคุณ |
คำสั่งการแก้ไขปัญหาและการดีบัก
ตารางต่อไปนี้แสดงรายการคำสั่งการแก้ไขปัญหาและการดีบัก
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | logs พิมพ์บันทึกสำหรับทรัพยากร |
2 | Rsh เริ่มเซสชันเชลล์ในพ็อด |
3 | Rsync คัดลอกไฟล์ระหว่างระบบไฟล์ภายในและพ็อด |
4 | port-forward ส่งต่อพอร์ตภายในเครื่องอย่างน้อยหนึ่งพอร์ตไปยังพ็อด |
5 | Debug เปิดอินสแตนซ์ใหม่ของพ็อดสำหรับการดีบัก |
6 | Exec ดำเนินการคำสั่งในคอนเทนเนอร์ |
7 | Procy เรียกใช้พร็อกซีไปยังเซิร์ฟเวอร์ Kubernetes API |
9 | Attach แนบกับคอนเทนเนอร์ที่กำลังทำงานอยู่ |
10 | Run เรียกใช้รูปภาพเฉพาะบนคลัสเตอร์ |
11 | Cp คัดลอกไฟล์และไดเรกทอรีไปยังและจากคอนเทนเนอร์ |
คำสั่งขั้นสูง
ตารางต่อไปนี้แสดงรายการคำสั่งขั้นสูง
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | adm เครื่องมือสำหรับจัดการคลัสเตอร์ |
2 | create สร้างทรัพยากรตามชื่อไฟล์หรือ stdin |
3 | replace แทนที่ทรัพยากรด้วยชื่อไฟล์หรือ stdin |
4 | apply ใช้การกำหนดค่ากับทรัพยากรโดยใช้ชื่อไฟล์หรือ stdin |
5 | patch อัปเดตฟิลด์ของทรัพยากรโดยใช้แพตช์ผสานเชิงกลยุทธ์ |
6 | process ประมวลผลเทมเพลตลงในรายการทรัพยากร |
7 | export ส่งออกทรัพยากรเพื่อให้สามารถใช้ที่อื่นได้ |
8 | extract แยกข้อมูลลับหรือกำหนดค่าแมปไปยังดิสก์ |
9 | idle ทรัพยากรที่ปรับขนาดได้ไม่ได้ใช้งาน |
10 | observe สังเกตการเปลี่ยนแปลงของทรัพยากรและตอบสนองต่อสิ่งเหล่านี้ (ทดลอง) |
11 | policy จัดการนโยบายการอนุญาต |
12 | auth ตรวจสอบการอนุญาต |
13 | convert แปลงไฟล์กำหนดค่าระหว่าง API เวอร์ชันต่างๆ |
14 | import คำสั่งที่นำเข้าแอปพลิเคชัน |
การตั้งค่าคำสั่ง
ตารางต่อไปนี้แสดงรายการคำสั่งการตั้งค่า
ซีเนียร์ | คำสั่งและคำอธิบาย |
---|---|
1 | Logout สิ้นสุดเซสชันเซิร์ฟเวอร์ปัจจุบัน |
2 | Config เปลี่ยนไฟล์คอนฟิกูเรชันสำหรับไคลเอนต์ |
3 | Whoami ส่งคืนข้อมูลเกี่ยวกับเซสชันปัจจุบัน |
4 | Completion รหัสเสร็จสิ้นเชลล์เอาต์พุตสำหรับเชลล์ที่ระบุ (bash หรือ zsh) |
OpenShift ใช้วิธีการติดตั้งสองวิธีในการตั้งค่าคลัสเตอร์ OpenShift
- วิธีการติดตั้งอย่างรวดเร็ว
- วิธีการกำหนดค่าขั้นสูง
การตั้งค่าคลัสเตอร์
วิธีการติดตั้งด่วน
วิธีนี้ใช้สำหรับการรันคอนฟิกูเรชันการตั้งค่าคลัสเตอร์อย่างรวดเร็ว ในการใช้วิธีนี้เราต้องติดตั้งตัวติดตั้งก่อน สามารถทำได้โดยรันคำสั่งต่อไปนี้
Interactive method
$ atomic-openshift-installer install
สิ่งนี้มีประโยชน์เมื่อต้องการเรียกใช้การตั้งค่าแบบโต้ตอบ
Unattended installation method
วิธีนี้ใช้เมื่อต้องการตั้งค่าวิธีการติดตั้งโดยไม่ต้องใส่ข้อมูลโดยผู้ใช้สามารถกำหนดไฟล์ yaml การกำหนดค่าและวางไว้ใต้ ~/.config/openshift/ด้วยชื่อของ installer.cfg.yml จากนั้นสามารถรันคำสั่งต่อไปนี้เพื่อติดตั้งไฟล์–u tag.
$ atomic-openshift-installer –u install
โดยค่าเริ่มต้นจะใช้ไฟล์กำหนดค่าที่อยู่ภายใต้ ~/.config/openshift/. ในทางกลับกัน Ansible ใช้เป็นข้อมูลสำรองของการติดตั้ง
version: v2
variant: openshift-enterprise
variant_version: 3.1
ansible_log_path: /tmp/ansible.log
deployment:
ansible_ssh_user: root
hosts:
- ip: 172.10.10.1
hostname: vklnld908.int.example.com
public_ip: 24.222.0.1
public_hostname: master.example.com
roles:
- master
- node
containerized: true
connect_to: 24.222.0.1
- ip: 172.10.10.2
hostname: vklnld1446.int.example.com
public_ip: 24.222.0.2
public_hostname: node1.example.com
roles:
- node
connect_to: 10.0.0.2
- ip: 172.10.10.3
hostname: vklnld1447.int.example.com
public_ip: 10..22.2.3
public_hostname: node2.example.com
roles:
- node
connect_to: 10.0.0.3
roles:
master:
<variable_name1>: "<value1>"
<variable_name2>: "<value2>"
node:
<variable_name1>: "<value1>"
ที่นี่เรามีตัวแปรเฉพาะบทบาทซึ่งสามารถกำหนดได้หากต้องการตั้งค่าตัวแปรเฉพาะบางตัว
เมื่อเสร็จแล้วเราสามารถตรวจสอบการติดตั้งโดยใช้คำสั่งต่อไปนี้
$ oc get nodes
NAME STATUS AGE
master.example.com Ready 10d
node1.example.com Ready 10d
node2.example.com Ready 10d
การติดตั้งขั้นสูง
การติดตั้งขั้นสูงขึ้นอยู่กับการกำหนดค่า Ansible โดยสมบูรณ์ซึ่งมีการกำหนดค่าโฮสต์และนิยามตัวแปรที่เกี่ยวข้องกับการกำหนดค่าหลักและโหนด ซึ่งประกอบด้วยรายละเอียดทั้งหมดเกี่ยวกับการกำหนดค่า
เมื่อเรามีการตั้งค่าและ playbook พร้อมแล้วเราสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อตั้งค่าคลัสเตอร์
$ ansible-playbook -i inventry/hosts ~/openshift-ansible/playbooks/byo/config.yml
การเพิ่มโฮสต์ในคลัสเตอร์
เราสามารถเพิ่มโฮสต์ในคลัสเตอร์โดยใช้ -
- เครื่องมือติดตั้งด่วน
- วิธีการกำหนดค่าขั้นสูง
Quick installation toolทำงานได้ทั้งในโหมดโต้ตอบและไม่โต้ตอบ ใช้คำสั่งต่อไปนี้
$ atomic-openshift-installer -u -c </path/to/file> scaleup
รูปแบบของการปรับขนาดรูปลักษณ์ของไฟล์คอนฟิกูเรชันแอ็พพลิเคชันสามารถใช้เพื่อเพิ่มทั้งมาสเตอร์และโหนด
วิธีการกำหนดค่าขั้นสูง
ด้วยวิธีนี้เราอัปเดตไฟล์โฮสต์ของ Ansible จากนั้นเพิ่มโหนดหรือรายละเอียดเซิร์ฟเวอร์ใหม่ในไฟล์นี้ ไฟล์คอนฟิกูเรชันมีลักษณะดังต่อไปนี้
[OSEv3:children]
masters
nodes
new_nodes
new_master
ในไฟล์โฮสต์ Ansible เดียวกันให้เพิ่มรายละเอียดตัวแปรเกี่ยวกับโหนดใหม่ดังที่แสดงด้านล่าง
[new_nodes]
vklnld1448.int.example.com openshift_node_labels = "{'region': 'primary', 'zone': 'east'}"
สุดท้ายใช้ไฟล์โฮสต์ที่อัปเดตรันการกำหนดค่าใหม่และเรียกใช้ไฟล์คอนฟิกูเรชันเพื่อให้การตั้งค่าเสร็จสิ้นโดยใช้คำสั่งต่อไปนี้
$ ansible-playbook -i /inventory/hosts /usr/share/ansible/openshift-ansible/playbooks/test/openshift-node/scaleup.yml
การจัดการบันทึกคลัสเตอร์
บันทึกคลัสเตอร์ OpenShift ไม่ใช่อะไรนอกจากบันทึกที่สร้างขึ้นจากเครื่องต้นแบบและเครื่องโหนดของคลัสเตอร์ สิ่งเหล่านี้สามารถจัดการบันทึกประเภทใดก็ได้เริ่มตั้งแต่บันทึกเซิร์ฟเวอร์บันทึกหลักล็อกคอนเทนเนอร์ล็อกพ็อด ฯลฯ มีเทคโนโลยีและแอปพลิเคชันมากมายสำหรับการจัดการบันทึกคอนเทนเนอร์
มีเครื่องมือเพียงไม่กี่รายการตามที่ระบุไว้ซึ่งสามารถนำไปใช้ในการจัดการบันทึกได้
- Fluentd
- ELK
- Kabna
- Nagios
- Splunk
ELK stack- สแต็กนี้มีประโยชน์ในขณะที่พยายามรวบรวมบันทึกจากโหนดทั้งหมดและนำเสนอในรูปแบบที่เป็นระบบ ELK stack แบ่งออกเป็นสามประเภทหลัก ๆ
ElasticSearch - ส่วนใหญ่ตอบสนองได้สำหรับการรวบรวมข้อมูลจากคอนเทนเนอร์ทั้งหมดและวางไว้ในตำแหน่งส่วนกลาง
Fluentd - ใช้สำหรับป้อนบันทึกที่รวบรวมไปยังเครื่องยนต์คอนเทนเนอร์ที่ยืดหยุ่น
Kibana - อินเทอร์เฟซแบบกราฟิกที่ใช้สำหรับการนำเสนอข้อมูลที่รวบรวมเป็นข้อมูลที่มีประโยชน์ในอินเทอร์เฟซแบบกราฟิก
ประเด็นสำคัญประการหนึ่งที่ควรทราบคือเมื่อระบบนี้ถูกปรับใช้บนคลัสเตอร์ระบบจะเริ่มรวบรวมบันทึกจากโหนดทั้งหมด
การวินิจฉัยบันทึก
OpenShift มี inbuilt oc adm dignosticsคำสั่งกับ OC ที่สามารถใช้สำหรับวิเคราะห์สถานการณ์ผิดพลาดหลาย ๆ เครื่องมือนี้สามารถใช้ได้จากต้นแบบในฐานะผู้ดูแลคลัสเตอร์ ยูทิลิตี้นี้มีประโยชน์มากคือการแก้ไขปัญหาและการให้เกียรติปัญหาที่ทราบ สิ่งนี้ทำงานบนไคลเอนต์หลักและโหนด
หากรันโดยไม่มีเอเจนต์หรือแฟล็กใด ๆ จะมองหาไฟล์คอนฟิกูเรชันของไคลเอ็นต์เซิร์ฟเวอร์และแมชชีนโหนดและใช้สำหรับการวินิจฉัย เราสามารถรันการวินิจฉัยทีละรายการโดยส่งผ่านอาร์กิวเมนต์ต่อไปนี้ -
- AggregatedLogging
- AnalyzeLogs
- ClusterRegistry
- ClusterRoleBindings
- ClusterRoles
- ClusterRouter
- ConfigContexts
- DiagnosticPod
- MasterConfigCheck
- MasterNode
- MetricsApiProxy
- NetworkCheck
- NodeConfigCheck
- NodeDefinitions
- ServiceExternalIPs
- UnitStatus
เราสามารถเรียกใช้ด้วยคำสั่งต่อไปนี้
$ oc adm diagnostics <DiagnosticName>
การอัพเกรดคลัสเตอร์
การอัปเกรดคลัสเตอร์เกี่ยวข้องกับการอัปเกรดหลายสิ่งภายในคลัสเตอร์และการอัปเดตคลัสเตอร์ด้วยคอมโพเนนต์และการอัปเกรดใหม่ สิ่งนี้เกี่ยวข้องกับ -
- การอัพเกรดส่วนประกอบหลัก
- การอัพเกรดส่วนประกอบโหนด
- การอัปเกรดนโยบาย
- การอัพเกรดเส้นทาง
- การอัปเกรดสตรีมรูปภาพ
ในการดำเนินการอัปเกรดทั้งหมดนี้เราจำเป็นต้องจัดเตรียมตัวติดตั้งหรือยูทิลิตีอย่างรวดเร็วก่อน เพื่อที่เราจะต้องอัปเดตยูทิลิตี้ต่อไปนี้ -
- atomic-openshift-utils
- atomic-openshift-excluder
- atomic-openshift-docker-excluder
- แพ็คเกจ etcd
ก่อนที่จะเริ่มการอัพเกรดเราต้องทำการสำรองข้อมูล etcd บนเครื่องหลักซึ่งสามารถทำได้โดยใช้คำสั่งต่อไปนี้
$ ETCD_DATA_DIR = /var/lib/origin/openshift.local.etcd
$ etcdctl backup \ --data-dir $ETCD_DATA_DIR \
--backup-dir $ETCD_DATA_DIR.bak.<date>
การอัพเกรดส่วนประกอบหลัก
ใน OpenShift master เราเริ่มการอัปเกรดโดยอัปเดตไฟล์ etcd จากนั้นย้ายไปที่ Docker สุดท้ายเราเรียกใช้ผู้บริหารอัตโนมัติเพื่อให้คลัสเตอร์อยู่ในตำแหน่งที่ต้องการ อย่างไรก็ตามก่อนที่จะเริ่มการอัปเกรดเราจำเป็นต้องเปิดใช้งานแพ็กเกจ atomic openshift บนมาสเตอร์แต่ละตัวก่อน ซึ่งสามารถทำได้โดยใช้คำสั่งต่อไปนี้
Step 1 - ลบแพ็คเกจ atomic-openshift
$ atomic-openshift-excluder unexclude
Step 2 - อัพเกรด etcd กับปรมาจารย์ทั้งหมด
$ yum update etcd
Step 3 - เริ่มบริการของ etcd ใหม่และตรวจสอบว่าเริ่มต้นสำเร็จหรือไม่
$ systemctl restart etcd
$ journalctl -r -u etcd
Step 4 - อัปเกรดแพ็คเกจ Docker
$ yum update docker
Step 5 - เริ่มบริการ Docker ใหม่และตรวจสอบว่าขึ้นถูกต้องหรือไม่
$ systemctl restart docker $ journalctl -r -u docker
Step 6 - เมื่อเสร็จแล้วให้รีบูตระบบด้วยคำสั่งต่อไปนี้
$ systemctl reboot $ journalctl -r -u docker
Step 7 - สุดท้ายเรียกใช้ atomic-executer เพื่อรับแพ็คเกจกลับไปที่รายการยำที่ไม่รวม
$ atomic-openshift-excluder exclude
ไม่มีการบังคับในการอัปเกรดนโยบายดังกล่าวจำเป็นต้องอัปเกรดหากมีการแนะนำเท่านั้นซึ่งสามารถตรวจสอบได้ด้วยคำสั่งต่อไปนี้
$ oadm policy reconcile-cluster-roles
ในกรณีส่วนใหญ่เราไม่จำเป็นต้องอัปเดตข้อกำหนดของนโยบาย
การอัพเกรดส่วนประกอบโหนด
เมื่อการอัปเดตหลักเสร็จสมบูรณ์เราสามารถเริ่มอัปเกรดโหนดได้ สิ่งหนึ่งที่ควรทราบคือระยะเวลาในการอัปเกรดควรสั้นเพื่อหลีกเลี่ยงปัญหาใด ๆ ในคลัสเตอร์
Step 1 - ลบแพ็คเกจ OpenShift atomic ทั้งหมดออกจากโหนดทั้งหมดที่คุณต้องการทำการอัพเกรด
$ atomic-openshift-excluder unexclude
Step 2 - ถัดไปปิดการใช้งานการตั้งเวลาโหนดก่อนอัปเกรด
$ oadm manage-node <node name> --schedulable = false
Step 3 - จำลองโหนดทั้งหมดจากโฮสต์ปัจจุบันไปยังโฮสต์อื่น
$ oadm drain <node name> --force --delete-local-data --ignore-daemonsets
Step 4 - อัปเกรดการตั้งค่า Docker บนโฮสต์
$ yum update docker
Step 5 - เริ่มบริการ Docker ใหม่จากนั้นเริ่มโหนดบริการ Docker
$systemctl restart docker $ systemctl restart atomic-openshift-node
Step 6 - ตรวจสอบว่าทั้งคู่เริ่มต้นอย่างถูกต้องหรือไม่
$ journalctl -r -u atomic-openshift-node
Step 7 - หลังจากอัปเกรดเสร็จสิ้นให้รีบูตเครื่องโหนด
$ systemctl reboot
$ journalctl -r -u docker
Step 8 - เปิดใช้งานการตั้งเวลาบนโหนดอีกครั้ง
$ oadm manage-node <node> --schedulable.
Step 9 - เรียกใช้ atomic-openshift executer เพื่อรับแพ็คเกจ OpenShift กลับมาที่โหนด
$ atomic-openshift-excluder exclude
Step 10 - สุดท้ายตรวจสอบว่ามีโหนดทั้งหมดหรือไม่
$ oc get nodes
NAME STATUS AGE
master.example.com Ready 12d
node1.example.com Ready 12d
node2.example.com Ready 12d
การปรับขนาดอัตโนมัติเป็นคุณลักษณะใน OpenShift ที่แอปพลิเคชันที่ปรับใช้สามารถปรับขนาดและจมได้ตามและเมื่อต้องการตามข้อกำหนดบางประการ ในแอปพลิเคชัน OpenShift การปรับขนาดอัตโนมัติเรียกอีกอย่างว่าการปรับขนาดอัตโนมัติของพ็อด มีสองtypes of application scaling ดังต่อไปนี้.
มาตราส่วนแนวตั้ง
การปรับขนาดตามแนวตั้งเป็นเรื่องของการเพิ่มพลังงานให้กับเครื่องเดียวซึ่งหมายถึงการเพิ่ม CPU และฮาร์ดดิสก์มากขึ้น วิธีนี้เป็นวิธีเก่าของ OpenShift ซึ่งตอนนี้ OpenShift ไม่รองรับ
มาตราส่วนแนวนอน
การปรับขนาดประเภทนี้มีประโยชน์เมื่อมีความจำเป็นในการจัดการคำขอเพิ่มเติมโดยการเพิ่มจำนวนเครื่อง
ใน OpenShift มีไฟล์ two methods to enable the scaling feature.
- การใช้ไฟล์คอนฟิกูเรชันการปรับใช้
- ในขณะที่เรียกใช้ภาพ
การใช้ Deployment Configuration File
ในวิธีนี้คุณลักษณะการปรับขนาดจะเปิดใช้งานผ่านไฟล์ yaml คอนฟิกูเรชันของ deploymant ด้วยเหตุนี้คำสั่ง OC autoscale จะใช้กับจำนวนการจำลองขั้นต่ำและสูงสุดซึ่งจำเป็นต้องรัน ณ ช่วงเวลาใดเวลาหนึ่งในคลัสเตอร์ เราต้องการคำจำกัดความของวัตถุสำหรับการสร้างตัวปรับขนาดอัตโนมัติ ต่อไปนี้เป็นตัวอย่างของไฟล์นิยามตัวปรับขนาดอัตโนมัติของพ็อด
apiVersion: extensions/v1beta1
kind: HorizontalPodAutoscaler
metadata:
name: database
spec:
scaleRef:
kind: DeploymentConfig
name: database
apiVersion: v1
subresource: scale
minReplicas: 1
maxReplicas: 10
cpuUtilization:
targetPercentage: 80
เมื่อเรามีไฟล์แล้วเราจำเป็นต้องบันทึกด้วยรูปแบบ yaml และรันคำสั่งต่อไปนี้สำหรับการปรับใช้
$ oc create –f <file name>.yaml
ขณะเรียกใช้รูปภาพ
คุณยังสามารถปรับขนาดอัตโนมัติโดยไม่มีไฟล์ yaml ได้โดยใช้สิ่งต่อไปนี้ oc autoscale คำสั่งในบรรทัดคำสั่ง oc
$ oc autoscale dc/database --min 1 --max 5 --cpu-percent = 75
deploymentconfig "database" autoscaled
คำสั่งนี้จะสร้างไฟล์ประเภทเดียวกันที่สามารถใช้อ้างอิงได้ในภายหลัง
กลยุทธ์การปรับใช้ใน OpenShift
กลยุทธ์การปรับใช้ใน OpenShift กำหนดขั้นตอนการปรับใช้ด้วยวิธีการที่แตกต่างกัน ใน OpenShift ต่อไปนี้คือไฟล์important types of deployment strategies.
- กลยุทธ์การหมุน
- สร้างกลยุทธ์ใหม่
- กลยุทธ์ที่กำหนดเอง
ต่อไปนี้เป็นตัวอย่างของไฟล์คอนฟิกูเรชันการปรับใช้ซึ่งส่วนใหญ่ใช้สำหรับการปรับใช้บนโหนด OpenShift
kind: "DeploymentConfig"
apiVersion: "v1"
metadata:
name: "database"
spec:
template:
metadata:
labels:
name: "Database1"
spec:
containers:
- name: "vipinopenshifttest"
image: "openshift/mongoDB"
ports:
- containerPort: 8080
protocol: "TCP"
replicas: 5
selector:
name: "database"
triggers:
- type: "ConfigChange"
- type: "ImageChange"
imageChangeParams:
automatic: true
containerNames:
- "vipinopenshifttest"
from:
kind: "ImageStreamTag"
name: "mongoDB:latest"
strategy:
type: "Rolling"
ในไฟล์ Deploymentconfig ด้านบนเรามีกลยุทธ์เป็น Rolling
เราสามารถใช้คำสั่ง OC ต่อไปนี้สำหรับการปรับใช้
$ oc deploy <deployment_config> --latest
กลยุทธ์กลิ้ง
กลยุทธ์การกลิ้งใช้สำหรับการอัปเดตหรือการปรับใช้งาน กระบวนการนี้ยังสนับสนุน life-cycle hooks ซึ่งใช้สำหรับการแทรกโค้ดลงในกระบวนการปรับใช้ใด ๆ
strategy:
type: Rolling
rollingParams:
timeoutSeconds: <time in seconds>
maxSurge: "<definition in %>"
maxUnavailable: "<Defintion in %>"
pre: {}
post: {}
สร้างกลยุทธ์ใหม่
กลยุทธ์การปรับใช้นี้มีคุณสมบัติพื้นฐานบางประการของกลยุทธ์การปรับใช้แบบกลิ้งและยังรองรับการใช้งานตลอดอายุการใช้งาน
strategy:
type: Recreate
recreateParams:
pre: {}
mid: {}
post: {}
กลยุทธ์ที่กำหนดเอง
สิ่งนี้มีประโยชน์มากเมื่อมีคนต้องการจัดเตรียมกระบวนการปรับใช้หรือโฟลว์ของตนเอง การปรับแต่งทั้งหมดสามารถทำได้ตามความต้องการ
strategy:
type: Custom
customParams:
image: organization/mongoDB
command: [ "ls -l", "$HOME" ]
environment:
- name: VipinOpenshiftteat
value: Dev1
ในบทนี้เราจะพูดถึงหัวข้อต่างๆเช่นวิธีจัดการโหนดกำหนดค่าบัญชีบริการเป็นต้น
การกำหนดค่าหลักและโหนด
ใน OpenShift เราจำเป็นต้องใช้คำสั่ง start พร้อมกับ OC เพื่อบูตเซิร์ฟเวอร์ใหม่ ในขณะที่เปิดตัวต้นแบบใหม่เราจำเป็นต้องใช้ต้นแบบพร้อมกับคำสั่ง start ในขณะที่เริ่มโหนดใหม่เราต้องใช้โหนดพร้อมกับคำสั่ง start ในการดำเนินการนี้เราจำเป็นต้องสร้างไฟล์คอนฟิกูเรชันสำหรับต้นแบบและสำหรับโหนด เราสามารถสร้างไฟล์คอนฟิกูเรชันพื้นฐานสำหรับมาสเตอร์และโหนดโดยใช้คำสั่งต่อไปนี้
สำหรับไฟล์คอนฟิกูเรชันหลัก
$ openshift start master --write-config = /openshift.local.config/master
สำหรับไฟล์คอนฟิกูเรชันโหนด
$ oadm create-node-config --node-dir = /openshift.local.config/node-<node_hostname> --node = <node_hostname> --hostnames = <hostname>,<ip_address>
เมื่อเรารันคำสั่งต่อไปนี้เราจะได้ไฟล์คอนฟิกูเรชันพื้นฐานที่สามารถใช้เป็นจุดเริ่มต้นสำหรับการกำหนดค่า ต่อมาเราสามารถมีไฟล์เดียวกันเพื่อบูตเซิร์ฟเวอร์ใหม่
apiLevels:
- v1beta3
- v1
apiVersion: v1
assetConfig:
logoutURL: ""
masterPublicURL: https://172.10.12.1:7449
publicURL: https://172.10.2.2:7449/console/
servingInfo:
bindAddress: 0.0.0.0:7449
certFile: master.server.crt
clientCA: ""
keyFile: master.server.key
maxRequestsInFlight: 0
requestTimeoutSeconds: 0
controllers: '*'
corsAllowedOrigins:
- 172.10.2.2:7449
- 127.0.0.1
- localhost
dnsConfig:
bindAddress: 0.0.0.0:53
etcdClientInfo:
ca: ca.crt
certFile: master.etcd-client.crt
keyFile: master.etcd-client.key
urls:
- https://10.0.2.15:4001
etcdConfig:
address: 10.0.2.15:4001
peerAddress: 10.0.2.15:7001
peerServingInfo:
bindAddress: 0.0.0.0:7001
certFile: etcd.server.crt
clientCA: ca.crt
keyFile: etcd.server.key
servingInfo:
bindAddress: 0.0.0.0:4001
certFile: etcd.server.crt
clientCA: ca.crt
keyFile: etcd.server.key
storageDirectory: /root/openshift.local.etcd
etcdStorageConfig:
kubernetesStoragePrefix: kubernetes.io
kubernetesStorageVersion: v1
openShiftStoragePrefix: openshift.io
openShiftStorageVersion: v1
imageConfig:
format: openshift/origin-${component}:${version}
latest: false
kind: MasterConfig
kubeletClientInfo:
ca: ca.crt
certFile: master.kubelet-client.crt
keyFile: master.kubelet-client.key
port: 10250
kubernetesMasterConfig:
apiLevels:
- v1beta3
- v1
apiServerArguments: null
controllerArguments: null
masterCount: 1
masterIP: 10.0.2.15
podEvictionTimeout: 5m
schedulerConfigFile: ""
servicesNodePortRange: 30000-32767
servicesSubnet: 172.30.0.0/16
staticNodeNames: []
masterClients:
externalKubernetesKubeConfig: ""
openshiftLoopbackKubeConfig: openshift-master.kubeconfig
masterPublicURL: https://172.10.2.2:7449
networkConfig:
clusterNetworkCIDR: 10.1.0.0/16
hostSubnetLength: 8
networkPluginName: ""
serviceNetworkCIDR: 172.30.0.0/16
oauthConfig:
assetPublicURL: https://172.10.2.2:7449/console/
grantConfig:
method: auto
identityProviders:
- challenge: true
login: true
name: anypassword
provider:
apiVersion: v1
kind: AllowAllPasswordIdentityProvider
masterPublicURL: https://172.10.2.2:7449/
masterURL: https://172.10.2.2:7449/
sessionConfig:
sessionMaxAgeSeconds: 300
sessionName: ssn
sessionSecretsFile: ""
tokenConfig:
accessTokenMaxAgeSeconds: 86400
authorizeTokenMaxAgeSeconds: 300
policyConfig:
bootstrapPolicyFile: policy.json
openshiftInfrastructureNamespace: openshift-infra
openshiftSharedResourcesNamespace: openshift
projectConfig:
defaultNodeSelector: ""
projectRequestMessage: ""
projectRequestTemplate: ""
securityAllocator:
mcsAllocatorRange: s0:/2
mcsLabelsPerProject: 5
uidAllocatorRange: 1000000000-1999999999/10000
routingConfig:
subdomain: router.default.svc.cluster.local
serviceAccountConfig:
managedNames:
- default
- builder
- deployer
masterCA: ca.crt
privateKeyFile: serviceaccounts.private.key
privateKeyFile: serviceaccounts.private.key
publicKeyFiles:
- serviceaccounts.public.key
servingInfo:
bindAddress: 0.0.0.0:8443
certFile: master.server.crt
clientCA: ca.crt
keyFile: master.server.key
maxRequestsInFlight: 0
requestTimeoutSeconds: 3600
ไฟล์คอนฟิกูเรชันโหนด
allowDisabledDocker: true
apiVersion: v1
dnsDomain: cluster.local
dnsIP: 172.10.2.2
dockerConfig:
execHandlerName: native
imageConfig:
format: openshift/origin-${component}:${version}
latest: false
kind: NodeConfig
masterKubeConfig: node.kubeconfig
networkConfig:
mtu: 1450
networkPluginName: ""
nodeIP: ""
nodeName: node1.example.com
podManifestConfig:
path: "/path/to/pod-manifest-file"
fileCheckIntervalSeconds: 30
servingInfo:
bindAddress: 0.0.0.0:10250
certFile: server.crt
clientCA: node-client-ca.crt
keyFile: server.key
volumeDirectory: /root/openshift.local.volumes
นี่คือลักษณะของไฟล์คอนฟิกูเรชันโหนด เมื่อเรามีไฟล์คอนฟิกูเรชันเหล่านี้แล้วเราสามารถรันคำสั่งต่อไปนี้เพื่อสร้างเซิร์ฟเวอร์หลักและโหนด
$ openshift start --master-config = /openshift.local.config/master/master-
config.yaml --node-config = /openshift.local.config/node-<node_hostname>/node-
config.yaml
การจัดการโหนด
ใน OpenShift เรามียูทิลิตี้บรรทัดคำสั่ง OC ซึ่งส่วนใหญ่จะใช้สำหรับการดำเนินการทั้งหมดใน OpenShift เราสามารถใช้คำสั่งต่อไปนี้เพื่อจัดการกับโหนด
สำหรับการแสดงรายการโหนด
$ oc get nodes
NAME LABELS
node1.example.com kubernetes.io/hostname = vklnld1446.int.example.com
node2.example.com kubernetes.io/hostname = vklnld1447.int.example.com
การอธิบายรายละเอียดเกี่ยวกับโหนด
$ oc describe node <node name>
การลบโหนด
$ oc delete node <node name>
รายการพ็อดบนโหนด
$ oadm manage-node <node1> <node2> --list-pods [--pod-selector=<pod_selector>] [-o json|yaml]
การประเมินพ็อดบนโหนด
$ oadm manage-node <node1> <node2> --evacuate --dry-run [--pod-selector=<pod_selector>]
Configuration Authentication
ใน OpenShift master มีเซิร์ฟเวอร์ OAuth ในตัวซึ่งสามารถใช้สำหรับจัดการการพิสูจน์ตัวตน ผู้ใช้ OpenShift ทั้งหมดจะได้รับโทเค็นจากเซิร์ฟเวอร์นี้ซึ่งช่วยให้พวกเขาสื่อสารกับ OpenShift API
มีระดับการพิสูจน์ตัวตนที่แตกต่างกันใน OpenShift ซึ่งสามารถกำหนดค่าพร้อมกับไฟล์กำหนดค่าหลัก
- อนุญาตทั้งหมด
- ปฏิเสธทั้งหมด
- HTPasswd
- LDAP
- การรับรองความถูกต้องขั้นพื้นฐาน
- ขอส่วนหัว
ในขณะที่กำหนดการกำหนดค่าหลักเราสามารถกำหนดนโยบายการระบุตัวตนซึ่งเราสามารถกำหนดประเภทของนโยบายที่เราต้องการใช้
อนุญาตทั้งหมด
อนุญาตทั้งหมด
oauthConfig:
...
identityProviders:
- name: Allow_Authontication
challenge: true
login: true
provider:
apiVersion: v1
kind: AllowAllPasswordIdentityProvider
ปฏิเสธทั้งหมด
การดำเนินการนี้จะปฏิเสธการเข้าถึงชื่อผู้ใช้และรหัสผ่านทั้งหมด
oauthConfig:
...
identityProviders:
- name: deny_Authontication
challenge: true
login: true
provider:
apiVersion: v1
kind: DenyAllPasswordIdentityProvider
HTPasswd
HTPasswd ใช้เพื่อตรวจสอบชื่อผู้ใช้และรหัสผ่านกับรหัสผ่านของไฟล์ที่เข้ารหัส
สำหรับการสร้างไฟล์ที่เข้ารหัสคำสั่งต่อไปนี้
$ htpasswd </path/to/users.htpasswd> <user_name>
การใช้ไฟล์เข้ารหัส
oauthConfig:
...
identityProviders:
- name: htpasswd_authontication
challenge: true
login: true
provider:
apiVersion: v1
kind: HTPasswdPasswordIdentityProvider
file: /path/to/users.htpasswd
ผู้ให้บริการข้อมูลประจำตัว LDAP
สิ่งนี้ใช้สำหรับการพิสูจน์ตัวตน LDAP โดยที่เซิร์ฟเวอร์ LDAP มีบทบาทสำคัญในการพิสูจน์ตัวตน
oauthConfig:
...
identityProviders:
- name: "ldap_authontication"
challenge: true
login: true
provider:
apiVersion: v1
kind: LDAPPasswordIdentityProvider
attributes:
id:
- dn
email:
- mail
name:
- cn
preferredUsername:
- uid
bindDN: ""
bindPassword: ""
ca: my-ldap-ca-bundle.crt
insecure: false
url: "ldap://ldap.example.com/ou=users,dc=acme,dc=com?uid"
การรับรองความถูกต้องขั้นพื้นฐาน
ใช้เมื่อทำการตรวจสอบความถูกต้องของชื่อผู้ใช้และรหัสผ่านเทียบกับการรับรองความถูกต้องแบบเซิร์ฟเวอร์ต่อเซิร์ฟเวอร์ การพิสูจน์ตัวตนได้รับการป้องกันใน URL พื้นฐานและนำเสนอในรูปแบบ JSON
oauthConfig:
...
identityProviders:
- name: my_remote_basic_auth_provider
challenge: true
login: true
provider:
apiVersion: v1
kind: BasicAuthPasswordIdentityProvider
url: https://www.vklnld908.int.example.com/remote-idp
ca: /path/to/ca.file
certFile: /path/to/client.crt
keyFile: /path/to/client.key
การกำหนดค่าบัญชีบริการ
บัญชีบริการเป็นวิธีที่ยืดหยุ่นในการเข้าถึง OpenShift API โดยเปิดเผยชื่อผู้ใช้และรหัสผ่านสำหรับการตรวจสอบสิทธิ์
การเปิดใช้งานบัญชีบริการ
บัญชีบริการใช้คู่คีย์สาธารณะและคีย์ส่วนตัวสำหรับการตรวจสอบสิทธิ์ การพิสูจน์ตัวตนกับ API ทำได้โดยใช้คีย์ส่วนตัวและตรวจสอบความถูกต้องกับคีย์สาธารณะ
ServiceAccountConfig:
...
masterCA: ca.crt
privateKeyFile: serviceaccounts.private.key
publicKeyFiles:
- serviceaccounts.public.key
- ...
การสร้างบัญชีบริการ
ใช้คำสั่งต่อไปนี้เพื่อสร้างบัญชีบริการ
$ Openshift cli create service account <name of server account>
ทำงานกับ HTTP Proxy
ในสภาพแวดล้อมการผลิตส่วนใหญ่การเข้าถึงอินเทอร์เน็ตโดยตรงจะถูก จำกัด พวกเขาไม่ได้สัมผัสกับอินเทอร์เน็ตหรือเปิดเผยผ่านพร็อกซี HTTP หรือ HTTPS ในสภาพแวดล้อม OpenShift คำจำกัดความของเครื่องพร็อกซีนี้ถูกตั้งค่าเป็นตัวแปรสภาพแวดล้อม
สามารถทำได้โดยการเพิ่มนิยามพร็อกซีบนไฟล์หลักและไฟล์โหนดที่อยู่ภายใต้ /etc/sysconfig. สิ่งนี้คล้ายกับที่เราทำกับแอปพลิเคชันอื่น ๆ
มาสเตอร์แมชชีน
/ etc / sysconfig / openshift-master
HTTP_PROXY=http://USERNAME:[email protected]:8080/
HTTPS_PROXY=https://USERNAME:[email protected]:8080/
NO_PROXY=master.vklnld908.int.example.com
เครื่องโหนด
/ etc / sysconfig / openshift-node
HTTP_PROXY=http://USERNAME:[email protected]:8080/
HTTPS_PROXY=https://USERNAME:[email protected]:8080/
NO_PROXY=master.vklnld908.int.example.com
เมื่อเสร็จแล้วเราต้องรีสตาร์ทเครื่องต้นแบบและโหนด
สำหรับ Docker Pull
/ etc / sysconfig / นักเทียบท่า
HTTP_PROXY = http://USERNAME:[email protected]:8080/
HTTPS_PROXY = https://USERNAME:[email protected]:8080/
NO_PROXY = master.vklnld1446.int.example.com
ในการทำให้พ็อดทำงานในสภาพแวดล้อมพร็อกซีสามารถทำได้โดยใช้ -
containers:
- env:
- name: "HTTP_PROXY"
value: "http://USER:PASSWORD@:10.0.1.1:8080"
คำสั่งสภาพแวดล้อม OC สามารถใช้เพื่ออัพเดต env ที่มีอยู่
OpenShift Storage พร้อม NFS
ใน OpenShift แนวคิดของไดรฟ์ข้อมูลแบบคงที่และการอ้างสิทธิ์ไดรฟ์ข้อมูลถาวรจะสร้างพื้นที่จัดเก็บถาวร นี่เป็นหนึ่งในแนวคิดหลักในการสร้างไดรฟ์ข้อมูลถาวรแรกและต่อมาจะอ้างสิทธิ์ไดรฟ์ข้อมูลเดียวกัน สำหรับสิ่งนี้เราจำเป็นต้องมีความจุและพื้นที่ดิสก์เพียงพอบนฮาร์ดแวร์พื้นฐาน
apiVersion: v1
kind: PersistentVolume
metadata:
name: storage-unit1
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
nfs:
path: /opt
server: 10.12.2.2
persistentVolumeReclaimPolicy: Recycle
จากนั้นใช้คำสั่ง OC create create Persistent Volume
$ oc create -f storage-unit1.yaml
persistentvolume " storage-unit1 " created
อ้างสิทธิ์ในไดรฟ์ข้อมูลที่สร้างขึ้น
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: Storage-clame1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
สร้างการอ้างสิทธิ์
$ oc create -f Storage-claim1.yaml
persistentvolume " Storage-clame1 " created
การจัดการผู้ใช้และบทบาท
การดูแลระบบผู้ใช้และบทบาทใช้ในการจัดการผู้ใช้การเข้าถึงและการควบคุมโครงการต่างๆ
การสร้างผู้ใช้
เทมเพลตที่กำหนดไว้ล่วงหน้าสามารถใช้เพื่อสร้างผู้ใช้ใหม่ใน OpenShift
kind: "Template"
apiVersion: "v1"
parameters:
- name: vipin
required: true
objects:
- kind: "User"
apiVersion: "v1"
metadata:
name: "${email}" - kind: "Identity" apiVersion: "v1" metadata: name: "vipin:${email}"
providerName: "SAML"
providerUserName: "${email}" - kind: "UserIdentityMapping" apiVersion: "v1" identity: name: "vipin:${email}"
user:
name: "${email}"
ใช้ oc create –f <file name> เพื่อสร้างผู้ใช้
$ oc create –f vipin.yaml
ใช้คำสั่งต่อไปนี้เพื่อลบผู้ใช้ใน OpenShift
$ oc delete user <user name>
การ จำกัด การเข้าถึงของผู้ใช้
ResourceQuotas และ LimitRanges ใช้สำหรับ จำกัด ระดับการเข้าถึงของผู้ใช้ ใช้สำหรับ จำกัด พ็อดและคอนเทนเนอร์บนคลัสเตอร์
apiVersion: v1
kind: ResourceQuota
metadata:
name: resources-utilization
spec:
hard:
pods: "10"
การสร้างใบเสนอราคาโดยใช้การกำหนดค่าข้างต้น
$ oc create -f resource-quota.yaml –n –Openshift-sample
การอธิบายอ้างทรัพยากร
$ oc describe quota resource-quota -n Openshift-sample
Name: resource-quota
Namespace: Openshift-sample
Resource Used Hard
-------- ---- ----
pods 3 10
การกำหนดขีด จำกัด คอนเทนเนอร์สามารถใช้เพื่อ จำกัด ทรัพยากรที่จะใช้โดยคอนเทนเนอร์ที่ปรับใช้ ใช้เพื่อกำหนดข้อ จำกัด สูงสุดและต่ำสุดของวัตถุบางอย่าง
ข้อ จำกัด โครงการของผู้ใช้
โดยพื้นฐานแล้วจะใช้สำหรับจำนวนโครงการที่ผู้ใช้สามารถมีได้ตลอดเวลา โดยพื้นฐานแล้วจะทำได้โดยการกำหนดระดับผู้ใช้เป็นประเภทบรอนซ์เงินและทอง
ก่อนอื่นเราต้องกำหนดวัตถุที่เก็บมูลค่าของโครงการประเภทบรอนซ์เงินและทองได้ สิ่งเหล่านี้ต้องทำในไฟล์ master-confif.yaml
admissionConfig:
pluginConfig:
ProjectRequestLimit:
configuration:
apiVersion: v1
kind: ProjectRequestLimitConfig
limits:
- selector:
level: platinum
- selector:
level: gold
maxProjects: 15
- selector:
level: silver
maxProjects: 10
- selector:
level: bronze
maxProjects: 5
รีสตาร์ทเซิร์ฟเวอร์หลัก
การกำหนดผู้ใช้ไปยังระดับใดระดับหนึ่ง
$ oc label user vipin level = gold
ย้ายผู้ใช้ออกจากป้ายกำกับหากจำเป็น
$ oc label user <user_name> level-
การเพิ่มบทบาทให้กับผู้ใช้
$ oadm policy add-role-to-user
<user_name>
การลบบทบาทออกจากผู้ใช้
$ oadm policy remove-role-from-user
<user_name>
การเพิ่มบทบาทคลัสเตอร์ให้กับผู้ใช้
$ oadm policy add-cluster-role-to-user
<user_name>
การลบบทบาทคลัสเตอร์ออกจากผู้ใช้
$ oadm policy remove-cluster-role-from-user
<user_name>
การเพิ่มบทบาทให้กับกลุ่ม
$ oadm policy add-role-to-user
<user_name>
การลบบทบาทออกจากกลุ่ม
$ oadm policy remove-cluster-role-from-user
<user_name>
การเพิ่มบทบาทคลัสเตอร์ให้กับกลุ่ม
$ oadm policy add-cluster-role-to-group
<groupname>
การลบบทบาทคลัสเตอร์ออกจากกลุ่ม
$ oadm policy remove-cluster-role-from-group <role> <groupname>
ผู้ใช้สำหรับการดูแลคลัสเตอร์
นี่เป็นหนึ่งในบทบาทที่ทรงพลังที่สุดที่ผู้ใช้มีความสามารถในการจัดการคลัสเตอร์ที่สมบูรณ์ตั้งแต่การสร้างจนถึงการลบคลัสเตอร์
$ oadm policy add-role-to-user admin <user_name> -n <project_name>
ผู้ใช้ที่มีพลังสูงสุด
$ oadm policy add-cluster-role-to-user cluster-admin <user_name>
OpenShift สร้างขึ้นบน Docker และ Kubernetes คอนเทนเนอร์ทั้งหมดสร้างขึ้นที่ด้านบนของคลัสเตอร์ Docker ซึ่งโดยพื้นฐานแล้วบริการ Kubernetes ที่อยู่ด้านบนของเครื่อง Linux โดยใช้คุณสมบัติ Kubernetes orchestrations
ในกระบวนการนี้เราสร้าง Kubernetes master ซึ่งควบคุมโหนดทั้งหมดและปรับใช้คอนเทนเนอร์ไปยังโหนดทั้งหมด หน้าที่หลักของ Kubernetes คือการควบคุมคลัสเตอร์ OpenShift และขั้นตอนการปรับใช้โดยใช้ไฟล์การกำหนดค่าประเภทอื่น เช่นเดียวกับใน Kubernetes เราใช้ kubctl ในลักษณะเดียวกับที่เราใช้ยูทิลิตี้บรรทัดคำสั่ง OC เพื่อสร้างและปรับใช้คอนเทนเนอร์บนโหนดคลัสเตอร์
ต่อไปนี้เป็นไฟล์กำหนดค่าประเภทต่างๆที่ใช้ในการสร้างอ็อบเจ็กต์ประเภทต่างๆในคลัสเตอร์
- Images
- POD
- Service
- ตัวควบคุมการจำลอง
- ชุดจำลอง
- Deployment
รูปภาพ
อิมเมจ Kubernetes (Docker) เป็นส่วนประกอบสำคัญของ Containerized Infrastructure ณ ตอนนี้ Kubernetes รองรับเฉพาะDockerภาพ คอนเทนเนอร์แต่ละอันในพ็อดจะมีอิมเมจ Docker ทำงานอยู่ข้างใน
apiVersion: v1
kind: pod
metadata:
name: Tesing_for_Image_pull -----------> 1
spec:
containers:
- name: neo4j-server ------------------------> 2
image: <Name of the Docker image>----------> 3
imagePullPolicy: Always ------------->4
command: [“echo”, “SUCCESS”] -------------------> 5
POD
พ็อดคือชุดของคอนเทนเนอร์และที่เก็บข้อมูลภายในโหนดของคลัสเตอร์ Kubernetes เป็นไปได้ที่จะสร้างพ็อดที่มีภาชนะหลายอันอยู่ข้างใน ต่อไปนี้เป็นตัวอย่างของการเก็บคอนเทนเนอร์ฐานข้อมูลและคอนเทนเนอร์เว็บอินเตอร์เฟสไว้ในพ็อดเดียวกัน
apiVersion: v1
kind: Pod
metadata:
name: Tomcat
spec:
containers:
- name: Tomcat
image: tomcat: 8.0
ports:
- containerPort: 7500
imagePullPolicy: Always
บริการ
บริการสามารถกำหนดเป็นชุดของพ็อดเชิงตรรกะได้ สามารถกำหนดให้เป็นนามธรรมที่ด้านบนของพ็อดที่ให้ที่อยู่ IP เดียวและชื่อ DNS ที่สามารถเข้าถึงพ็อดได้ ด้วยบริการการจัดการการกำหนดค่าการจัดสรรภาระงานทำได้ง่ายมาก ช่วยให้ POD สามารถปรับขนาดได้ง่ายมาก
apiVersion: v1
kind: Service
metadata:
name: Tutorial_point_service
spec:
ports:
- port: 8080
targetPort: 31999
ตัวควบคุมการจำลอง
Replication Controller เป็นหนึ่งในคุณสมบัติหลักของ Kubernetes ซึ่งมีหน้าที่จัดการวงจรชีวิตของพ็อด มีหน้าที่รับผิดชอบในการตรวจสอบให้แน่ใจว่าจำนวนการจำลองพ็อดที่ระบุกำลังทำงานอยู่ ณ เวลาใดก็ได้
apiVersion: v1
kind: ReplicationController
metadata:
name: Tomcat-ReplicationController
spec:
replicas: 3
template:
metadata:
name: Tomcat-ReplicationController
labels:
app: App
component: neo4j
spec:
containers:
- name: Tomcat
image: tomcat: 8.0
ports:
- containerPort: 7474
ชุดจำลอง
ชุดการจำลองช่วยให้มั่นใจได้ว่าควรจะเรียกใช้พ็อดจำลองจำนวนเท่าใด ถือได้ว่าเป็นการแทนที่ตัวควบคุมการจำลองแบบ
apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
name: Tomcat-ReplicaSet
spec:
replicas: 3
selector:
matchLables:
tier: Backend
matchExpression:
- { key: tier, operation: In, values: [Backend]}
app: App
component: neo4j
spec:
containers:
- name: Tomcat-
image: tomcat: 8.0
ports:
containerPort: 7474
การปรับใช้
การปรับใช้จะได้รับการอัพเกรดและตัวควบคุมการจำลองรุ่นที่สูงขึ้น พวกเขาจัดการการปรับใช้ชุดการจำลองซึ่งเป็นรุ่นอัพเกรดของตัวควบคุมการจำลองด้วย พวกเขามีความสามารถในการอัปเดตชุดข้อมูลจำลองและยังสามารถย้อนกลับไปยังเวอร์ชันก่อนหน้าได้อีกด้วย
apiVersion: extensions/v1beta1 --------------------->1
kind: Deployment --------------------------> 2
metadata:
name: Tomcat-ReplicaSet
spec:
replicas: 3
template:
metadata:
lables:
app: Tomcat-ReplicaSet
tier: Backend
spec:
containers:
name: Tomcat-
image: tomcat: 8.0
ports:
- containerPort: 7474
ไฟล์กำหนดค่าทั้งหมดสามารถใช้เพื่อสร้างออบเจ็กต์ Kubernetes ตามลำดับ
$ Kubectl create –f <file name>.yaml
คำสั่งต่อไปนี้สามารถใช้เพื่อทราบรายละเอียดและคำอธิบายของออบเจ็กต์ Kubernetes
For POD
$ Kubectl get pod <pod name> $ kubectl delete pod <pod name>
$ kubectl describe pod <pod name>
For Replication Controller
$ Kubectl get rc <rc name>
$ kubectl delete rc <rc name> $ kubectl describe rc <rc name>
For Service
$ Kubectl get svc <svc name> $ kubectl delete svc <svc name>
$ kubectl describe svc <svc name>
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการทำงานร่วมกับนักเทียบท่าและ Kubernetes กรุณาเยี่ยมชมกวดวิชา Kubernetes ของเราโดยใช้ลิงค์ต่อไปนี้Kubernetes
การรักษาความปลอดภัย OpenShift ส่วนใหญ่เป็นการรวมกันของสององค์ประกอบที่จัดการกับข้อ จำกัด ด้านความปลอดภัยเป็นหลัก
- ข้อ จำกัด บริบทความปลอดภัย (SCC)
- บัญชีบริการ
ข้อ จำกัด บริบทความปลอดภัย (SCC)
โดยพื้นฐานแล้วจะใช้สำหรับการ จำกัด พ็อดซึ่งหมายความว่าเป็นการกำหนดข้อ จำกัด ของพ็อดเช่นการดำเนินการใดที่สามารถทำได้และทุกสิ่งที่สามารถเข้าถึงได้ในคลัสเตอร์
OpenShift จัดเตรียมชุดของ SCC ที่กำหนดไว้ล่วงหน้าซึ่งผู้ดูแลระบบสามารถใช้แก้ไขและขยายได้
$ oc get scc
NAME PRIV CAPS HOSTDIR SELINUX RUNASUSER FSGROUP SUPGROUP PRIORITY
anyuid false [] false MustRunAs RunAsAny RunAsAny RunAsAny 10
hostaccess false [] true MustRunAs MustRunAsRange RunAsAny RunAsAny <none>
hostmount-anyuid false [] true MustRunAs RunAsAny RunAsAny RunAsAny <none>
nonroot false [] false MustRunAs MustRunAsNonRoot RunAsAny RunAsAny <none>
privileged true [] true RunAsAny RunAsAny RunAsAny RunAsAny <none>
restricted false [] false MustRunAs MustRunAsRange RunAsAny RunAsAny <none>
หากต้องการใช้ scc ใด ๆ ที่กำหนดไว้ล่วงหน้าสามารถทำได้โดยเพียงเพิ่มผู้ใช้หรือกลุ่มลงในกลุ่ม scc
$ oadm policy add-user-to-scc <scc_name> <user_name> $ oadm policy add-group-to-scc <scc_name> <group_name>
บัญชีบริการ
โดยทั่วไปแล้วบัญชีบริการจะใช้เพื่อควบคุมการเข้าถึง OpenShift master API ซึ่งจะถูกเรียกเมื่อคำสั่งหรือคำขอเริ่มทำงานจากเครื่องหลักหรือโหนดใด ๆ
เมื่อใดก็ตามที่แอปพลิเคชันหรือกระบวนการต้องการความสามารถที่ไม่ได้รับอนุญาตจาก SCC ที่ถูก จำกัด คุณจะต้องสร้างบัญชีบริการเฉพาะและเพิ่มบัญชีไปยัง SCC ที่เกี่ยวข้อง อย่างไรก็ตามหาก SCC ไม่ตรงกับความต้องการของคุณคุณควรสร้าง SCC ใหม่เฉพาะสำหรับความต้องการของคุณแทนที่จะใช้ SCC ที่เหมาะสมที่สุด ในท้ายที่สุดตั้งค่าสำหรับการกำหนดค่าการปรับใช้
$ oc create serviceaccount Cadmin $ oc adm policy add-scc-to-user vipin -z Cadmin
ความปลอดภัยของตู้คอนเทนเนอร์
ใน OpenShift การรักษาความปลอดภัยของคอนเทนเนอร์จะขึ้นอยู่กับแนวคิดของความปลอดภัยของแพลตฟอร์มคอนเทนเนอร์และคอนเทนเนอร์กำลังทำงานอยู่ที่ใด มีหลายสิ่งที่เกิดขึ้นในภาพเมื่อเราพูดถึงความปลอดภัยของคอนเทนเนอร์และสิ่งที่ต้องดูแล
Image Provenance - มีการติดตั้งระบบการติดฉลากที่ปลอดภัยซึ่งระบุได้อย่างชัดเจนและไม่เปลี่ยนแปลงว่าคอนเทนเนอร์ที่ทำงานอยู่ในสภาพแวดล้อมการผลิตมาจากที่ใด
Security Scanning - เครื่องสแกนภาพจะตรวจสอบภาพทั้งหมดโดยอัตโนมัติเพื่อหาช่องโหว่ที่ทราบ
Auditing - สภาพแวดล้อมการใช้งานจริงได้รับการตรวจสอบอย่างสม่ำเสมอเพื่อให้แน่ใจว่าคอนเทนเนอร์ทั้งหมดเป็นไปตามคอนเทนเนอร์ที่ทันสมัยและทั้งโฮสต์และคอนเทนเนอร์ได้รับการกำหนดค่าอย่างปลอดภัย
Isolation and Least Privilege- คอนเทนเนอร์ทำงานด้วยทรัพยากรและสิทธิ์ขั้นต่ำที่จำเป็นในการทำงานอย่างมีประสิทธิภาพ พวกเขาไม่สามารถรบกวนโฮสต์หรือคอนเทนเนอร์อื่น ๆ ได้มากเกินไป
Runtime Threat Detection - ความสามารถที่ตรวจจับภัยคุกคามที่ใช้งานอยู่กับแอปพลิเคชันคอนเทนเนอร์ในรันไทม์และตอบสนองโดยอัตโนมัติ
Access Controls - โมดูลความปลอดภัยของ Linux เช่น AppArmor หรือ SELinux ใช้เพื่อบังคับใช้การควบคุมการเข้าถึง
มีวิธีการหลักสองสามวิธีในการเก็บถาวรความปลอดภัยของคอนเทนเนอร์
- การควบคุมการเข้าถึงผ่าน oAuth
- ผ่านเว็บคอนโซลแบบบริการตนเอง
- โดยใบรับรองของแพลตฟอร์ม
การควบคุมการเข้าถึงผ่าน OAuth
ในวิธีนี้การตรวจสอบสิทธิ์การเข้าถึงการควบคุม API จะถูกเก็บถาวรเพื่อรับโทเค็นที่ปลอดภัยสำหรับการพิสูจน์ตัวตนผ่านเซิร์ฟเวอร์ OAuth ซึ่งมาพร้อมกับเครื่องต้นแบบ OpenShift ในฐานะผู้ดูแลระบบคุณมีความสามารถในการแก้ไขการกำหนดค่าของการกำหนดค่าเซิร์ฟเวอร์ OAuth
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการกำหนดค่าเซิร์ฟเวอร์ OAuth โปรดดูบทที่ 5 ของบทช่วยสอนนี้
ผ่านเว็บคอนโซลแบบบริการตนเอง
คุณลักษณะด้านความปลอดภัยของเว็บคอนโซลนี้มีอยู่ในเว็บคอนโซล OpenShift คอนโซลนี้ช่วยให้มั่นใจได้ว่าทีมทั้งหมดที่ทำงานร่วมกันจะไม่สามารถเข้าถึงสภาพแวดล้อมอื่น ๆ ได้หากไม่มีการพิสูจน์ตัวตน multi-telnet master ใน OpenShift มีคุณสมบัติด้านความปลอดภัยดังต่อไปนี้ -
- เปิดใช้เลเยอร์ TCL แล้ว
- ใช้ใบรับรอง x.509 สำหรับการตรวจสอบสิทธิ์
- ยึดคอนฟิกูเรชัน etcd บนเครื่องหลัก
โดยใบรับรองของแพลตฟอร์ม
ในวิธีนี้ใบรับรองสำหรับแต่ละโฮสต์จะถูกกำหนดค่าระหว่างการติดตั้งผ่าน Ansible เนื่องจากใช้โปรโตคอลการสื่อสาร HTTPS ผ่าน Rest API เราจึงต้องมีการเชื่อมต่อที่ปลอดภัย TCL กับส่วนประกอบและวัตถุต่างๆ ใบรับรองเหล่านี้เป็นใบรับรองที่กำหนดไว้ล่วงหน้าอย่างไรก็ตามใบรับรองที่กำหนดเองสามารถติดตั้งบนคลัสเตอร์หลักเพื่อเข้าถึงได้ ในระหว่างการตั้งค่าเริ่มต้นของต้นแบบใบรับรองที่กำหนดเองสามารถกำหนดค่าได้โดยการแทนที่ใบรับรองที่มีอยู่โดยใช้openshift_master_overwrite_named_certificates พารามิเตอร์.
Example
openshift_master_named_certificates = [{"certfile": "/path/on/host/to/master.crt",
"keyfile": "/path/on/host/to/master.key",
"cafile": "/path/on/host/to/mastercert.crt"}]
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีสร้างใบรับรองที่กำหนดเองโปรดไปที่ลิงค์ต่อไปนี้ -
https://www.linux.com/learn/creating-self-signed-ssl-certificates-apache-linux
ความปลอดภัยของเครือข่าย
ใน OpenShift จะใช้ Software Defined Networking (SDN) สำหรับการสื่อสาร เนมสเปซเครือข่ายใช้สำหรับแต่ละพ็อดในคลัสเตอร์โดยแต่ละพ็อดจะได้รับ IP ของตัวเองและช่วงของพอร์ตเพื่อรับทราฟฟิกเครือข่าย ด้วยวิธีนี้เราสามารถแยกพ็อดเนื่องจากไม่สามารถสื่อสารกับพ็อดในโครงการอื่นได้
การแยกโครงการ
ซึ่งสามารถทำได้โดยผู้ดูแลคลัสเตอร์โดยใช้สิ่งต่อไปนี้ oadm command จาก CLI
$ oadm pod-network isolate-projects <project name 1> <project name 2>
ซึ่งหมายความว่าโครงการที่กำหนดไว้ข้างต้นไม่สามารถสื่อสารกับโครงการอื่นในคลัสเตอร์ได้
Volume Security
การรักษาความปลอดภัยระดับเสียงหมายถึงการรักษาความปลอดภัยของ PV และ PVC ของโครงการในคลัสเตอร์ OpenShift ส่วนใหญ่มีสี่ส่วนในการควบคุมการเข้าถึงไดรฟ์ข้อมูลใน OpenShift
- กลุ่มเสริม
- fsGroup
- runAsUser
- seLinuxOptions
Supplemental Groups - กลุ่มเสริมคือกลุ่ม Linux ปกติ เมื่อกระบวนการทำงานในระบบจะรันด้วย ID ผู้ใช้และ ID กลุ่ม กลุ่มเหล่านี้ใช้สำหรับควบคุมการเข้าถึงพื้นที่เก็บข้อมูลที่แชร์
ตรวจสอบการเมาท์ NFS โดยใช้คำสั่งต่อไปนี้
# showmount -e <nfs-server-ip-or-hostname>
Export list for f21-nfs.vm:
/opt/nfs *
ตรวจสอบรายละเอียด NFS บนเมาท์เซิร์ฟเวอร์โดยใช้คำสั่งต่อไปนี้
# cat /etc/exports
/opt/nfs *(rw,sync,no_root_squash)
...
# ls -lZ /opt/nfs -d
drwxrws---. nfsnobody 2325 unconfined_u:object_r:usr_t:s0 /opt/nfs
# id nfsnobody
uid = 65534(nfsnobody) gid = 454265(nfsnobody) groups = 454265(nfsnobody)
/ opt / NFS /ส่งออกสามารถเข้าถึงได้โดยโพสต์454265 และกลุ่ม 2325.
apiVersion: v1
kind: Pod
...
spec:
containers:
- name: ...
volumeMounts:
- name: nfs
mountPath: /usr/share/...
securityContext:
supplementalGroups: [2325]
volumes:
- name: nfs
nfs:
server: <nfs_server_ip_or_host>
path: /opt/nfs
fsGroup
fsGroup ย่อมาจากกลุ่มระบบไฟล์ซึ่งใช้สำหรับการเพิ่มกลุ่มเสริมคอนเทนเนอร์ ID กลุ่มเสริมใช้สำหรับพื้นที่เก็บข้อมูลที่ใช้ร่วมกันและ fsGroup ใช้สำหรับบล็อกที่เก็บข้อมูล
kind: Pod
spec:
containers:
- name: ...
securityContext:
fsGroup: 2325
runAsUser
runAsUser ใช้ ID ผู้ใช้สำหรับการสื่อสาร สิ่งนี้ใช้ในการกำหนดอิมเมจคอนเทนเนอร์ในนิยามพ็อด ผู้ใช้ ID เดียวสามารถใช้ได้ในทุกคอนเทนเนอร์หากจำเป็น
ในขณะที่เรียกใช้คอนเทนเนอร์รหัสที่กำหนดจะจับคู่กับ ID เจ้าของในการส่งออก ถ้า ID ที่ระบุถูกกำหนดไว้ภายนอก ID นั้นจะกลายเป็นโกลบอลสำหรับคอนเทนเนอร์ทั้งหมดในพ็อด หากมีการกำหนดด้วยพ็อดเฉพาะมันจะกลายเป็นเฉพาะสำหรับคอนเทนเนอร์เดียว
spec:
containers:
- name: ...
securityContext:
runAsUser: 454265