มาเล่น Ubuntu MaaS กัน

MaaS หรือ Metal as a Service เป็นเครื่องมือจัดการเครื่องเซิร์ฟเวอร์ในการ provisioning, config และ deploy application โดยใช้แนวคิดของ Cloud Computing มาประยุกใช้กับเครื่องเซิร์ฟเวอร์จริงๆ ซึ่งเป็นแนวคิดแบบใหม่ในการจัดการเซิร์ฟเวอร์เลยทีเดียว MaaS สามารถใช้งานร่วมกับ Juju ได้ทำให้คุณสามารถใช้ Charm ในการ config และ deploy application ได้ง่ายๆ เลยทีเดียว
MaaS มีมาตั้งแต่ Ubuntu 12.04 LTS และหลังจากผมเป็นหนูทดลองมา 6 รุ่น 12.04, 12.04.1, 12.04.2. 12.03, 12.10 และ 13.04 ดูเหมือนว่ารุ่น 13.10 มีความสเถียรมากขึ้น และ Juju ก็รุ่นสำหรับ Mac OSX และ Windows แล้วและทำงานได้ดีขึ้นก็เลยได้โอกาสกลับมาเล่น MaaS อีกรอบ (รอบที่ 7)
โครงสร้างเน็ตเวิร์คที่ผมใช้เป็นแบบนี้ เอาคร่าวๆ เราจะมี MaaS Controller + Region 1 ตัว และ Node อีก X ตัว ผมหาได้แค่ 3 เครื่องเอามาทดลองจากแผนภาพผมพยายามแยก เน็ตเวิร์คออกจากเน็ตเวอร์ภายในเพราะเราจะใช้วิธีการ PXE Boot เพื่อ register node, config และติดตั้ง Ubuntu Server เพื่อรอใช้งานร่วมกับ Juju

เริ่มที่เครื่อง MaaS Controller ก่อน NIC มี 2 ขา ขานอกต่อออกเน็ตได้และอยู่ในวงเดียวกับเครือข่ายภายใน ส่วนอีกขาต่อกับเครื่อง Node 3 เครื่อง ใช้ Ubuntu 13.10 Server amd64 ติดตั้ง MaaS Controller ดังนี้ เมื่อบูตเครื่องเลือก Multiple Server Install with MAAS

รอโปรแกรมอ่านแผ่นตอบคำถามโน่นนี่จากนั้นตัวติดตั้งจะถามว่าจะติดตั้งเครื่องนี้จาก MaaS Server หรือติดตั้ง MaaS Server ใหม่ลงเครื่องนี้ ก็เลือกอันที่ 2 ครับ

ติดตั้งไปเรื่อยๆ เครื่องจะแจ้งหมายเลข ip address และ service endpoint ของ api ให้ตรวจสอบและติดตั้งให้เสร็จ จากนั้นให้ config เน็ตเวิร์คขาในให้เป็น static ip แล้วสร้าง superuser ให้กับ MaaS ดังนี้
sudo maas createsuperuser
จากนั้นติดตั้ง maas-dhcp และ maas-dns เพื่อให้ MaaS Server เป็นตัวจัดการเรื่อง dhcp และให้เครื่อง Node boot ผ่าน network เข้ามา เปิดเบราเซอร์ไปที่ Web Console ของ MaaS Server (172.16.29.147) ดังนี้ http://172.16.29.147/MAAS ใส่ username, password ตามที่ได้ตั้งค่าเอาไว้ เปิดไปที่ user preference เพิ่ม ssh key ให้เรียบร้อย

เปิดไปที่ Setting กำหนด รุ่นของ Ubuntu ที่ต้องการใช้งาน แนะนำให้เลือก Ubuntu 12.04 เอาไว้เนื่องจาก Charm ส่วนใหญ่อิง Ubuntu 12.04 ครับ อ้ออย่าลืมกำหนด repo ใกล้บ้านไว้ด้วย

ตั้งค่า Cluster Controller เพิ่ม NIC ขาในให้คุม DHCP


จากนั้นมาตั้งค่า config ในไฟล์ /etc/maas/import_pxe_files ดังนี้
RELEASES="precise saucy"
ARCHES="i386/generic amd64/generic"
LOCALE="en_US"
IMPORT_EPHEMERALS=1
และ ในไฟล์ /etc/maas/import_ephemerals ดังนี้
DATA_DIR="/var/lib/maas/ephemeral"
RELEASES="precise saucy"
ARCHES="i386/generic amd64/generic"
สาเหตุที่ต้องมาแก้ไขไฟล์ทั้ง 2 เพื่อกำหนดรุ่นของ Ubuntu และ architecture ที่เราต้องการจริงๆ ต้องการ precise, saucy ทั้ง i386 และ amd64 จากนั้นใช้คำสั่ง
maas-import-pxe-files
เพื่อสั่งให้ download ไฟล์สำหรับใช้ boot ผ่าน network หรือที่เรียกว่า pxe boot เมื่อดาวน์โหลดไฟล์สำหรับ boot เสร็จโปรแกรมจะดาวน์โหลด ephemeral image ต่อ ประมาณ 1.2GB ได้แก่ precise i386, amd64 และ saucy i386, amd64 ถ้าใช้เฉพาะ amd64 ก็ไปแก้ config ข้างต้นได้ครับ รอจนดาวน์โหลดเสร็จ
จากนั้นให้คุณทะยอยเปิดเครื่อง Node ทีละเครื่องแล้วสั่งให้ Boot ผ่าน LAN ถ้าจะให้ดีตั้งค่า boot order ไว้อันดับแรกๆ เมื่อเครื่อง Node boot ก็จะได้รับ IP Addres ที่เครื่อง MaaS Controler จ่ายมาพร้อม Boot ผ่านเน็ตเวิร์ค สถานะของ Node เมื่อ boot และ config ค่าเบื้องต้นเสร็จเราจะเรียกว่า Commisioning เมื่อผ่านสถานะนี้ จะเข้าสถานะ Ready และจะมีข้อมูลของ Node อยู่ในหน้า Node จากนั้นเครื่อง Node จะ Sleep ในกรณีที่เครื่อง Node สนับสนุน Wake on LAN เราจะสามารถปลุกเครื่อง Node ได้เมื่อสั่ง Start ที่หน้า Web Console หรือสั่ง Juju bootstrap ถ้าเครื่อง Node ไม่มีคุณสมบัติที่ว่านี้ ต้องเปิดเครื่องเองอีกรอบเพื่อเข้าสู่สถานะ Ready อีกครั้ง คุณจะพบว่าเครื่อง Node ติดตั้ง Ubuntu Server เรียบร้อยหมดแล้ว

ลืมบอกไปว่าถ้าเราใช้ pxe boot แบบปกติ MaaS จะติดตั้ง Ubuntu Server ผ่าน net install ซึ่งจะช้ามาก ให้เรากำหนดให้ใช้ ephemeral image เป็นตัวติดตั้งจะเร็วกว่ามาก วิธีการง่ายๆ ก็คือไปหน้ารายการ Node แล้วเลือกทั้งหมด แล้วกำหนดให้ใช้ fast installer จากนั้น reboot เครื่อง Node อีกรอบ คราวนี้็ MaaS จะติดตั้ง Ubuntu Server ให้เร็วมากขึ้น กลับไปดูหน้า Web Console เราจะพบว่าเรามี 1 Node แล้ว ทีนี้ทะยอย Boot เครื่อง Node มาเรื่อยๆ จนครบ

จากนั้นก็ติดตั้ง Juju ตามปกติ ตั้งค่าใช้ MaaS ในไฟล์ ~/.juju/environments.yaml

  • maas-server เอาค่า IP Addres หรือ FQDN มาใส่
  • maas-oauth เอา MaaS Key มาใส่
  • admin-secret กำหนดรหัสผ่านที่คุณจำได้ เอาไว้ config application ตอน deploy

จากนั้นใช้คำสั่ง
juju switch maas
เพื่อเปลี่ยนไปใช้ config ของ MaaS จากนั้นก็ใช้คำสั่ง bootstrap ตามปกติดังนี้
juju bootstrap
ให้รอสักพัก Juju จะไปหา Node สักเครื่องแล้วติดตั้ง MongoDB เพื่อใช้เก็บค่าสถานะของ node ที่อยู่ใน cluster ถ้ากลับไปดูที่หน้า Web Console เราจะพบว่า Juju ยึดเครื่องเราไปแล้ว 1 ตัว

เมื่อใช้คำสั่ง juju status ก็จะพบว่ามี Node พร้อมทำงานแล้ว

จากนั้นก็ใช้ Juju deploy application ตามปรกติ ถ้าใช้ command line แล้วดูยุ่งยากก็สามารถติดตั้ง Juju GUI เอาไว้ใช้งานได้ครับ 🙂
 

มาเล่น Docker กัน

เขียนเรื่อง Docker คร่าวๆ ไว้เมื่อเดือนกรกฎาคมที่ผ่านมา ไม่ได้แนะนำการใช้งาน ครั้งนี้มาลงในรายละเอียดกันว่าจะเล่นอะไรได้บ้าง เนื้อหาของจะครอบคลุมดังนี้

  • ติดตั้ง Docker
  • ใช้งาน Docker เบื้องต้น
  • สร้าง Image จาก Dockerfile
  • ใช้ Hipache ทำ redirect + loadbalance ไปยัง Docker container

มาเริ่มจากการติดตั้งกันก่อน ใช้ Ubuntu 12.04 LTS เหมือนเดิม อัพเกรดให้เรียบร้อย จากนั้นมาติดตั้ง Docker กัน Docker ต้องใช้ kernel ที่มี cgroup ซึ่งใน Ubuntu 12.04 ในส่วนของ kernel ยังไม่มี cgroup เพราะฉะนั้นต้องอัพเกรด kernel และ reboot เครื่อง 🙂
Continue reading มาเล่น Docker กัน

มาติดตั้ง OpenShift Origin เล่นกัน

OpenShift เป็น Platform as a Service พัฒนาโดย RedHat ซึ่งนำแนวคิดการพัฒนา PaaS โดยไม่พึ่งพาการทำ Multi Tenant โดยใช้ VM แต่ใช้ Kernel Control Group, Namespace และ SELinux เป็นตัวแบ่ง Tenant ให้แต่ละ Application ทำงานแทนการใช้ VM ทำให้โครงสร้างของ OpenShift แตกต่างจาก PaaS ตัวอื่นๆ อย่างชัดเจน OpenShift ใช้ Gear แทน Application ของผู้ใช้ ซึ่งใน 1 Gear จะมีส่วนประกอบไปด้วย Code ของ Application, Git Repository, Application Environment และ Cargtride ที่เป็น Application Runtime, ฐานข้อมูล, Jenkins Server สำหรับทำ CI และ HA Proxy สำหรับทำ Load balance ระหว่าง Gear และรองรับการทำ Elastic Scale ผ่าน HA Proxy นอกจากนี้ยังสร้าง domain name จาก namespace ที่กำหนดให้โดยผู้ใช้ให้อีกด้วย ใครสนใจเรื่อง Architecture เข้าไปอ่านในเว็บ OpenShift กันได้
OpenShift แบ่งรุ่นบริการออกเป็น 3 รุ่น คือ

  • OpenShift Origin เป็นโอเพนซอร์สสามารถเข้าร่วมพัฒนาได้
  • OpenShift Enterprise เป็นรุ่น Enterprise ติดตั้งผ่าน RHEL Repository
  • OpenShift Online เป็นบริการออนไลน์บน openshift.com

OpenShift สามารถติดตั้งได้บน RedHat Enterprise Linux และ Fedora สำหรับ Linux Distribution อื่น เอา ไฟล์ spec+source ไป build package เอาเอง T_T
วิธีการติดตั้ง OpenShift ทำได้ 2 วิธี

ถ้าอยากลองเล่น OpenShift ก็สามารถลงทะเบียนเข้าใช้งานที่ OpenShift Online ได้ฟรี สำหรับการติดตั้งแบบง่ายๆ ก็คงหนีไม่พ้น Puppet ครั้งนี้ใช้ Fodora 19 ติดตั้งแบบ Command Line และ Developer Tools อ้อ ลืมบอกไปว่าเราจะติดตั้งแบบง่ายที่สุดคือมี broker+node+console ในเครื่องเดียวกัน ใครสนใจติดตั้งแบบอื่น ตามลิงค์ได้ที่ท้ายบทความ หลังจากติดตั้ง Fedora 19 แล้วก็ติดตั้ง Puppet ดังนี้
yum install -y --nogpgcheck http://yum.puppetlabs.com/puppetlabs-release-fedora-19.noarch.rpm
เนื่องจากเราจะใช้ mcollective และ activemq ของ OpenShift Origin ดังนั้นต้องไปตั้งค่า exclude ไว้ใน repo ของ puppet โดยแก้ไขไฟล์ /etc/yum.repo.d/puppetlabs.repo ใส่ค่า exclude=*mcollective* activemq ต่อท้ายทุกๆ repo ในไฟล์ puppetlabs.repo จากนั้นตั้งติดตั้ง puppet และเครื่องมือที่ต้องใช้
yum install -y puppet facter tar httpd-tools
จากนั้นติดตั้ง puppet module ดังนี้
puppet module install puppetlabs/ntp
puppet module install puppetlabs/stdlib
puppet module install openshift/openshift_origin
ติดตั้ง Bind และสร้าง TSIG Key
yum install -y bind
สร้าง TSIG Key ให้ domain ของคุณ ในกรณีนี้ใช้เป็น example.com ถ้าไม่ชอบก็สามารถเปลี่ยนเป็น domain ที่คุณต้องการได้
/usr/sbin/dnssec-keygen -a HMAC-MD5 -b 512 -n USER -r /dev/urandom -K /var/named example.com
cat /var/named/Kexample.com.*.key | awk '{print $8}'
คุณจะได้ค่า Key หน้าตาแปลกๆ แบบนี้ Mczfz277B5ykcPB4mAurZtZMhmXV6g== ให้จดเอาไว้ แล้วสร้าง config ชื่อ openshift_origin.pp ดังนี้

แก้ไฟล์ config ตามค่าที่คุณต้องการ เช่น domain, bind key เป็นต้น ใน config ผมกำหนดให้ puppet ติดตั้ง Cartridge แค่ PHP, PHPMyAdmin, MariaDB และ HAProxy เพื่อความรวดเร็ว เมื่อได้ไฟล์ config กันแล้ว ก็สั่งให้ puppet ทำงานดังนี้
puppet apply --verbose openshift_origin.pp
ระหว่างนี้ก็นั่งรอครับ ประมาณครึ่งชั่วโมง T_T ถ้าไม่มี Error ตัวแดงๆ ก็เป็นอันใช้ได้ เมื่อติดตั้งเสร็จให้ reboot เครื่องแล้ว เปิด browser ไปที่ http://broker.example.com/console

OpenShift จะถาม username และ password ใส่ openshift, password จากนั้นก็ใช้งานตามปกติ
ลิงค์ที่น่าสนใจ

เก็บภาษีดาวน์โหลด App จาก App Store และ Google Play

ข่าวเรื่องกรมสรรพากรปิ๊งไอเดียจัดเก็บภาษีดาวน์โหลดแอพพลิเคชันจาก App Store และ Google Play พออ่านแล้วรู้สึกสลดใจ กรมสรรพากรคิดเพียงแค่ตัวเลข แต่ไม่มองถึงความเป็นจริงที่ว่า นักพัฒนาคนไทยยังขาย App บน Play Store ไม่ได้ ที่ร้ายกว่านั้นคือ Apple ID ในไทยซื้อหนังสือใน US ไม่ได้ เรื่องการเก็บภาษี App ต้องหักจากรายได้ที่เข้า App Store และ Google Play เท่านั้น เพราะเงินไม่ได้เข้ากระเป๋านักพัฒนาโดยตรงทุกครั้งที่ขาย App ได้ แต่จะทะยอยเข้าเป็นรอบๆ ซึ่งรายได้ที่นักพัฒนาจะได้จะถูกหักค่าธรรมเนียม 30% ด้วย เช่น ขาย App 100 บาท 70 บาทเข้ากระเป๋านักพัฒนา ส่วน 30 บาทเข้า Google หรือ Apple เป็นต้น ผมคิดว่าให้คนไทยได้มีโอกาสขาย App บน Play Store ให้ได้ก่อนจะดีกว่า ส่วน App Store นั้นคนไทยเอา App ขึ้นขายได้นานแล้ว ไปเก็บกับ iOS Developer ก่อนละกันนะ

วิธีทำซอสเทอริยากิ

ช่วงนี้ไปกินข้าวไข่ข้นไก่ยากิโทริบ่อยมากกินแทบทุกอาทิตย์ ก็เลยอยากรู้ว่าซอสเทอริยากิที่ราดไข่ข้นทำยังไง ลองหาข้อมูลจาก Google ไปเจอสูตรจาก Pantown ดูรายละเอียดแล้วน่าจะทำง่ายไม่ยุ่งยากมากนัก
ส่วนผสมที่ใช้

  • ซอสถั่วเหลือง Kikkoman 1 ถ้วย
  • Sake (เหล้าญี่ปุ่น) 1 ถ้วย
  • Mirin 1/2 ถ้วย
  • ขิงสับละเอียด 2 ช้อนโต๊ะ
  • น้ำมันงา 1 ช้อนโต๊ะ
  • น้ำตาลทรายแดง 1/4 ถ้วย
  • งาคั่ว 2 ช้อนโต๊ะ

วิธีทำ

  • ผสมซอสถั่วเหลือง kikkoman, Sake, Mirin, ขิงสับ, น้ำมันงา
  • อุ่นซอสที่ผสมให้ร้อนนิดหน่อย ใส่น้ำตาลทรายแดงคนให้ละลาย (ถ้าอยากได้หวานเพิ่มชิมแล้วเติมน้ำตาลเพิ่มได้)
  • กรองเอาขิงออก
  • ผสมงาคั่วลงไปในซอส

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

Cloud Specialist เทอม 2 เรียนอะไรบ้าง

เข้าช่วงเทอม 2 ของการเรียน Cloud Specialist ที่มหาวิทยาลัยมหิดล เรียนจบไป 1 เทอมรู้สึกได้เลยว่าเหมือนการเรียนในมหาวิทยาลัยก็เลยรู้สึกเบื่อๆ กับการเรียนนิดหน่อย อ่ะ เข้าเรื่อง เทอม 2 นี้จะเรียนเกี่ยวกับ Virtualization และ Security ซึ่งในเทอมแรกเรียนเรื่อง Cloud Technology และ Cloud Architect กันไปแล้ว เทอมนี้ก็จะเริ่มมาลงลึกเรื่องของ Virtualization ว่าอะไรที่สามารถทำ Virtual ได้บ้าง มันทำงานอย่างไร และจะทำแบบนั้นได้อย่างไร ซึ่งเนื้อหาหลักๆ ก็จะครอบคลุมเรื่อง Compute, Storage และ Network เป็นหลัก ส่วนเรื่อง Security ก็จะมาดูว่า Security ในแต่ละส่วนจะตรวจสอบได้อย่างไร และจะ patch อย่างไร ใครสนใจเรื่องไหนก็ฝากคำถามมากับผมได้ครับ เผื่อช่วงนั้นอาจจะตั้งใจเรียนเป็นพิเศษ ;P

หมดไป 1 เทอมกับ Cloud Specialist

ผมเรียน Cloud Specialist มาครบ 1 เทอม รู้สึกว่าไม่ค่อยมีความสามารถด้านเทคนิคในส่วนของ Cloud Computing มากขึ้นเท่าไร แต่มีความรู้ฝั่งทฤษฎีมาถมช่องโหว่ในสมองให้ทึบมากยิ่งขึ้น ซึ่งก็ไม่ได้ช่วยให้เกิดแนวความคิดในการ “ทำเงิน” หรือแนวทางที่จะ “ช่วย” ผู้ประกอบการธุรกิจซอฟต์แวร์ในบ้านเราสักเท่าไรนัก ก็อย่างที่ทราบกันหลักสูตรนี้เน้นไปที่ Private Cloud ในส่วน Infrastructure as a Service เป็นหลักซึ่งไม่ค่อยเกิดประโยชน์เท่าไรนักกับคนที่ต้องการสร้าง Innovation ในรูปแบบของซอฟต์แวร์
โดยรวมๆ คอร์สนี้สร้างปัญหาให้กับผมมากกว่าเพราะต้องคอยย้อนอดีตสลับโหมด 4 คน กลับไปมา เพื่อทำในส่วน System Admin, Network Admin, Distributed Storage, Virtualization ซึ่งเหนื่อยพอดู ซึ่งจริงๆ แล้วความรู้พื้นฐานเหล่านี้ควรจะเก็บไว้ในใจว่าในอดีตมันมีสิ่งเหล่านี้ และเราเรียนรู้จากอดีตว่ามันเป็นอย่างไร มันมีบทสรุปที่ชัดเจนอย่างไร สิ่งที่สำคัญที่สุด คือ เราจะใช้ Cloud Computing แต่ละ Service Model ไม่ว่าจะเป็น IaaS, PaaS ให้ “คุ้มค่า” และ “ทำเงิน” ได้อย่างไร และเรียนรู้ที่จะพัฒนา SaaS สร้าง Software Innovation ใหม่บนโมเดลธุรกิจแบบใหม่ สร้าง “ผลกำไร” มากขึ้นและ “ยั่งยืน” ได้อย่างไร นั่นคือสิ่งที่สำคัญ
ไม่ต้องแปลกใจ Cloud Computing เป็นการรวมวิชาหลากหลายเข้ามารวมกัน สมัยเมื่อ 5 ปีที่แล้วผมก็ปะติดปะต่อ ความรู้พื้นฐานเหล่านี้พร้อมเรียนรู้เรื่อง Cloud Computing จากเครื่องมือที่มีอยู่ ไม่ว่าจะเป็น Amazon Web Service, OpenNebula, Eucalyptus เป็นต้น ทำให้รู้ว่าองค์ประกอบต่างๆ ที่เราต้องไปค้นหาต่อมันมีอะไรบ้าง และได้เรียนและเล่นมาระดับหนึ่ง การที่ได้ย้อนกลับไปเล่นและลองสิ่งที่ผ่านมาเกือบๆ 5 ปี มันเป็นเรื่องที่ไม่น่าสนุกเท่าไร มันกลายเป็นคำถามว่าทำไมไม่ก้าวไปข้างหน้า เรียนรู้สิ่งใหม่ สร้างและพัฒนาสิ่งใหม่ๆ ให้เกิดขึ้น