ทดสอบการใช้งาน OpenShift 4.2 (OCP4)

OCP4 (OpenShift 4.2)

สวัสดีครับ หลังจากที่ทดลองใช้งาน OpenShift 4.2 มาเดือนกว่าๆ ตั้งแต่เริ่มต้น Prepair Architecture
และร่วมกับ Vendor จากทาง Red Hat (MFEC) ทำการ Install ตลอดจนการแก้ไข จนเริ่มต้นใช้งานได้
เลยจะมาเขียนสรุปไว้เป็นความคิดเห็นสำหรับผู้ที่สนใจ จะใช้งานตัว OpenShift Container Platform (OCP4)

สำหรับตัว OpenShift 4.2 มีอะไรใหม่ๆ ออกมาเพิ่มเติมจาก 3.xx เยอะมาก อ่านรายละเอียดได้ที่
https://blog.openshift.com/introducing-red-hat-openshift-4-2-developers-get-an-expanded-and-improved-toolbox/

ในความคิดเห็นส่วนตัว สำหรับผม ที่ได้ลองเล่น ลองผิดลองถูกมาบ้าง ขอแบ่งเป็นข้อๆ ดังนี้

ข้อดี
– เป็น Enterprise Container Platform สำหรับ On-Premise ที่มี Support จาก Red Hat
– ใช้งานง่าย มี Template สำหรับหลายๆ Language ยอดนิยม, Database ที่เป็น Open Source และ CI/CD Tools
– มี Web Console ที่มี UI ใช้งานได้ง่าย แบ่งเป็น 2 Level คือ Developer/Admin
– มี CLI “oc” ที่ใกล้เคียงกับ “kubectl” ทำให้ใช้งานได้สะดวกสำหรับ คนที่ใช้ k8s มาก่อน
– สามารถ build microservices ได้จากหลากหลายวิธี จาก git และ template ที่มีมาให้
– สามารถมันจัดการ route ระดับ ingress ได้ดีมาก เราสามาถสำหนด endpoint ที่ต้องการได้ (HAProxy)
– มี Topology ที่ทำให้เห็น รายละเอียด และความสัมพันธ์ ระดับ service ได้ชัดเจน และจัดการตรงนี้ได้เลย
– มี Service Mesh ที่ทำให้รู้รายละเอียด ระดับ traffic ของแต่ละ service (Istio, Kiali and Jaeger)
– มี Images registry build-in มาด้วยในตัว
– มี Cloud-native CI/CD with Pipelines (Tekton) หรือจะใช้ Jenkins ด้วยก็ได้
– มี Dashboard และ Monitoring ที่ละเอียดจาก Grafana + Prometheus
– การใช้งานง่าย เหมาะสำหรับผู้เริ่มต้นใช้งาน Container
– Documents ตัว OpenShift จาก Red Hat เอง ค่อนข้างละเอียด และดีมาก

ข้อเสีย
– ราคาสำหรับตัว Enterprise ค่อนข้างสูง
– การ Install ระบบค่อนข้างวุ่นวาย ต้องใช้ การ config DNS และ LB ในการ Install
– เนื่องจากเป็น CoreOS ทำให้ มี tools ต่างๆ ในการวิเคราะห์ปัญหา ติดมาด้วยน้อยมาก
– สำหรับคนที่เคยใช้ Docker หรือ Kubernetes (k8s) มาก่อน ก็ใช่ว่าจะใช้งานง่าย +___+
– ด้วยความที่เน้น เรื่อง security ทำให้ หลายๆ Docker Images ไม่สามารถใช้งานบน OCP4 ได้

สำหรับใครที่อยากทดสอบการใช้งาน ก็เข้าไป Download ตัว Red Hat CodeReady Containers (CRC)
มาทดลองเล่นดูก่อนก็ได้ครับ (เครื่องต้องสเปคสูงหน่อย)
https://developers.redhat.com/products/codeready-containers

ผมเองก็ยังมือใหม่สำหรับ OpenShift 4.2 แต่แนวโน้ม บริษัทขนาดใหญ่ จะไปทางนี้กันหมด
ศึกษาไว้ ก็ไม่เสียหาย ใครที่ทดลองใช้งาน แล้วติดปัญหายังไง หรือมีอะไรจะแนะนำ
ก็เข้ามาพูดคุยกันได้นะครับ LINE ID: pornpasok 🙂

DevOps CI/CD คืออะไร?

CICD Flow

เนื่องในโอกาส ที่มาเริ่มงานใหม่ ด้าน Banking Technology (FinTech) ได้ครบ 1 เดือน ในส่วนของ DevOps เลยจะมาเขียนเล่าว่า การทำงานของ DevOps มีอะไรบ้าง CI/CD คืออะไร? ทำไมสมัยนี้ ถึงเป็นคำที่นิยมใช้กัน ในสายงาน software developer ..

DevOps จริงๆ แล้วเป็นคำใหม่ ที่เอาคำว่า Developer กับ Operator มารวมกัน สมัยก่อน Developer เป็นคนพัฒนา code แต่ไม่มีสิทธิ deploy code ขึ้นใช้งานเอง ต้องมีทีม Operator มาทำการ deploy ให้อีกทีม ซึ่งทั้ง 2 ทีมนี้เป็นคนละทีมกัน ทำให้การทำงานยุ่งยาก เกิดความผิดพลาด และใช้เวลานาน ในการ deploy แต่ละครั้ง ..

CICD

CI/CD (Continuous Integration, Continuous Delivery) เป็นกระบวนการในการทำงาน ตั้งแต่การ Plan -> Code -> Build -> Test -> Release -> Deploy -> Operate -> Monitor หรือบางทีเรียกสั้นๆ ว่า Pipeline ซึ่งสมัยนี้ ก็มี tools ต่างๆ ที่ทำหน้าที่พวกนี้ เยอะมากทั้ง On-Premise และ On-Cloud ที่เรารู้จักกันดี ก็น่าจะเป็น Jenkins ที่เข้ามามีบทบาทมาก ในการทำ CICD ..

ขอบเขตของการทำงาน ของ DevOps แต่ละที่เท่าที่ผมได้เคยลงไปสัมผัส จะไม่เหมือนกัน ขึ้นอยู่ว่า scope ที่ทำได้ มีระดับไหน บางที่ ก็คือทำตั้งแต่ต้นน้ำ ยันปลายน้ำ คือตั้งแต่วางแผน สร้าง Infrastructure เอง ทำ ENV ให้ Dev ใช้ เขียน Pipeline ตลอดจน ทำ Load Test, Performance Test, Security Test และระบบ Monitor & Alert เองทั้งหมด แบบนี้ก็ดีตรงที่จะรู้และเข้าใจ ในแต่ละส่วนอย่างดี ทำให้งานออกมามีประสิทธิภาพ ควบคุมได้ แต่ถ้ามี หลายๆ Project ก็คงทำแบบนี้ไม่ไหว ..

บางที่ DevOps จะมีหน้าที่แค่ทำระบบให้ Dev มาใช้งาน แต่จะไม่มีสิทธิ ในการทำอย่างอื่นเอง แบบด้านบน แบบนี้ ก็จะทำให้ ควบคุมอะไรไม่ได้ทั้งหมด แต่ถ้ามีหลายๆ Project ก็จะรองรับการทำงาน ได้เต็มที่ ..

สำหรับแนวคิด และ Tools ในการทำงานแบบ DevOps (CI/CD) ไม่มีแบบไหนผิด แบบไหนถูก ขึ้นอยู่กับการเอามาประยุกต์ใช้งาน ให้เหมาะสมกับงานของเรา องค์กรของเรา เพื่อทำให้งาน เกิดประสิทธิภาพสูงสุด ตอบโจทย์ผู้ใช้งาน product ของเราให้ดีที่สุด .. และที่สำคัญ ต้อง Monitor ได้ ต้องมี Dashboard เอาไว้ Tracking Metric ต่างๆ ได้ ..

สำหรับใครที่กำลังหางาน DevOps สมัครกันเข้ามาได้ครับ รับรองว่า งานท้าทาย สนุก แน่นอนครับ 🙂
https://th.jobsdb.com/th/th/job/devops-engineer-300003001969662

หางานครับ ใครมีมาจ้างได้นะ ราคากันเองครับ

ตอนนี้ ผมรับงานนอกนะครับ ระดมทุน สร้างโรงงาน ใครมีงานมาจ้างได้
งานที่รับ มีดังต่อไปนี้ครับ

– ดูระบบ, setup server, วาง infra
– Setup OpenStack, AWS, Google Cloud, Alibaba Cloud
– Tuning, Load Test, Penetration Test (Security Test)
– ทำ ChatBot, Machine Learning, ทำเว็บ e-Commerce
– IG Print งานแต่ง งาน events ต่างๆ
– Photo Booth
– IoT Development
– Bulk SMS
– SEO

ใครมีงานรายละเอียดประมาณนี้ มาจ้างได้ครับ
Line ID: pornpasok

highscalability

ผมอยากพูดถึงเรื่องการออกแบบ Web Infrastructure ซึ่งเป็นเรื่องที่ผมคิดว่าเป็น skills
ที่ผมถนัดที่สุด ไว้ให้เพื่อนๆ ได้ลองเอาไปวิเคราะห์ พิจารณา เผื่อจะเป็นประโยชน์บ้างครับ
เรื่องพวกนี้ ผมเคยเขียนไว้ ในหลายๆ ตอน ของ blog ผม ซึ่งบางทีลงรายละเอียด
ไว้มากไป ใน post นี้ ผมจะขอพูดถึง concept หลักๆ ที่สำคัญมากๆ ละกันครับ ..

1.Value คือต้องคุ้มค่า สมราคา อะไรที่แพงๆ ผมจะไม่ใช้ เน้นใช้ของให้คุ้ม อย่าไปเน้นของแพง
2.Performance คือประสิทธิภาพต้องสูง เข้าถึงได้เร็ว ช้านิดเดียวไม่ได้ ต้องคำนึงถึง user ที่ใช้งาน
3.Security คือต้องปลอดภัย เราให้บริการคนอื่นแบบ public จะพลาดนิดเดียวก็ไม่ได้
4.Simple คือต้องง่าย ไม่ซับซ้อน สามารถ track ปัญหาได้ง่าย
5.Scalability คือต้องขยายระบบได้ตลอดเวลา และขยายได้ง่าย

หลักๆ เน้นคำนึง ถึงเรื่องพวกนี้ให้มากๆ ครับ เท่าที่ผมเห็นในไทย ส่วนใหญ่
ยังไม่เคยเจอของหนักๆ จริงๆ กัน มักจะเน้นอุปกรณ์ เน้นว่าต้องมี Firewall
เน้นต้องมี หลายๆ tier (hop) ทำให้เวลา track ปัญหา กลับทำให้ยากขึ้น ..

ใครสนใจ เกี่ยวกับเรื่องพวกนี้ แนะนำเข้าเว็บนี้บ่อยๆ ครับ 🙂
URL: http://highscalability.com

High Performance Web Infrastructure

วันนี้ผมมีเวลาว่าง เลยอยากจะเขียนเล่าเรื่องการออกแบบ
Web Infrastructure ให้รองรับ load สูงๆ ได้ ว่าทำแบบไหนดี
โจทย์ของผมคือเป็น web สำหรับ booking ที่จะมีคนเข้าใช้งานจำนวนมาก
ในตอนเปิดให้ใช้งาน เป้าหมายที่ตั้งไว้คือ 1000 tps/s ++
และต้องไม่ down โดยผมมี physical server อยู่ 3 node

ในการออกแบบ Infrastructure นั้น ไม่มีแบบไหนถูกแบบไหนผิด
อยู่ที่ลักษณะของงานของเรา ว่าต้องการแบบไหน อยู่ที่จินตนาการของเรา
ว่าทำแบบไหนดี การออกแบบระบบ ก็เป็นศิลปะ อย่างหนึ่ง ..

Simply The Best เป็นคำตอบ ที่ผมใช้ออกแบบระบบที่ผมจะใช้งานนี้
เท่าที่ดูลักษณะ web แล้ว จะมีการ Read/Write DB หนักพอๆ กัน ถ้าเราแยก DB
ออกไป ก็จะทำให้เกิด connections จำนวนมากเกิดขึ้นในระบบ
ต้องแยก Read/Write ที่ตัว web app อีกเกิดความยุ่งยาก มากขึ้น
ผมเลยเอา web กับ DB ไว้ในตัวเดียวกันไปเลย แล้วใช้ HAProxy
เป็น Load Balancer round robin แบบ keep-alive
มี vip เป็น Public IP ที่ eth0 และใช้ eth1 เป็น Private IP
ยิงเข้าหา แต่ละ node ที่ต้องแยก interface เพื่อเป็นการกระจาย traffic
DB ที่ใช้ผมเลือกเป็น MariaDB ที่ทำงานได้ performance ดีกว่า MySQL
และใช้ Galera Cluster เป็นตัว sync data ของ DB แต่ละ node เข้าหากัน
ทำให้ ทุก node มี data ที่เหมือนกัน node ใด node นึง down ไป
ทุก node ก็จะยังทำงานได้สมบูรณ์ ถ้าเราต้องการเพิ่ม node เข้ามา
ก็สามารถทำได้ง่าย แค่ on ขึ้นมา Galera Cluster ก็จะทำการ sync data ให้

ในส่วนของ Web Server ผมใช้ Apache 2.2.22 ที่มากับตัว Debain Wheezy
มีการ tuning ค่าต่างๆ พอสมควรให้เหมาะกับการใช้งาน ตรงนี้เดี๋ยวผมมาเล่าอีกที
ที่เลือกใช้ apache เพราะ มีความยืดหยุ่นสูง ทำงานได้ดีกับ code ทุกรูปแบบ
ส่วน code เป็น PHP กระจายไปทุก node เก็บไว้ที่ local disk ของแต่ละ node
และใช้ APC เป็น opcode cache อีกระดับนึง

ปัญหาที่เจอ มีดังนี้
– auto increment จะไม่เรียงกัน เท่าไร มีกระโดดบ้าง แต่ก็รับได้
– HAProxy 1.5.4 default จะเก็บ log ทำให้ ถ้า log ใหญ่ๆ จะหนักได้
– เวลาแก้ code ต้อง up ทุก node

ผลที่ออกมา หลังจากใช้งานจริง พบว่า รองรับการใช้งานได้ดีมาก
รับ load จำนวนมหาศาล และ users ได้จำนวนมากพร้อมๆ กัน
ส่วนรายละเอียดการ tuning ผมจะขอแยกอธิบาย ในตอนต่อไป
เพราะว่า เยอะพอสมควร ..

VirtualBox SSH from Host to Guest OS (Linux)

สวัสดีครับ วันนี้ผมจะพูดถึง โปรแกรม VM ตัวนึงบน OS X หลังจากที่ผมลง Mountain Lion
ไปแบบ clean ก็ต้องมาลงโปรแกรมกันใหม่ ทั้งหมด VirtualBox นับว่าเป็นโปรแกรมตัวนึง
ที่ใช้ทำ VM ได้ดีมาก หลากหลาย และที่สำคัญคือฟรีด้วยครับ ..

หลายๆ คนมักเจอปัญหาว่า ว่าไม่สามารถ set ค่า Network แบบ Bridge ได้ เพราะว่า
ในวง Network ไม่สามารถรับ DHCP ได้หลาย IP หรือติดปัญหาเรื่อง การ Authen ต่างๆ
การทำ NAT กระหว่าง Host OS กับ Guest OS จึงเป็นทางเลือกที่ดี เพราะว่า Guest OS
เองจะได้ออก internet ได้ด้วย ทำให้ทำงานได้สะดวกขึ้น แต่คราวนี้ ค่า default ของตัว
NAT บน VirtualBox เองไม่ได้ทำให้ Host OS ที่แจก IP ไปให้ Guest OS ในวง 10
เช่น Host OS IP= 10.0.2.2, Guest OS IP=10.0.2.15 สามารถเข้าไปที่ Guest OS
โดยตรงได้ ซึ่งอันนี้ ผมก็ไม่แน่ใจเหมือนกัน ว่าจริงๆ มันมีวิธีทำได้ หรือวิธีอื่นๆ ที่ดีกว่า
นี้เหรือเปล่า เพราะถ้าเลือกเพิ่มอีก Adapter นึง แล้วเลือก Host-only Adapter ก็น่าจะได้
แต่วิธีนี้ อาจจะต้อง set static IP ระหว่าง Host และ Guest กันเอง ..

วันนี้ ผมจะมาพูดถึง Port Forwarding บน VirtualBox กันครับ การทำง่ายๆ มาก
แค่เข้าไปคลิก add rule เพิ่มเข้ามาใหม่ อย่างกรณีนี้ ผมใช้คำสั่ง ifconfig -a
เพื่อนจะดูว่า Guest OS ผมได้แจก IP อะไรมา จะได้เอามาสร้าง rule ได้ถูกต้อง


ผมก็จะได้ IP 10.0.2.15 มา ต่อจากนั้น ผมก็จะทำการ add rule เกี่ยวกับ Port Forwarding เข้าไป


จากรูปผมเลือ Protocol=TCP, Host IP=127.0.0.1, Host Port=2222 ส่วน Guest IP ก็คือ IP ที่
Guest OS ได้จากการ NAT และ Guest Port ก็คือ ssh port 22 ที่เราต้องการ

จากนั้นที่เครื่อง Host OS ผมเป็น Terminal ขึ้นมา แล้วทำการ ssh ด้วยคำสั่งต่อไปนี้
ssh 127.0.0.1 -p 2222 -l ton
เท่านี้ ผมก็จะสามารถติดต่อกับเครื่อง Guest OS ที่เป็น Linux Debian ใน VirtualBox ได้แล้ว


ผมเองก็ไม่ได้เชี่ยวชาญอะไรเกี่ยวกับพวก VM แต่ใช้จำลองการทำงานต่างๆ บ้าง เป็นครั้งคราว
แต่ถ้าเพื่อนๆ มีปัญหาอะไร สามารถแลกเปลี่ยนความรู้กันได้ครับ 🙂

High Scale Web Infrastructure 2012

porsche cayenne งามจริงๆ 🙂

สวัสดีครับ ช่วงนี้ ผมมักจะพูดถึงแต่เรื่อง Web Security ไม่ค่อยได้พูดถึงเรื่อง
การวาง Web Infrastructure มากนัก เพราะว่า ถ้าวางแผน วางครั้งแรก ดีๆ
มีการ monitor และ มีระบบ alert เมื่อ service มีปัญหา ก็จะทำให้ ปัญหาจุกจิกไม่มี

วันนี้ ผมจะมาพูดถึง technology ของเว็บในปี 2012 ว่า เราสามารถใช้ Open Source
ตัวไหนมาช่วยได้บ้าง ในที่นี้ผมจะพูดถึงเว็บทั่วๆ ไป และอ้างอิง technology ที่ใช้กัน
กับเว็บใหญ่ๆ ระดับโลกเช่น Facebook, Youtube และอื่นๆ ..
Varnish ตัวนี้ เป็น caching อย่างดี สำหรับเว็บในยุคนี้ คือจะสามารถ cache
ได้หลายระดับมาก และยังเขียน VCL (Varnish Configuration Language) ได้ละเอียด
ผมชอบตัวนี้มากๆ มันทำได้ดีและง่ายกว่าพวก hardware หรือ load balancer ราคาแพงๆ
เสียอีก เหมาะอย่างยิ่งกับเว็บที่เป็น static page ล้วนๆ แทบจะไม่ต้องไปเรียก web server
กันเลยทีเดียว หรือ dynamic page ก็สามารถ caching ได้ แต่เวลาที่มีการ update page
ใหม่ ต้องมีการ purge/ban URL หรือ page หรือ file ที่ไม่ต้องการให้ cache ออกไป
nginx (Engine X) ตัวนี้เป็น web server ที่ผมชอบมากๆ ส่วนตัวแล้ว ผมเอามาทำ
เป็น web server สำหรับ static file เพราะถ้าเทียบกับ web server รุ่นเก๋าอย่าง Apache22
แล้ว nginx เองทำงานเบากว่ามากๆ เรียกได้ว่า แทบไม่เปลือง memory ของเครื่องเลย
หรือถ้าเป็นไปได้ เอามาใช้กับเว็บที่ใช้ PHP แทน Apache22 ได้ ก็จะทำให้ web server
ทำงานบำลง แต่ได้ประสิทธิภาพเพิ่มขึ้นมาก ..
memcached เป็นอีกตัวนึงที่ใช้ร่วมกันเวลาเขียนโปรแกรม แล้วไม่ต้องเก็บ data เล็กๆ
บางอย่างลง file หรือเวลา query data มาจาก database ก็สามารถ เก็บลงบน memcached
ที่เป็น memory ก่อน ก็จะทำให้ ทำงานได้เร็วขึ้นมาก ..
FlashCache อันนี้ผมพูดถึงระดับ Kernel ของเครื่องที่ใช้ทำ File Server ตัวนี้ จะช่วยได้มาก
เวลาที่มีการเรียก file ต่างๆ ซ้ำๆ กัน จะไม่ต้องไปเรียก จาก file จริงๆ แต่จะมีการเรียกที่ระดับ
cache ของ Kernel แทน ตรงนี้ เป็นข้อดีของ Linux ที่ออกแบบโครงสร้างของ OS มาได้ดีมาก
PHP ผมจะไม่พูดถึงก็เป็นไปไม่ได้ เพราะว่าเว็บประมาณกว่า 90% ของโลก ใช้ PHP เขียน
สำหรับ PHP เอง ก็มีวิธีการที่ให้ทำงานได้เร็ว และมีประสิทธิภาพมากขึ้น โดยไม่ต้องทำอะไรมาก
เราสามารถใช้พวก Alternative PHP Cache (APC) มาลดการใช้งาน CPU ในการ compile code
ของ PHP ลงได้ ตัวนี้ ต้องลองใช้กันดูครับ สำหรับเว็บที่มีการใช้งาน PHP หนักๆ ..

สำหรับในเรื่องของส่วนอื่นๆ ที่ไม่ใช่ส่วนของ web server กันบ้าง แต่ก็มีความเกี่ยวข้องกัน
MySQL ผมว่าเป็น Database ที่ดีมากๆ ตัวนึง อยู่ที่ว่าเราออกแบบโครงสร้างและ optimize
ได้ดีเพียงใดเท่านั้น การทำ index ก็เป็นเรื่องที่สำคัญ บางครั้ง ผมเจอ load จำนวนมหาศาล
และทำงานได้ช้ามาก พอเข้ามาดูพบว่า ไม่มีการทำ index ที่ดี พอทำไป load หายไปหมด
และทำให้ทำงานได้เร็วขึ้นมากๆ ด้วย ตรงนี้ เป็นส่วนที่สำคัญมากครับ ..
noSQL มีอยู่หลายตัวที่นิยมนำมาใช้กัน แต่ผมจะไม่ได้พูดถึงในที่นี้ เพราะต้องยอมรับว่า
ที่ผ่านมา งานผมแค่ MySQL+Memcached ก็เอาอยู่แล้ว เลยยังไม่จำเป็นต้องใช้พวก
noSQL ต่างๆ พวกนี้ มาช่วยลดภาระของ Database หลัก ..
Wowza ตัวนี้ ไม่ถือว่าเป็น Open Source แต่ราคาก็ถือว่าไม่แพงมาก ถ้าเทียบกับ
Software ที่ใช้ทำ Streaming Server ตัวอื่น และประสิทธิภาพ เท่าที่ผมได้ทดลองใช้
ถือว่ายอดเยี่ยมเลยทีเดียว รองรับจำนวนผู้ใช้งานจำนวนมากได้พร้อมๆ กัน และยัง
มี format ในการ stream ได้รองรับทุก OS ทุก browser ไม่ว่าจะเป็น iOS, Android

ที่พูดมานี้ ก็เป็น technology ของยุคนี้ ที่เกี่ยวกับ web service, web application ต่างๆ
จริงๆ แล้วยังมี software อีกหลายๆ ตัวที่น่าสนใจ แต่ยังไม่ได้ใช้เป็นส่วนหลักๆ
วันหลังผมจะมาเขียนถึงแนวคิดต่างๆ ที่ควรคำนึงถึงในการวางระบบใหญ่ๆ ว่า มีอะไรบ้าง
ที่จะทำให้ระบบของเรามีประสิทธิภาพ รองรับกับการใช้งานของคนจำนวนมากได้ และสามารถ
ตรวจสอบปัญหา และแก้ไข ได้เร็ว ทันที ตลอดเวลา ..