ติดตั้ง OpenShift Origin แบบ Bare metal
ได้เครื่องมาใหม่เลยอยากลองทำ cluster เพราะก่อนหน้านี้ประสบปัญหาเรื่องเวลาเครื่องถึง life cycle หรือมีปัญหาเราก็ต้องมี setup ทุกอย่างใหม่หมด ตั้งแต่ลง os library compiler bra… ประกอบกับอยากลองเจ้า k8s แบบจริงๆจังๆซักทีเพราะก่อนหน้านี้ใช้ docker run อย่างเดียวไม่ค่อยลองใช้พวก docker orchestra เลยมากสุดก็ docker-compose วันนี้ถือว่าฤกษ์งามยามดีได้เวลามาติดตั้ง k8s cluster กัน
หลังจากได้พยายามศึกษาและปรากฏว่ามีคนแนะนำใน Telegram DevOps Thailand ว่าลองใช้เจ้า Openshift สิ หลังจากได้เศษขนมปังที่โรยทิ้งไว้ก็ใช้เวลา 2 วันในการอ่านข้อมูลทั้งหมดจึงได้เป็นบทความนี้ขึ้นมา
เลือกวิธีการติดตั้ง
ในการติดตั้งผมเลือกใช้ ansible เป็นเหมือนคัมภีย์วิทยายุทธวัดเส้าหลินเลย ประมาณว่าพระเอกเจอคำภีย์กลายเป็นจอมยุทธเลย ansible ก็เหมือนกันผมเจอปุ๊ปกลายเป็นจอมยุทธด้าน openshift เลย เล่าเยอะเสียเวลา ทีนี้ก็ต้องเลือกกระบวนท่าครับว่า infra เราจะอยู่อย่างไรครับมีอะไรบ้าง ดูได้ https://docs.openshift.com/enterprise/3.0/install_config/install/advanced_install.html ทีนี้เลย ซึ่งประบวนท่าที่มีอยู่ก็มีตัวอย่างหลายกระบวนท่า แต่ของผมเล็กไม่ใหญ่มาก ก็เลือก Single Master and Multiple node ครับ โดยของผมจะมี 1 Master และทดลองกับอีก 2 Node บทความหน้าจะลองเอาอีก 2 node เข้ามาเชื่อมต่อครับ ตามรูปครับ(มาจากต้นทางเลยนะครับ)
การแบ่งพาทิชัน(Partitions)
เครื่องที่ผมใช้เป็น R610 มี ssd 250GB ทำ Raid5 ไว้แสดงว่าผมจะมีพื้นที่ให้เล่นประมาณ 500Gb ครับซึ่งทาง Noc ลงเค้าแบ่ง partition ไว้ให้ผมละดังนี้
สิ่งที่ผมต้องทำคือผมจะต้องวางในส่วนของโครงสร้าง partition ใหม่ครับ ซึ่งของผมเป็น Raid ดังนั้นผมแค่จัดการกับ LVM ใหม่ก็ได้เลยส่วนใครที่เป็น Pysical Volumn ลองหาวิธีดูนะครับ ซึ่งถามว่าเราควรให้ Size เท่าไรควรอ่านเรื่อง docker-storage-setup ซึ่งมันแล้วแต่ขนาดและความต้องการของเราเลย เอาเป็นว่าผมเลือกจาก LVM ที่ผมมีอยู่แล้วนะครับ แต่ผมต้องทำการ resize /home ให้เล็กลงและ create vg สำหรับ docker ครับ
# mkdir /home2
# mv /home/* /home2
# umount -fl /home
# lvremove /dev/centos/home
# mv /home2 /home
ง่ายๆคือผมย้าย /home ไปไว้ที่ /home2 จากนั้นก็ umount /home แล้วก็ลบ lv ออกครับต้นทาง
ผม fdisk -l แล้ว /dev/sda ผมมีอยู่ 499GB ใช้ไป 2 partition คือ /dev/sda1 และ /dev/sda2 ครับซึ่งผมจะเหลือพื้นที่ประมาร 499–53.7–16.9 ~ 428GB ซึ่งผมจะแบ่งเป็น vg สำหรับ docker ประมาณ 270GB และเหลือไว้ 150GB ไว้ทำ Glusterfs กันครับ(persistance storage) ผมเลือกใช้ท่า 3 (thin pool) หรือการให้ใช้ free space ใน volumn group เดี่ยวกับ root ครับ
lvcreate -n nfs -L 150GB centos //สร้าง 150gb ที่เหลือไว้ทำ thin pool
ติดตั้ง docker และ package ต่างๆ
ข้อมูลการติดตั้งทั้งหมดสามารถดูได้จาก docs ซึ่งจะมี command line ต่างๆ และ package ต่างๆ ที่เราต้องลงอยู่แล้ว ซึ่งเราต้องเลือกระหว่างจะใช้ package base installer กับ atomic installer ซึ่งผมเลือก base package ครับ
$ yum install wget git net-tools bind-utils yum-utils iptables-services bridge-utils bash-completion kexec-tools sos psacct
$ yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ sed -i -e "s/^enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo
$ yum -y --enablerepo=epel install ansible pyOpenSSL
$ yum update
$ reboot
หลังจากนั้นก็มาทำการติดตั้ง docker และก็จัดการเรื่อง thin-pool กัน
# yum install docker-1.13.1
# vi /etc/sysconfig/docker-storage-setup
STORAGE_DRIVER=devicemapper
# docker-storage-setup
# lvs
จะได้ผลลัพธ์ประมาณนี้ครับ ทำให้หมดทั้ง 3 เครื่องครับ
สุดท้ายก็สั่ง run service docker ครับ
systemctl enable docker
systemctl start docker
systemctl is-active docker จะขึ้น active
การให้สิทธิเครื่อง Master สามารถ remote ไปยังเครื่องลูกโดยใช้ public key/privatekey
เพื่อความสะดวกในการใช้งานผมจะ define เครื่องแต่ละเครื่องเพื่อนใช้งานซึ่งทำให้เหมือนกันทั้ง 3 เครื่องนะครับ ส่วน ip ก็ตามที่ใช้จริงครับ
vi /etc/hosts
192.168.1.x . zm-master
192.168.1.x . zm-node1
192.168.1.x . zm-node2
เราใช้ feature ของ ssh ที่สามารถ login โดยการใช้งาน public key ครับ
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub root@zm-node1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@zm-node2
ไฟล์ตั้งค่า OpenShift Cluster
สำหรับการตั้งค่าสามารถตั้งค่าได้โดยการแก้ไขไฟล์ /etc/ansible/hosts ซึ่งผมจะอธิบายด้านล่าง
# Create an OSEv3 group that contains the masters and nodes groups[OSEv3:children]
masters
nodes
etcd# Set variables common for all OSEv3 hosts[OSEv3:vars]# SSH user, this user should allow ssh based auth without requiring a password
ansible_ssh_user=root #user ที่ใช้ install ควรเป็น root ครับ
ansible_become=true
openshift_docker_additional_registries=['registry.access.redhat.com','docker.io']
openshift_master_default_subdomain=xxx.zchoolmate.com
openshift_master_cluster_hostname=console.zchoolmate.com
openshift_master_cluster_public_hostname=console.zchoolmate.comopenshift_deployment_type=origin# allow unencrypted connection within cluster
openshift_docker_insecure_registries=172.30.0.0/16# host group for masters[masters]
console.zchoolmate.com openshift_schedulable=true containerized=false
[etcd]
console.zchoolmate.com
# host group for nodes, includes region info
[nodes]
console.zchoolmate.com openshift_node_group_name='node-config-master-infra'
node1.zchoolmate.com openshift_node_group_name='node-config-compute'
node2.zchoolmate.com openshift_node_group_name='node-config-compute'
openshift_master_default_subdomain เป็น default subdomain ที่ต้องการให้ app ที่เรา deploy ใน openshift สร้างใช้เช่น app.apps.zchoolmate.com
openshift_master_cluster_hostname เป็น url node master ของเรา
openshift_docker_insecure_registries เป็นการสร้าง network ภายในที่ใช้ใน cluster
แก้ DNS domain ของเรา
ก่อนติดตั้งก็ต้องแก้ sub domain ของเราให้มาที่ master node เรานะครับ ผมใช้ cloudflare.com ถ้าเราใช้ dns ไหนอีกก็ add record นะครับตามตัวอย่าง
Ansible-playbook เดชคัมภียร์เทวดา
ถ้าได้ใช้แล้วบอกได้เลยว่ามันคือเคล็ดวิชาเทวดาจริงๆ คำสั่งเดียว คุณจะสำเร็จวิทยายุทธ Openshift ทันที(ระหว่างนั้นผมเจอ error เยอะพอสมควร)
# cd ~
# git clone https://github.com/openshift/openshift-ansible
# cd openshift-ansible
# git checkout release-3.10
# ansible-playbook ~/openshift-ansible/playbooks/deploy_cluster.yml
หลังจากใช้กระบวนท่านี้ก็ให้รออย่างเดียวครับ ระหว่างรอผมเจอ error มากมายเพราะว่าดันไปใช้ version ล่าสุดซึ่งมี issue พอสมควรแต่พอมาใช้ 3.10 error ก็สามารถ resolve ได้ครับ โดยการใช้วิธี restart ทั้ง master และ node แล้วค่อยมารัน ansible-play ไปทีละ step สามารถดู step ที่ deploy_cluster รันได้จาก individual run ผมต้องรันทีละอันตั้งแต่ install master เลยครับ ถ้าเกิดว่าพวก glusterfs ไม่ผ่านไม่ต้องสนใจนะครับเพราะว่าไม่ได้ config glusterfs
หลังจากคุณอดทนรอ(เล่นเกมส์ไปพลางๆ)ก็จะได้พบกับเจ้า Openshift Orgin กันละครับมันก็ชื่นใจ
การสร้าง User เข้าใช้งาน
สุดท้ายแต่ไม่ท้ายสุดในบทความนี้คือการสร้าง user สำหรับการใช้งานระบบครับ
# htpasswd -c /etc/origin/master/htpasswd admin
New password:
Re-type new password:
Adding password for user admin
หลังจากสร้าง admin แล้วก็จะต้องให้สิทธิ admin ในการเข้าถึง container ทุกตัวที่รันในระบบครับ
oc adm policy add-cluster-role-to-user cluster-admin admin cluster role "cluster-admin" added: "admin"
ขอบคุณบทความต้นทาง