OpenShift - คลัสเตอร์

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 - อัพเกรด ฯลฯ กับปรมาจารย์ทั้งหมด

$ 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