ตอนที่ 2 ย้าย Blognone & BrandInside เข้าสู่ Huawei Cloud

รู้จักกับ Service ต่างๆ

หลังจากในตอนแรกเราคิดว่า Huawei Cloud มีความเหมาะสมที่จะย้ายมา ในตอนนี้เราจะไปดู service ต่างๆ ที่เราใช้เพื่อเตรียมพื้นที่ให้ Developer ของเราเข้ามาใช้งาน (Landing Zone)

Navigation

Kubernetes

Huawei Cloud มีระบบ Managed Kubernetes ที่ชื่อว่า Cloud Container Engine (CCE) ซึ่งจะต่างกับเจ้าอื่นๆ คือมันไม่ฟรี

ชื่อ Cluster 🥠 T_T

CCE จะคิดเงินตามการตั้งค่าต่อไปนี้

  • จำนวน Node ใน Cluster มีให้เลือก 3 แบบคือ 50 nodes, 200 nodes และ 1,000 nodes

และแน่นอน ค่า Node คิดเงินต่างหากในราคาเท่ากับเปิดเครื่องปกติ

เนื่องจากเดิมเราก็รัน Cluster เองอยู่แล้ว ค่าบริการของ CCE เลยรู้สึกว่าใกล้เคียงกับที่เครื่องที่เราเคยต้อง manage อยู่ บวกอีกเล็กน้อยถือว่าค่าบริหารจัดการ

เมื่อสร้าง Cluster เรียบร้อยแล้วจะใช้เวลาประมาณ 5 นาทีในการ install ทุกอย่าง จากนั้นจะได้ Cluster มาแต่จะใช้ Kubectl ไม่ได้ เพราะ Kubernetes API ไม่มี Public IP

เวลาใช้ Cloud เจ้าอื่นๆ บริการหลายตัวมักจะถามว่าต้องการ Install แบบ Public หรือ Private แต่สำหรับ Huawei Cloud ทุกบริการจะไม่มีถาม เนื่องจากระบบจะให้เรา attach external IP เข้าไปยังบริการ private แล้วเมื่อเลิกใช้ก็ถอดออกได้ตลอดเวลา ซึ่ง Kubernetes API ก็จะใช้วิธีเพิ่ม Public IP เช่นกัน

Insecure Cluster Access

แต่ปัญหาคือ Kubernetes API จะเชื่อมต่อผ่าน HTTPS แล้ว certificate ที่มากับ cluster นั้นมีแต่ Internal IP ถ้าเราใช้ kubeconfig ที่เค้าให้มา ระบบจะ ใช้ option ปิดไม่ให้ validate TLS certificate ซึ่งไม่ดีเท่าไร

ทาง account manager ผมแจ้งว่าจะต้องเปิด ticket ไปเพื่อขอให้เค้าออก certificate ให้ใหม่ ก็ใช้เวลาผ่าน first level support อยู่ครึ่งวัน (เนื่องจากผมไปเลือก support plan ต่ำสุด) ก็ออก certificate ใหม่ให้เรียบร้อย เพียงแต่เราต้องเขียน kubeconfig เองเพราะไม่ใช่ option ที่มีใน interface

อีกข้อจำกัดที่เราเจอคือ Huawei Cloud ยังไม่สามารถ map IAM user ไปเป็น Kubernetes user ได้ (จะได้เป็น user เดียวกันหมดทุกคน) ถึงแม้ในเอกสารจะมีบอกวิธีใช้ก็ตาม ทาง Huawei Cloud support แจ้งผมว่าฟีเจอร์นี้มีให้ใช้เฉพาะบาง region ในประเทศจีนและ region ฮ่องกงเท่านั้น ก็หวังว่าจะขยายมาที่ประเทศไทยเร็วๆ นี้

Helm

ขั้นตอนถัดมาคือการติดตั้ง cert-manager เนื่องจากว่า Huawei Cloud ไม่มีบริการ ACM ที่ออก SSL Certificate ให้เราอัตโนมัติฟรีๆ แล้ว มีแต่บริการขาย SSL Certificate

ขั้นตอนนี้เราเจอปัญหาว่า Tiller เวลา chart มีการสร้าง service account มันจะค้างรันต่อไม่ได้ ทาง Huawei แนะนำว่าสามารถอัพโหลด chart เข้าไปบน CCE Console เพื่อติดตั้งได้โดยใช้ Tiller ของเค้า หรืออีกวิธีคือรัน tiller บนเครื่องเราโดยตรง ซึ่งผมลองแล้วใช้งานได้ดี

ผมเดาว่าปัญหาอยู่ที่ service account ของ tiller น่าจะติด check บางอย่างที่เค้า custom ไว้ แต่พอรันบนเครื่องมันจะใช้ account ของเราทำให้ไม่ติดปัญหา

วิธีแก้นี้ผมไม่ค่อยโอเคเท่าไร แต่เนื่องจากเราไม่ได้ใช้ Helm เยอะอยู่แล้ว (เราใช้ Project Eastern ที่เราพัฒนาขึ้นเอง) เลยปล่อยผ่านไป

Ingress

Huawei Cloud มี ingress controller ที่มองไม่เห็นให้เช่นเดียวกับ Google Cloud (คือลงไว้อยู่แต่ไม่แสดงใน kubectl เพราะอยู่บนเครื่อง master)

Ingress ที่ได้จะเป็น Huawei Cloud ELB ซึ่งจะได้เป็น IP เดียวไม่ใช่เป็น DNS name ด้านหลังของ ELB นี้จะใช้ Linux Virtual Server ทำ Layer 4 Load balance ก่อนที่จะส่งต่อให้ nginx fleet

Huawei Cloud Docs

ที่ไม่ค่อยชอบใจเท่าไรคือ Controller จะไม่สนใจ Annotation kubernetes.io/ingress.class ซึ่งจะบอกว่าให้ใช้ Ingress ตัวไหนกรณีที่ลงหลายตัวใน Cluster เดียว แต่ก็ไม่ได้ถึงกับเป็นปัญหา เพราะถ้าเราใส่ annotation ไม่ครบมันจะไม่เปิด Load balancer เพิ่มให้ แต่จะ log error อยู่ตลอดเวลาใน events log

ครั้นจะเข้าไปแก้เอง ingress controller ตัวนี้ก็ไม่ใช่ open source ครับ จะไปแก้ให้เค้าก็ทำไม่ได้ (หรืออาจจะมีซอร์สแต่อยู่ในเว็บจีนก็ได้ ผมก็ไม่รู้เหมือนกัน)

ECS

ระบบเช่าเครื่อง server ของ Huawei Cloud จะเรียกว่า ECS ครับ

ถึงแม้ว่าระบบทั้งหมดจะอยู่บน Kubernetes แล้ว แต่เราจำเป็นจะต้องเปิด ECS เพิ่มขึ้นมาอีกเพื่อทำเครื่อง NAT ซึ่งเราใช้เป็น Bastion host ไปในเวลาเดียวกันด้วย (Bastion host คือเครื่องหน้าด่านที่ใช้เข้าเครื่องด้านหลังที่ไม่มี public IP)

ที่เราต้องใช้เครื่องรัน NAT เองโดยไม่ใช้ Managed NAT นั้นเพราะปริมาณ traffic ขาออกเราไม่มากครับ เราสามารถเลือกเครื่องสเปคต่ำๆ ได้ซึ่งจะลดค่าใช้จ่ายไปได้มาก

Console จะแสดงราคาตลอด จะได้ไม่สั่งเครื่องแพงๆ มาโดยไม่รู้ตัว

เท่าที่ผมสังเกต Cloud จากจีนจะใช้วิธีตั้งค่าเครื่องคล้ายๆ กันแต่จะไม่เหมือนกับของตะวันตกครับ ซึ่งตัวเลือกของ Huawei ที่เราปรับได้ก็จะมีดังนี้

Billing
การคิดเงินสามารถเลือกได้เป็น Pay per use (คิดเงินรายชั่วโมง) หรือ Yearly/Monthly ซึ่งจะถูกกว่า (แต่ต้องจ่ายค่าเครื่องทันที เหมือนกับ Full upfront reserved instance ของ AWS) ผมรู้สึกว่าพอมีตัวเลือก Monthly แล้วทำให้ตัดสินใจง่ายขึ้นเพราะเราจะถูกล็อคแค่เดือนเดียว ไม่ใช่หนึ่งปี และการจ่ายเงินล่วงหน้าทั้งเดือนก็ไม่ต้องถึงกับต้องคิด cash flow diagram เหมือนการจ่ายล่วงหน้าทั้งปี

แถมถ้าใช้ Invoiced Billing ที่ทาง Huawei Cloud ประเทศไทยมีให้บริการ (สามารถออกบิลเป็นเงินบาทมี VAT ได้) แล้ว การซื้อ Monthly ก็จะกลายเป็นเหมือน post paid อยู่ดี

สเปคเครื่อง
มีให้เลือกคือ

  • General computing จะเป็นแบบ share CPU เท่าที่ผมทดสอบ CPU stress test มาวันหนึ่งเต็มๆ ยังไม่เจอ steal time ครับ แต่ยังหาวิธีเช็คว่าถูก throttle หรือไม่ไม่ได้

ข้อสังเกตคือเค้าจะแจ้ง Network speed การันตีและสูงสุดให้ทราบเลย ในขณะที่ AWS จะแจ้งแค่สูงสุด ส่วนการันตีต้องไปตามอ่านบล็อกที่คนทดสอบให้

ที่ผมอยากรู้เพิ่มคือ สำหรับเครื่องประเภท share CPU นั้น ระบบจะคิดการ burst อย่างไรซึ่งไม่มีแจ้งไว้ ก็ทำให้การเลือกใช้เครื่อง share CPU ค่อนข้างเสี่ยงหน่อยว่าอยู่ดีๆ เราอาจจะถูก throttle ได้

Disk
Disk ของเค้าขายขั้นต่ำ 40GB ครับ มีประเภทดังต่อไปนี้

  • Common I/O ความเร็วสูงสุด 90MB/s และ IOPS ที่ 580–2,200 iops

ซึ่ง IOPS ที่ได้จริงจะขึ้นอยู่กับขนาดของ Disk ที่ซื้ออีกที

ตรงนี้ถ้าเทียบกับ AWS แล้วก็จะต่างกันตรงที่ว่าประเภท gp2 ที่นิยมใช้ใน AWS นั้น performance จะเทียบเคียงได้กับ Common I/O แต่ถ้าต้องการเร็วกว่านั้นก็สามารถซื้อ io1 ที่ซื้อ IOPS เพิ่มได้ตามต้องการเลย ในขณะที่ Huawei Cloud นั้นเราต้องเลือกจาก 3 แบบนี้เท่านั้น

Network
ผู้ใช้ Cloud ในสเกลใหญ่ น่าจะทราบดีว่าค่า Network เป็น Cost ที่ใหญ่ไม่แพ้ค่าเครื่อง ผมคิดว่าการคิดเงินค่า network เลยค่อนข้างเป็นจุดขายของ Cloud จีนเลย

สำหรับ Huawei Cloud นั้น Network สามารถคิดเงินได้ตามนี้ครับ

  • Bill by Traffic จะเหมือนกับ AWS หรือ Cloud เจ้าอื่นๆ ใช้เท่าไรจ่ายเท่านั้น สามารถ cap bandwidth ได้ด้วยตั้งแต่ 1–300 Mbit/s

ซึ่งเรายังสามารถ Optimize cost ต่อไปอีกได้ด้วย

  • Shared Data Package สามารถซื้อแพคเกจ Traffic ล่วงหน้าก่อนได้ในราคาพิเศษ เช่น 10GB ต่อเดือน (ถ้าใช้เกินก็จ่ายราคาปกติ แต่ถ้าเหลือทบไปเดือนถัดไปไม่ได้)

บริการเหล่านี้ก็ช่วยลด cost ได้บ้าง แต่ก็คงต้องปวดหัวมาคำนวณหาวิธี billing ที่เหมาะสมกับการใช้งานของเราอีกที

VPC

หลังจากมี NAT แล้วเราก็จะต้องตั้งค่า VPC ให้ traffic วิ่งผ่าน NAT ครับ ซึ่งบน Console Huawei นั้นมักจะชอบใส่ chart เยอะๆ ครับ ดูง่ายดี เห็นเป็น network map เลย

แต่ถึงจะสวยเราก็พบว่ามันไม่สามารถทำ per-subnet route table ได้ ผมลองใส่ Route 0.0.0.0/0 to NAT IP มันก็ไม่พังหรือ loop แต่อย่างใด และเครื่องที่ไม่มี public IP ก็สามารถออกอินเทอร์เน็ตได้

ตรงนี้ก็ยังไม่ค่อยประทับใจครับ ดูเหมือนว่าเรื่องง่ายๆ เค้าจะทำให้มันง่ายขึ้นได้ แต่พออยากได้ฟีเจอร์ยากๆ แล้วยังขาดอยู่

Redis

จากตอนที่แล้ว Huawei บอกเราว่าเค้าเก่งเรื่อง ARM และ Managed Redis ของเค้ารันบน ARM ทำให้ราคาถูกมาก

จากในภาพ Redis instance แรม 256MB ราคาเพียง $0.003/hr ครับ หรือก็คือประมาณ $2.16 ต่อเดือนเท่านั้น ขนาด 1GB ก็ราคาเพียง $0.011/hr

ผมคิดว่าตอนนี้เค้ามี Redis เพียงบริการเดียวที่ใช้ ARM น่าจะเพราะ Redis ประกาศรองรับ ARM เป็น official platform แล้ว และ Redis ไม่ค่อยใช้ CPU หนักมากจึงค่อนข้างเหมาะสมที่จะนำมาใช้เมื่อเทียบกับโปรแกรมอื่นๆ


ทั้งหมดนี้คือ Service ที่เรา setup ไว้ให้ทีมใช้งาน นอกเหนือจากนี้แล้ว Huawei Cloud ยังมีบริการอื่นๆ อีกมากที่เราไม่ได้ใช้ครับ ในตอนนี้ก็หวังว่าผู้อ่านจะได้รู้ข้อดีข้อเสีย ปัญหาและทางแก้ไขต่างๆ จากประสบการณ์ใช้งานของเรา

ในตอนหน้าเราจะมาเล่าถึงการย้ายบริการต่างๆ ของ Blognone ไปยัง Infrastructure ใหม่นี้ครับ

Life@Wongnai

Life@Wongnai - Stories from our own people

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade