SlideShare a Scribd company logo
1 of 188
INTRO TO
DEVOPS
Babel Coder
https://www.babelcoder.com
แนะนำตัว
Babel Coder
Babel Coder
https://www.babelcoder.com
Babel Coder
BABEL CODER
Nuttavut T
https://www.babelcoder.com
Babel Coder
https://www.babelcoder.com
ทดสอบระดับ
DEVOPS
Babel Coder
Babel Coder
https://www.babelcoder.com
GIT
Babel Coder
Babel Coder
https://www.babelcoder.com
AUTOMATED
TESTING
Babel Coder
Babel Coder
https://www.babelcoder.com
DOCKER
Babel Coder
Babel Coder
https://www.babelcoder.com
CI / CD
Babel Coder
Babel Coder
https://www.babelcoder.com
KUBERNETES
Babel Coder
Babel Coder
https://www.babelcoder.com
MICROSERVICES
Babel Coder
Babel Coder
https://www.babelcoder.com
TERRAFORM
Babel Coder
Babel Coder
https://www.babelcoder.com
KONG
GATEWAY
Babel Coder
Babel Coder
https://www.babelcoder.com
ARGO CD
Babel Coder
Babel Coder
https://www.babelcoder.com
DATADOG
Babel Coder
Babel Coder
https://www.babelcoder.com
AGENDA
Babel Coder
Babel Coder
https://www.babelcoder.com
Babel Coder
1
2
3
DevOps คืออะไร
เทคโนโลยี Cloud Computing
Microservices
Babel Coder
https://www.babelcoder.com
Babel Coder
4
5
Babel Coder
https://www.babelcoder.com
6
Docker
Kong API Gateway
Terraform
Babel Coder
8
Git เบื้องต้น
GitOps คืออะไร
Babel Coder
https://www.babelcoder.com
7
Babel Coder
9
CI / CD
Babel Coder
https://www.babelcoder.com
10
Logging, Tracing และ
Monitoring ด้วย Datadog
Babel Coder
Babel Coder
https://www.babelcoder.com
12
11
Kubernetes
Horizontal Pod Autoscaler
Babel Coder
13
บทส่งท้าย
Babel Coder
https://www.babelcoder.com
DEVOPS
Babel Coder
Babel Coder
https://www.babelcoder.com
DEVOPS คืออะไร
DevOps เป็นคำที่มาจาก “development” และ “operations” ซึ่งเป็นการเปลี่ยนแปลงทางวัฒนธรรมในการพัฒนา
ซอฟต์แวร์ที่เน้นการรวมการพัฒนาซอฟต์แวร์ (Dev) และ IT operations (Ops) เป็นการผสมผสานของปฏิบัติการ,
เครื่องมือ, และปรัชญาทางวัฒนธรรมที่เน้นขั้นตอนการทำงานแบบอัตโนมัติ และบูรณาการการทำงานระหว่างทีมพัฒนา
ซอฟต์แวร์และทีม IT operations
วิธีการนี้มุ่งเน้นที่จะนำผลิตภัณฑ์ที่ดีกว่าให้กับลูกค้าได้เร็วขึ้นโดยสร้างสภาพแวดล้อมที่ส่งเสริมการทำงานร่วมกันที่บทบาทที่
เคยถูกแยกออกเป็นฝ่ายต่างๆ เช่น Developer, IT, operations และ วิศวกรรมคุณภาพและความปลอดภัย สามารถ
ประสานงานและทำงานร่วมกันเพื่อผลิตผลิตภัณฑ์ที่ดีกว่าและมีความน่าเชื่อถือมากขึ้น
การทำงานร่วมกันและความมีประสิทธิภาพที่เพิ่มขึ้นนี้ยังเป็นส่วนสำคัญในการบรรลุเป้าหมายทางธุรกิจเช่นการเร่งการนำ
ผลิตภัณฑ์เข้าตลาด การปรับตัวตามตลาดและการแข่งขัน การรักษาความเสถียรและความน่าเชื่อถือของระบบ และการ
ปรับปรุงเวลาเฉลี่ยในการกู้คืนระบบ
Babel Coder
Babel Coder
https://www.babelcoder.com
1. ลักษณะสำคัญ
การรวมตัว (Unification)
01
การทำงานร่วมกัน (Collaboration)
02
การทำงานอัตโนมัติ (Automation)
03
Babel Coder
อิทธิพลต่อวงจรชีวิตของแอปพลิเคชัน (Lifecycle Influence)
04
Babel Coder
https://www.babelcoder.com
1.1 การรวมตัวกัน
DepOps คือการรวมคน, กระบวนการ, และเทคโนโลยีเพื่อให้คุณค่าต่อลูกค้า
อย่างต่อเนื่อง
Babel Coder
Babel Coder
https://www.babelcoder.com
1.2 การทำงานร่วมกัน
DevOps ทำให้บทบาทที่เคยแยกกัน ได้แก่ การพัฒนา การดำเนินการ IT วิศวกรรมคุณภาพ และ
ความปลอดภัย สามารถประสานงานและทำงานร่วมกันเพื่อผลิตผลิตภัณฑ์ที่ดีและเชื่อถือได้มากขึ้น
Dev Team Op Team
DevOps Team
Babel Coder
Babel Coder
https://www.babelcoder.com
1.3 การทำงานอัตโนมัติ
ทีม DevOps ใช้เครื่องมือเพื่อทำงานแบบ
อัตโนมัติและเร่งกระบวนการทำงานต่าง ๆ
ซึ่งช่วยเพิ่มความน่าเชื่อถือมากขึ้น
Babel Coder
Babel Coder
https://www.babelcoder.com
1.4 อิทธิพลต่อ SDLC
DevOps มีอิทธิพลต่อวงจรชีวิตของแอปพลิเคชัน (SDLC) ตลอดจากการวางแผน พัฒนา ส่งมอบ และดำเนินการ
โดยการนำวัฒนธรรม DevOps พร้อมด้วยการปฏิบัติและเครื่องมือ DevOps มาใช้ ทีมสามารถตอบสนองต่อความ
ต้องการของลูกค้าได้ดีขึ้น เพิ่มความมั่นใจในแอปพลิเคชันที่พวกเขาสร้าง และบรรลุเป้าหมายทางธุรกิจได้เร็วขึ้น
Babel Coder
Babel Coder
https://www.babelcoder.com
Babel Coder
2. DEVOPS และ DEVOPS INFINITY LOOP
ทีม DevOps ประกอบด้วยนักพัฒนาและ IT operations ที่ทำงานร่วมกันตลอดวงจรชีวิตของผลิตภัณฑ์เพื่อ
เพิ่มความเร็วและคุณภาพของการปรับใช้ซอฟต์แวร์ ภายใต้โมเดล DevOps ทีมพัฒนาและ operations ไม่ได้
แยกออกเป็น “ซิโล” (Silos) อีกต่อไป บางครั้งทีมเหล่านี้จะรวมกันเป็นทีมเดียวที่วิศวกรทำงานตลอดทั้งวงจร
การใช้งาน จากการพัฒนาและทดสอบไปจนถึงการปรับใช้และการดำเนินการ และมีทักษะหลากหลายที่เป็นความ
สามารถทางวิชาการ
DevOps Infinity Loop เป็นวงกลมการติดต่อสื่อสารที่ต่อเนื่อง ประกอบด้วยหลายขั้นตอน: การวางแผน การ
พัฒนา การทดสอบ การปรับใช้ และการตรวจสอบ
วิธีการนี้เน้นการทำงานร่วมกัน การสื่อสาร และการทำงานอัตโนมัติระหว่างทีมพัฒนาซอฟต์แวร์และทีมดำเนิน
การ IT
Z
Babel Coder
https://www.babelcoder.com
ขั้นตอนการทำงานของ DEVOPS INFINITY LOOP
การวางแผน
01
การพัฒนา
02
การทดสอบ
03
การปรับใช้
04
การตรวจสอบ
05
Babel Coder
Babel Coder
https://www.babelcoder.com
Monitoring and Logging
IaC
Babel Coder
3. คำศัพท์ DEVOPS ที่ควรทราบ
Code
push
Github
Test
Build
Register Image
Deploy
CI
CI
CI
CD
CD
CD
CaC
Babel Coder
https://www.babelcoder.com
Babel Coder
4. ประโยชน์ของ DEVOPS
ทีมที่ยอมรับวัฒนธรรมการปฏิบัติและเครื่องมือ DevOps จะมีประสิทธิภาพสูงสร้างผลิตภัณฑ์ที่ดีกว่าได้เร็วขึ้น
สำหรับความพึงพอใจของลูกค้า การปรับปรุงการทำงานร่วมกันและความมีประสิทธิภาพนี้ยังเป็นส่วนสำคัญใน
การบรรลุเป้าหมายทางธุรกิจเช่นการเร่งการนำเข้าตลาดการปรับตัวตามตลาดและการแข่งขันการรักษาความ
เสถียรและความน่าเชื่อถือของระบบและการปรับปรุงเวลาเฉลี่ยในการกู้คืน
Z
Babel Coder
https://www.babelcoder.com
Babel Coder
5. DEVSECOPS
DevSecOps หรือ Development, Security, and Operations คือกรอบการทำงานที่รวมการรักษาความ
ปลอดภัยเข้าไปในทุกขั้นตอนของวัฒนธรรมการส่งมอบซอฟต์แวร์ องค์กรจะนำเอากรอบการทำงานนี้มาใช้เพื่อ
ลดความเสี่ยงในการปล่อยโค้ดที่มีช่องโหว่ด้านความปลอดภัย
DevSecOps มีความสำคัญอย่างยิ่งเนื่องจากมันช่วยลดความเสี่ยงในการปล่อยซอฟต์แวร์ที่มีการตั้งค่าผิด
พลาดและช่องโหว่อื่น ๆ ที่ผู้ไม่หวังดีสามารถนำไปใช้ประโยชน์
DevSecOps มุ่งเน้นที่การส่งมอบซอฟต์แวร์ที่ปลอดภัยโดยไม่ทำให้กระบวนการพัฒนาซอฟต์แวร์ช้าลง ทีม
ทั้งหมดจะรับผิดชอบในการรักษาความปลอดภัย ไม่ใช่แค่ทีมความปลอดภัยเท่านั้น นอกจากนี้ DevSecOps ยัง
ช่วยให้การส่งมอบซอฟต์แวร์เป็นไปอย่างรวดเร็วและมีความปลอดภัยมากขึ้น
Z
Babel Coder
https://www.babelcoder.com
6. IT ในรูปแบบเดิม VS DEVOPS
การวางแผนและการจัดการ
01
ขนาดของวงรอบการทำงาน
02
โครงสร้างองค์กร
03
Babel Coder
การจัดการเวลา
04
การเปลี่ยนแปลงทางวัฒนธรรม
05
Babel Coder
https://www.babelcoder.com
6.1 การวางแผนและการจัดการ
แบบดั้งเดิมจัดการทุกขั้นตอนในวัฒนธรรมการส่งมอบซอฟต์แวร์ (SDLC) ด้วยความสำคัญเท่า ๆ กัน
หรือบางครั้งมุ่งเน้นไปที่ข้อผิดพลาดที่เกิดขึ้น ในทางกลับกัน DevOps มุ่งเน้นที่กระบวนการที่เพิ่ม
คุณค่าโดยพยายามหาขั้นตอนเพื่อลดความเสี่ยง ทีมแบบ DevOps จะมีการปรับใช้หลักการของ Agile
เพื่อให้ทีมมีการพูดคุยที่มากขึ้น แก้ไขความต้องการของลูกค้าได้ง่ายขึ้น และส่งมอบผลิตภัณฑ์ได้เร็วขึ้น
Babel Coder
Babel Coder
https://www.babelcoder.com
6.2 ขนาดของวงรอบการทำงาน
แบบดั้งเดิมมุ่งเน้นไปที่การออกแบบวงรอบของการพัฒนาที่กว้าง มีระยะ
เวลาดำเนินงานของโปรเจคที่ยาวตามรูปแบบของ Waterfall ในขณะที่
วัฒนธรรมแบบ DevOps มุ่งเน้นไปที่วงรอบที่มีขนาดเล็ก ระยะเวลาแต่ละ
ช่วงของโปรเจคสั้น เพื่อลดความซับซ้อนของโครงการ อันนำมาสู่การลดลง
ของความเสี่ยงที่อาจเกิดขึ้น รวมถึงทำให้การทำงานร่วมกันของทีมเป็นไปได้
อย่างง่ายดาย
https://medium.com/@chathmini96/waterfall-vs-agile-
methodology-28001a9ca487
Babel Coder
Babel Coder
https://www.babelcoder.com
6.3 โครงสร้างองค์กร
แบบดั้งเดิมจัดแบ่งทีมตามความสามารถทำให้เกิดความไร้ประสิทธิภาพ ในขณะที่ DevOps เน้นการ
ทำงานร่วมกัน การสื่อสารกันระหว่าง Development และ Operations ในรูปแบบของทีมเดียวกัน
Babel Coder
Babel Coder
https://www.babelcoder.com
6.4 การจัดการเวลา
ทีม DevOps ใช้เวลามากขึ้นในการปรับปรุงโครงสร้างพื้นฐานเพื่อป้องกันความล้มเหลวและใช้เวลาน้อย
ลงในการจัดการกรณีสนับสนุนอื่น ๆ (Support Cases) เนื่องจากการผลักดันให้มีระบบการทำงานแบบ
อัตโนมัติมากขึ้น
Babel Coder
Babel Coder
https://www.babelcoder.com
6.5 การเปลี่ยนแปลงทางวัฒนธรรม
ความแตกต่างหลักระหว่าง DevOps และ IT แบบดั้งเดิมคือการเปลี่ยนแปลงทางวัฒนธรรม ใน IT แบบ
ดั้งเดิมทุกทีมมีวัตถุประสงค์ที่แตกต่างกัน แต่ DevOps ทำให้วัตถุประสงค์การดำเนินงานของพวกเขา
สอดคล้องกัน
Babel Coder
Babel Coder
https://www.babelcoder.com
CLOUD
COMPUTING
Babel Coder
Babel Coder
https://www.babelcoder.com
CLOUD COMPUTING
Cloud Computing หรือการประมวลผลแบบกลุ่มเมฆคือการเข้าถึงและใช้งานทรัพยากรคอมพิวเตอร์ อาทิเช่น เซิร์ฟเวอร์
พื้นที่เก็บข้อมูล ซอฟต์แวร์ เครื่องมือที่มีขุมพลัง AI และอื่น ๆ ผ่านทางอินเทอร์เน็ต โดยมีรูปแบบการเสียค่าใช้จ่ายตามการใช้
งาน
Cloud Computing ช่วยให้คุณสามารถหลีกเลี่ยงค่าใช้จ่ายและความพยายามในการซื้อ ติดตั้ง กำหนดค่าและจัดการ
คอมพิวเตอร์แม่ข่ายและโครงสร้างพื้นฐานอื่น ๆ ที่อยู่บนพื้นที่ในองค์กรของคุณเอง นอกจากนี้ Cloud Computing ยังช่วย
ให้การส่งมอบซอฟต์แวร์เป็นไปอย่างรวดเร็วและมีความปลอดภัยมากขึ้น
มีรูปแบบการให้บริการของ Cloud Computing ที่หลากหลาย ซึ่งรวมถึง Infrastructure as a Service (IaaS) Platform
as a Service (PaaS) และ Software as a Service (SaaS) แต่ละรูปแบบนี้มีความแตกต่างกันในระดับของความยืดหยุ่น
และการควบคุมที่ผู้ใช้จะได้รับ
Babel Coder
Babel Coder
https://www.babelcoder.com
1. ประเภทของ CLOUD COMPUTING
Cloud Computing ประกอบด้วยรูปแบบ 3 ประการ ดังนี้
Infrastructure as a Service (IaaS) เป็นรูปแบบของ Cloud Computing ที่ให้
บริการทรัพยากรคอมพิวเตอร์ที่จำเป็น เช่น เซิร์ฟเวอร์ พื้นที่เก็บข้อมูล และทรัพยากรเครือ
ข่าย ตามความต้องการและใช้จ่ายตามการใช้งาน ผู้ให้บริการจะดูแลการจัดการทรัพยากร
เหล่านี้ให้ ในขณะที่คุณจะต้องจัดการซอฟต์แวร์ของคุณเอง รวมถึงระบบปฏิบัติการ
ซอฟต์แวร์กลาง และแอปพลิเคชัน
Platform as a Service (PaaS) ให้บริการทั้งสภาพแวดล้อมการพัฒนาและการปรับใช้
งานในคลาวด์ พร้อมทรัพยากรที่ช่วยให้คุณสามารถสร้างแอปพลิเคชันที่ง่ายหรือซับซ้อนได้
PaaS นั้นไม่เพียงแต่รวมทรัพยากรพื้นฐานเช่นเดียวกับ IaaS แต่ยังรวมถึงซอฟต์แวร์
กลาง เครื่องมือพัฒนา บริการทางธุรกิจ ระบบจัดการฐานข้อมูล และอื่น ๆ
Software as a Service (SaaS) ให้บริการซอฟต์แวร์ที่สามารถเข้าถึงและใช้งานผ่าน
คลาวด์ ตัวอย่างที่นิยมคือ อีเมล ปฏิทิน และเครื่องมือสำนักงาน (เช่น Microsoft Office
365) คุณสามารถเช่าการใช้แอปสำหรับองค์กรของคุณ และผู้ใช้ของคุณสามารถเชื่อมต่อ
กับแอปผ่านอินเทอร์เน็ต โดยส่วนใหญ่ผ่านเว็บเบราว์เซอร์
Babel Coder
Babel Coder
https://www.babelcoder.com
2. ประโยชน์ที่ได้รับจากการใช้งาน
ลดค่าใช้จ่ายด้าน IT
01
ส่งเสริมความยั่งยืน
02
เพิ่มประสิทธิภาพการทำงาน
03
Babel Coder
เพิ่มความปลอดภัย
04
มีความยืดหยุ่นในการขยายตัว
05
เข้าถึงเทคโนโลยีใหม่ ๆ อยู่เสมอ
06
ความน่าเชื่อถือ
07
Babel Coder
https://www.babelcoder.com
3. ตัวอย่างของผู้ให้บริการ
07
Babel Coder
Babel Coder
https://www.babelcoder.com
4. ตัวอย่างบริการของ AWS
Amazon Elastic Compute Cloud (EC2)
01
Amazon Simple Storage Service (S3)
02
Amazon Lambda
03
Babel Coder
Amazon Elastic Kubernetes Service (EKS)
04
05
Babel Coder
https://www.babelcoder.com
5. CLOUD NATIVE คืออะไร
Cloud Native คือแนวทางที่ซอฟต์แวร์ใช้ในการสร้าง ปรับใช้ และจัดการแอปพลิเคชันที่ทันสมัยในสภาพแวดล้อมการ
ประมวลผลบนคลาวด์ หากแอปพลิเคชันนั้นถูกออกแบบมาเพื่อใช้งานบนคลาวด์จะเรียกว่า Cloud Native Applications
คุณสมบัติหลักของ Cloud Native ได้แก่:
ความยืดหยุ่น
01
การประมวลผลบนคลาวด์
02
ไมโครเซอร์วิส
03
การใช้งาน Container
04
DevOps และ Automation
05
การประหยัดค่าใช้จ่าย
การอัปเดตฟีเจอร์
07
06
Babel Coder
Babel Coder
https://www.babelcoder.com
6. CLOUD COMPUTING กับ DEVOPS
Cloud Computing และ DevOps มีความสัมพันธ์กันอย่างใกล้ชิด ทั้งสองเป็นส่วนสำคัญใน
กระบวนการพัฒนาและการจัดการแอปพลิเคชันในยุคดิจิตอล
Cloud Computing ช่วยให้ทีม DevOps สามารถสร้างและขยายแอปพลิเคชันได้อย่าง
รวดเร็วและมีประสิทธิภาพ โดยไม่ต้องลงทุนในการจัดซื้อและบำรุงรักษาโครงสร้างพื้นฐาน
ทางกายภาพ
DevOps ให้ช่วยให้ทีมงานสามารถสร้างและปรับปรุงผลิตภัณฑ์ได้เร็วขึ้น โดยใช้เครื่องมือ
และเทคโนโลยีที่ช่วยให้พวกเขาดำเนินการและพัฒนาแอปพลิเคชันได้อย่างรวดเร็วและเชื่อ
ถือได้
ทั้งสองเทคโนโลยีนี้ร่วมกันช่วยให้องค์กรสามารถสร้างและส่งมอบแอปพลิเคชันได้อย่าง
รวดเร็ว ทำให้สามารถตอบสนองต่อความต้องการของลูกค้าและการเปลี่ยนแปลงของ
ตลาดได้ดียิ่งขึ้น
Babel Coder
Babel Coder
https://www.babelcoder.com
MICROSERVICES
Babel Coder
Babel Coder
https://www.babelcoder.com
1. MICROSERVICES คืออะไร
การออกแบบแอปพลิเคชันแบบ Monolithic นั้นจะรวมศูนย์ทุกฟีเจอร์เข้าเป็นโปรแกรมเดียว
โดยทั้งแอปพลิเคชันจะมีการใช้งานฐานข้อมูลร่วมกันเพื่อจัดเก็บข้อมูลสำหรับฟีเจอร์ต่าง ๆ
Order
Stock
Payment
Monolithic
Babel Coder
Babel Coder
https://www.babelcoder.com
1. MICROSERVICES คืออะไร
สถาปัตยกรรมแบบ Monolithic นี้ประกอบด้วยข้อดีต่าง ๆ ได้แก่
ง่ายต่อการพัฒนา
ง่ายต่อการแก้ไขหรือเปลี่ยนแปลง
สามารถทำการทดสอบฟังก์ชันต่าง ๆ ได้อย่างตรงไปตรงมา
ง่ายต่อการ Deploy แอปพลิเคชันสู่ Production
ไม่ยุ่งยากในการ Scale ระบบ
Babel Coder
Babel Coder
https://www.babelcoder.com
1. MICROSERVICES คืออะไร
อย่างไรก็ตาม Monolithic นั้นก็มีข้อเสียด้วยเช่นกัน คือ
การผูกติดกับภาษาโปรแกรม
ความยุ่งยากในการพัฒนาระดับทีม
ความช้าในการ Deploy
การ Scale ระบบที่ไร้ประสิทธิภาพ
Babel Coder
Babel Coder
https://www.babelcoder.com
Order
Stock
Payment
Order
Stock
Payment
Order
Stock
Payment
1. MICROSERVICES คืออะไร
LOAD
BALANCER
Babel Coder
Babel Coder
https://www.babelcoder.com
1. MICROSERVICES คืออะไร
เพื่อแก้ปัญหาของ Monolithic ดังกล่าว จึงเป็นที่มาของสถาปัตยกรรมแบบ Microservices
สถาปัตยกรรมแบบ Microservices เป็นสถาปัตยกรรมที่ออกแบบตามหลักการของ Cloud
Native โดยระบบหนึ่ง ๆ จะประกอบไปด้วยหลายหน่วยย่อยหรือเซอร์วิส ที่มีการเชื่อมต่อกัน
อย่างหลวม ๆ กับเซอร์วิสอื่น แต่ละเซอร์วิสจะมีขนาดเล็กและแยก Deploy ได้อย่างอิสระ
Babel Coder
Babel Coder
https://www.babelcoder.com
Order
1. MICROSERVICES คืออะไร
microservices
Stock Payment
Babel Coder
Babel Coder
https://www.babelcoder.com
2. ลักษณะพื้นฐานของ MICROSERVICES
สถาปัตยกรรมแบบ Microservices ประกอบด้วยลักษณะต่าง ๆ ดังต่อไปนี้
Autonomy แต่ละเซอร์วิสในสถาปัตยกรรมแบบ Microservices สามารถแยกพัฒนาได้
เช่น มีทีมสำหรับการพัฒนาเซอร์วิสของ User, Article, Order และ Payment แยกแตก
ต่างกันออกไป พร้อมทั้งสามารถแยก Deploy หรือ scale แยกแต่ละเซอร์วิสได้โดยไม่
กระทบกับเซอร์วิสอื่น
Specialization แต่ละเซอร์วิสได้รับการออกแบบโดยอาศัยการแบ่งแยกตาม
Business Capability เพื่อให้สามารถแก้ปัญหาทางธุรกิจนั้น ๆ ได้อย่างเฉพาะเจาะจง
Agility ความคล่องตัวนั้นเกิดจากการที่ Microservices ส่งเสริมให้องค์กรมีการ
ออกแบบทีมขนาดเล็กเพื่อเป็นเจ้าของแต่ละเซอร์วิส
Flexible Scaling Microservices ทำให้เกิดการ scale แต่ละเซอร์วิสได้อย่างอิสระโดย
ไม่กระทบกับเซอร์วิสอื่น ๆ
Babel Coder
Babel Coder
https://www.babelcoder.com
Order
2. ลักษณะพื้นฐานของ MICROSERVICES
Stock Payment
Order Order
Babel Coder
Babel Coder
https://www.babelcoder.com
SCALE CUBE
--- Wikimedia
Babel Coder
Babel Coder
https://www.babelcoder.com
3. API GATEWAY คืออะไร
Order Stock Payment
POST <ORDER_IP>/orders
Babel Coder
Babel Coder
https://www.babelcoder.com
Order Stock Payment
3. API GATEWAY คืออะไร
POST <GATEWAY_IP>/orders
POST /orders
A
P
I
G
a
t
e
w
a
y
Babel Coder
Babel Coder
https://www.babelcoder.com
4. การสื่อสารระหว่างเซอร์วิส
Order Stock Payment
Babel Coder
Babel Coder
https://www.babelcoder.com
Order Stock Payment
1
4.1 SYNCHRONOUS MESSAGES
Request an order
check stock
Calculate total price
2
3
Babel Coder
Babel Coder
https://www.babelcoder.com
Order Stock Payment
4.1 SYNCHRONOUS MESSAGES
check stock
Calculate total price
2
3
POST <STOCK_IP>/products/<ID>
POST <PAYMENT_IP>/checkout
Babel Coder
Babel Coder
https://www.babelcoder.com
Order Stock Payment
1
4.2 ASYNCHRONOUS MESSAGES
ORDER_REQUESTED Event
Message Channel
Message Broker
Babel Coder
Babel Coder
https://www.babelcoder.com
4.3 เมื่อไหร่ควรใช้การสื่อสารแบบใด
ทั้งการสื่อสารแบบ Synchronous และ Asynchronous ต่างมีข้อดีข้อเสียแตกต่างกัน การเลือกใช้การสื่อสารประเภทต่าง ๆ ตามความ
เหมาะสมจึงเป็นเรื่องสำคัญ
เราควรเลือกใช้การสื่อสารแบบ Synchronous ในกรณีต่อไปนี้
หากไม่สามารถดำเนินการอย่างอื่นได้ถ้าไม่ได้รับผลลัพธ์จากเซอร์วิสอื่น เช่น กรณีสอบถามข้อมูลสินค้าจาก Product ที่เซอร์วิส Product
มีการร้องขอข้อมูลผู้ขายต่อไปยัง User กรณีนี้ต้องใช้ Synchronous เพื่อให้ข้อความตอบกลับไปยังส่วนของ UI นั้นสมบูรณ์
เมื่อต้องการข้อมูลแบบ Real-time
เมื่อแต่ละเซอร์วิสมีระยะเวลาการประมวลผลที่สั้น
เราควรเลือกใช้การสื่อสารแบบ Asynchronous ในกรณีต่อไปนี้
เมื่อฟีเจอร์นั้นยอมรับการทำงานที่เสร็จสิ้นในภายหลังได้ เช่น การออกรายงานที่สามารถส่งผลลัพธ์ภายหลังผ่านอีเมล์ได้
เมื่อการทำงานของเซอร์วิสระหว่างกลางมีความล่าช้าหรือใช้ระยะเวลานานในการประมวลผล
เมื่อยอมรับให้บางเซอร์วิสเกิดข้อผิดพลาดในการทำงานได้และต้องการความสามารถในการทำซ้ำ (Retry)
Babel Coder
Babel Coder
https://www.babelcoder.com
5. SAGA PATTERN
Saga Pattern คือรูปแบบของการออกแบบระบบในสถาปัตยกรรม Microservices เพื่อจัดการให้เกิด Data
Consistency จากการสื่อสารกันของเซอร์วิสต่าง ๆ ในระบบ รูปแบบของ Saga นั้นจะมองว่าธุรกรรม
(Transaction) ใด ๆ จะเกิดจากการดำเนินการผ่านธุรกรรมย่อย ๆ ในแต่ละเซอร์วิส (Local Transactions)
แต่ละธุรกรรมย่อย ๆ ของเซอร์วิสนั้นจะมีการอัพเดทลงฐานข้อมูลของเซอร์วิสตนเอง จากนั้นเซอร์วิสจึงส่งต่อ
การทำงานด้วยการส่งเหตุการณ์ (Event) เพื่อให้เกิดการทำงานของเซอร์วิสถัดไป หากธุรกรรมย่อยนั้นล้มเหลว
ในการดำเนินงาน Saga จะทำการเรียก Compensating Transaction อันเป็นธุรกรรมย้อนกลับเพื่อให้ระบบ
สามารถย้อนการเปลี่ยนแปลงกลับไปได้
รูปแบบการทำงานของ Saga แบ่งออกเป็นสองประเภท คือ Choreography-based Saga และ
Orchestration-based Saga
Babel Coder
Babel Coder
https://www.babelcoder.com
5.1 CHOREOGRAPHY-BASED SAGA
Order
Stock
Payment
ORDER_REQUESTED
1.
2. ORDER_CREATED
3. STOCK_RESERVED
4
.
O
R
D
E
R
_
P
L
A
C
E
D
Babel Coder
Babel Coder
https://www.babelcoder.com
Babel Coder
Babel Coder
https://www.babelcoder.com
ORDER_CREATED
5.1 CHOREOGRAPHY-BASED SAGA
5.2 ORCHESTRATION-BASED SAGA
Orchestrator
Order
Stock
Payment
T1: Order requested
Saga
Log
ORDER_REQUESTED
1.
T3: Check status requested
3. CHECK_STOCK_REQUESTED
2. ORDER_CREATED
4. STOCK_RESERVED
6. PAYMENT_APPROVED
T5: Payment requested
5. PAYMENT_REQUESTED
T6: Payment approved
7. O
RD
ER_
RESERV
ED
T2: Order created
T4: Stock reserved
T7: Order reserved
Babel Coder
Babel Coder
https://www.babelcoder.com
6. COMPENSATING TRANSACTIONS
Orchestrator
Order
Stock
Payment
T1: Order requested
Saga
Log
ORDER_REQUESTED
1.
T3: Check status requested
3. CHECK_STOCK_REQUESTED
2. ORDER_CREATED
4. STOCK_REJECTED
C3: -
C2: -
T2: Order created
T4: Stock rejected
C1: Order cancelled
5
.
O
R
D
E
R
_
C
A
N
C
E
L
L
E
D
Babel Coder
Babel Coder
https://www.babelcoder.com
C4: -
DOCKER
Babel Coder
Babel Coder
https://www.babelcoder.com
App A
glibc 2.39
App B
glibc 1.2
1. ปัญหาของเทคโนโลยี VIRTUALIZATION
Babel Coder
Babel Coder
https://www.babelcoder.com
1. ปัญหาของเทคโนโลยี VIRTUALIZATION
Host OS
Guest OS Guest OS
App A
glibc 2.39
App B
glibc 1.2
VM 1 VM 2
Babel Coder
Babel Coder
https://www.babelcoder.com
1. ปัญหาของเทคโนโลยี VIRTUALIZATION
Host OS
App A
glibc 2.39
App B
glibc 1.2
C 1 C 2
Docker Engine
Babel Coder
Babel Coder
https://www.babelcoder.com
1. ปัญหาของเทคโนโลยี VIRTUALIZATION
Host OS
Docker Engine
Service A
C 1 C 2
Service B
C 2
Service B
C 2
Service B
Babel Coder
Babel Coder
https://www.babelcoder.com
2. ประวัติย่อของเทคโนโลยีคอนเทนเนอร์
Docker เป็นชุดของผลิตภัณฑ์ platform as a service (PaaS) ที่ได้สร้างการเปลี่ยนแปลงในโลกของการ
พัฒนาซอฟต์แวร์ด้วยวิธีการนำเสนอซอฟต์แวร์ในแพคเกจที่เรียกว่าคอนเทนเนอร์
Docker ก่อตั้งขึ้นเป็น DotCloud ในปี 2008 โดย Solomon Hykes ที่ปารีส เริ่มต้นจากการเป็น platform
as a service (PaaS) ก่อนที่จะเปลี่ยนเป็นเทคโนโลยีคอนเทนเนอร์ในปี 2013
รุ่นเริ่มต้นของ Docker ออกมาในวันที่ 20 มีนาคม 2013 ซอฟต์แวร์ที่เป็นตัวจัดการและหัวใจสำคัญของการ
ควบคุมคอนเทนเนอร์เรียกว่า `Docker Engine` Docker เป็นเครื่องมือที่ใช้ในการทำงานอัตโนมัติของการ
ปรับใช้แอปพลิเคชันในคอนเทนเนอร์ที่ Lightweight เพื่อให้แอปพลิเคชันสามารถทำงานได้อย่างมีประสิทธิภาพ
ในสภาพแวดล้อมที่แตกต่างกัน
เมื่อ Docker ปรากฏขึ้นในปี 2013 คอนเทนเนอร์ได้รับความนิยมอย่างรวดเร็ว การเติบโตของ Docker และ
การใช้คอนเทนเนอร์ไปด้วยกัน Docker ใช้ LXC ในช่วงเริ่มต้นและในภายหลังได้แทนที่ตัวจัดการคอนเทนเนอร์
นั้นด้วยไลบรารีของตนเองคือ libcontainer
Babel Coder
Babel Coder
https://www.babelcoder.com
3. การทำงานของ DOCKER
$
App
80
docker run -p 5152:80 babelcoder/intro-to-devops-ui:1.0
Image
Tag
Port Mapping
Unable to find image 'babelcoder/intro-to-devops-ui:1.0' locally
1.0: Pulling from babelcoder/intro-to-devops-ui
619be1103602: Already exists
018b9065ed0d: Already exists
c3ea3344e711: Already exists
c7059f310278: Already exists
a101c9a82b88: Already exists
d6a456492aaa: Already exists
e1c681003a03: Already exists
a85ccd8c07bd: Already exists
e31596f4f45d: Already exists
Digest: sha256:fca7c993dd5c3fbe2ab3e320f4a77c049f1d475b6efbf5f249b9f668b8c68373
Status: Downloaded newer image for babelcoder/intro-to-devops-ui:1.0
HOST
5152
-p 5152:80
Babel Coder
Babel Coder
https://www.babelcoder.com
docker run
ค้นหา Image บน
เครื่อง
มีติดตั้งแล้วหรือ
ไม่
3. การทำงานของ DOCKER
ค้นหา Image จาก
Docker Hub
พบบน Docker
Hub หรือไม่
ดาวน์โหลด Image
ติดตั้ง Layers ต่าง ๆ
บนเครื่อง
Docker ทำการสร้าง
container จาก
Image พร้อมเริ่ม
ทำงาน
container ทำงาน
No
Yes
Babel Coder
Babel Coder
https://www.babelcoder.com
3. การทำงานของ DOCKER
C1
C2
C3
Dockerfile Docker Images
docker build
docker run
Babel Coder
Babel Coder
https://www.babelcoder.com
3. การทำงานของ DOCKER
$
$
$
$
$
Unable to find image 'babelcoder/intro-to-devops-ui:1.0' locally
1.0: Pulling from babelcoder/intro-to-devops-ui
docker run -p 5152:80 babelcoder/intro-to-devops-ui:1.0
docker ps
docker stop amazing_lamarr
docker start amazing_lamarr
docker stop amazing_lamarr && docker rm amazing_lamarr
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
625f8285698b babelcoder/intro-to-devops-ui:1.0 "/docker-entrypoint.…" 5 seconds ago Up 5 seconds 0.0.0.0:5152->80/tcp amazing_lamarr
Babel Coder
Babel Coder
https://www.babelcoder.com
API
SITE
6379
6379
5152
3000
80 5151
4. การใช้งาน DOCKER COMPOSE
redis
babelcoder/intro-to-devops-api
babelcoder/intro-to-devops-ui
Babel Coder
Babel Coder
https://www.babelcoder.com
4. การใช้งาน DOCKER COMPOSE
API
SITE
6379
6379
5152
3000
80 5151
redis
babelcoder/intro-to-devops-api
babelcoder/intro-to-devops-ui docker-compose.yml
$ docker compose up
Babel Coder
https://www.babelcoder.com
5. การสร้าง DOCKER IMAGES
Dockerfile Docker Images
Docker Hub
push
pull
build
1
2
3
Layer
Layer
Layer
Layer
Babel Coder
Babel Coder
https://www.babelcoder.com
5. การสร้าง DOCKER IMAGES
./api
$
$
CGO_ENABLED=0 go build -o api
Babel Coder
https://www.babelcoder.com
$ # install Go compiler
$ go mod download
5. การสร้าง DOCKER IMAGES
./api
$
$
CGO_ENABLED=0 go build -o api
Babel Coder
Babel Coder
https://www.babelcoder.com
มี Go Compiler ใน Image นี้
Dockerfile
$ # install Go compiler
$ go mod download
5. การสร้าง DOCKER IMAGES
Babel Coder
Babel Coder
https://www.babelcoder.com
$ /app/api $ nginx -g daemon off
5. การสร้าง DOCKER IMAGES
Cache
Docker Images
Babel Coder
Babel Coder
https://www.babelcoder.com
5. การสร้าง DOCKER IMAGES
Babel Coder
Babel Coder
https://www.babelcoder.com
ในการดาวน์โหลดแพคเกจนั้นต้องอาศัยไฟล์
go.mod และ go.sum
ที่มีรายการแพคเกจที่ต้องใช้งานแสดงอยู่ภายในไฟล์
5. การสร้าง DOCKER IMAGES
Babel Coder
Babel Coder
https://www.babelcoder.com
5. การสร้าง DOCKER IMAGES
Babel Coder
Babel Coder
https://www.babelcoder.com
5. การสร้าง DOCKER IMAGES
$ docker build -t babelcoder/intro-to-devops-api:1.0 .
Build Context
REPOSITORY TAG IMAGE ID CREATED SIZE
babelcoder/intro-to-devops-api 1.0 0549c371879d 3 hours ago 17.2MB
$ docker image ls
Babel Coder
Babel Coder
https://www.babelcoder.com
5. การสร้าง DOCKER IMAGES
docker build -t babelcoder/intro-to-devops-api:1.0 .
$
.dockerignore
Babel Coder
Babel Coder
https://www.babelcoder.com
6. การเผยแพร่ DOCKER IMAGES
docker login
$
Username: xxxxxx
Password: xxxxxx
Login Succeeded
docker push babelcoder/intro-to-devops-api:1.0
$
The push refers to repository [docker.io/babelcoder/intro-to-devops-api]
2174cfeeabd2: Pushed
b8d6ec71502e: Pushed
d4fc045c9e3a: Layer already exists
1.0: digest:
sha256:214d679fde8958b9ea028430aea9bea5b6c46790724422db8c3291c8e
308cb5e size: 945
Docker Hub
push
Babel Coder
Babel Coder
https://www.babelcoder.com
6. การเผยแพร่ DOCKER IMAGES
$
Babel Coder
Babel Coder
https://www.babelcoder.com
KONG
GATEWAY
Babel Coder
Babel Coder
https://www.babelcoder.com
Babel Coder
Babel Coder
https://www.babelcoder.com
API
Site
1. API GATEWAY คืออะไร
GET <GATEWAY_IP>/api
A
P
I
G
a
t
e
w
a
y
GET <GATEWAY_IP>
1. API GATEWAY
API Gateway เป็นอินเตอร์เฟซที่จัดการกับ Request ต่าง ๆ ที่หลากหลาย ก่อนจะทำการส่งต่อไปยังเซอร์วิสที่อยู่ภายใน
API Gateway มีหน้าที่ดังนี้:
Filter: กรอง traffic หรือ request ที่เข้ามาจากทั้ง web, mobile, web service และอื่น ๆ โดยแก้ปัญหาได้หลายหลาก เช่น
การมีหลาย Entry point (URL) ของแต่ละเซอร์วิส ทำให้ยากต่อการจดจำและเข้าถึง และปัญหาด้านความปลอดภัย เป็นต้น
Single Entry Point: เปิดเผย Endpoint ของ APIs ต่าง ๆ โดยเปิดเผยเพียงแค่ endpoint เดียว แล้วให้ request ที่เข้ามา
ถูกพิจารณาส่วนของ Path ก่อน เช่น เมื่อพาธเป็น /articles ให้วิ่งต่อไปยังเซอร์วิสคือ Article ส่วนนี้จึงกล่าวได้ว่า API
Gateway ทำหน้าที่ Routing
API Management: การจัดการกับ API ต่าง ๆ ที่จะถูกส่งต่อไป เช่น rate limit เป็นต้น
Security mechanism: กลไกของเรื่องความปลอดภัย ไม่ว่าจะเป็นการเข้าถึงบางเซอร์วิสที่ต้องผ่านการลอคอินก่อน หรือการ
ทำ logging เป็นต้น
Babel Coder
Babel Coder
https://www.babelcoder.com
2. KONG API GATEWAY
ซอฟต์แวร์ API Gateway ที่นิยมในปัจจุบันมีหลายตัวในที่นี้จะนำเสนอ Kong API Gateway
Kong API Gateway เป็นระบบ API Gateway แบบ Opensource ที่คอยบริหารจัดการ API ทั้งส่วนของการทำ Routing และ
Monitoring นอกจากนี้ยังรองรับ Plugin ต่าง ๆ ที่เกี่ยวข้องในการจัดการ API อีกด้วย วิธีการตั้งค่า Kong มีด้วยกันหลายวิธี
สำหรับบทเรียนนี้จะนำเสนอรูปแบบการตั้งค่าผ่านไฟล์ kong.yml โดยสร้าง Endpoint เดียวเมื่อมี Request ส่งเข้ามาจะส่งการ
ทำงานต่อเนื่องไปยังเซอร์วิสปลายทางโดยพิจารณาจากพาธ ดังนี้
/: ให้ส่ง Request ต่อไปยังเซอร์วิส site
/api: ให้ส่ง Request ต่อไปยังเซอร์วิส api
Babel Coder
Babel Coder
https://www.babelcoder.com
Babel Coder
Babel Coder
https://www.babelcoder.com
2. KONG API GATEWAY
kong/kong.yml docker-compose.yml
<IP>:8000
<IP>:8000/api
TERRAFORM
Babel Coder
Babel Coder
https://www.babelcoder.com
DIGITAL OCEAN
Babel Coder
Babel Coder
https://www.babelcoder.com
Digital Ocean เป็นหนึ่งในบริการคลาวด์ที่ให้บริการทั้งการสร้างเซิฟเวอร์แบบ VPS การสร้างพื้นที่สำหรับการ
จัดเก็บข้อมูล และบริการอื่น ๆ อีกมาก เช่น ระบบคลัสเตอร์ของ Kubernetes ในที่นี้เราจะทำการสร้างเซิฟเวอร์
ผ่านบริการสร้างที่เรียกว่า Droplets
Droplets คือเครื่องเสมือน (Virtual Machine) ที่ทำงานบนระบบปฏิบัติการ Linux แต่ละ Droplets จะ
เสมือนเป็นเครื่องเซิฟเวอร์ที่แยกจากกันในลักษณะของ VPS
DIGITAL OCEAN
Babel Coder
Babel Coder
https://www.babelcoder.com
$ ssh-keygen
เมื่อ Droplets มีลักษณะเป็นเซิฟเวอร์ เราจึงสามารถเข้าถึงเซิฟเวอร์นี้ได้ด้วย 2 วิธี คือการใช้ SSH และการใช้รหัสผ่าน ในที่นี้จะ
นำเสนอการเข้าถึงเซิฟเวอร์ด้วย SSH โดยเริ่มต้นจากการสร้าง SSH Keys ก่อนผ่านคำสั่งดังนี้ เมื่อ nthongjor คือชื่อของผู้ใช้
งานปัจจุบันบนเครื่อง
Generating public/private rsa key pair.
Enter file in which to save the key (/home/nthongjor/.ssh/id_rsa): /home/nthongjor/.ssh/do_terraform
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/nthongjor/.ssh/do_terraform
Your public key has been saved in /home/nthongjor/.ssh/do_terraform.pub
The key fingerprint is:
SHA256:U1q3moz32e2ElwXZ7iI+d5qX6UxJlgJlN33Hkp09dIw nthongjor@LAPTOP-HEF902DE
The key's randomart image is:
+---[RSA 3072]----+
| o.X=|
| o E=@|
| o.. o.=|
|
DIGITAL OCEAN
Babel Coder
Babel Coder
https://www.babelcoder.com
$ cat /home/nthongjor/.ssh/do_terraform.pub
จากนั้นให้ทำการแสดง Public Key ดังกล่าวผ่านคำสั่ง cat แล้วจึงทำการคัดลอกค่าดังกล่าวไว้
ssh-rsa xxxxxxxxxxxxxxxxxxxx
Babel Coder
Babel Coder
https://www.babelcoder.com
DIGITAL OCEAN
Babel Coder
Babel Coder
https://www.babelcoder.com
DIGITAL OCEAN
Babel Coder
Babel Coder
https://www.babelcoder.com
DIGITAL OCEAN
Babel Coder
Babel Coder
https://www.babelcoder.com
DIGITAL OCEAN
Babel Coder
Babel Coder
https://www.babelcoder.com
DIGITAL OCEAN
Babel Coder
Babel Coder
https://www.babelcoder.com
DIGITAL OCEAN
Babel Coder
Babel Coder
https://www.babelcoder.com
DIGITAL OCEAN
Babel Coder
Babel Coder
https://www.babelcoder.com
DIGITAL OCEAN
Babel Coder
Babel Coder
https://www.babelcoder.com
DIGITAL OCEAN
Babel Coder
Babel Coder
https://www.babelcoder.com
DIGITAL OCEAN
Babel Coder
Babel Coder
https://www.babelcoder.com
DIGITAL OCEAN
Babel Coder
Babel Coder
https://www.babelcoder.com
DIGITAL OCEAN
Babel Coder
Babel Coder
https://www.babelcoder.com
DIGITAL OCEAN
Babel Coder
Babel Coder
https://www.babelcoder.com
DIGITAL OCEAN
$ ssh -i ~/.ssh/do_terraform root@206.189.43.202
ลำดับถัดไปเราจะทำการทดสอบว่า Droplet ของเราสามารถใช้งานได้จริงและมี Docker ติดตั้งอยู่ภายในเซิฟ
เวอร์ ให้ทำการคัดลอก IP ของ Droplet แล้วจึงออกคำสั่งดังต่อไปนี้
The authenticity of host '206.189.43.202 (206.189.43.202)' can't be established.
ED25519 key fingerprint is SHA256:C+HytWBXrD957ZKo4QGvYhcKRBn/kTm6gQm4eOxTJOg.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '206.189.43.202' (ED25519) to the list of known hosts.
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-94-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
System information as of Wed Mar 27 11:45:50 UTC 2024
Babel Coder
Babel Coder
https://www.babelcoder.com
DIGITAL OCEAN
$ docker info
ทำการทดสอบว่ามี Docker ติดตั้งอยู่ภายในด้วยการออกคำสั่งนี้
Client: Docker Engine - Community
Version: 25.0.3
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.12.1
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.17.2
Path: /root/.docker/cli-plugins/docker-compose
INFRASTRUCTURE AS CODE
Infrastructure as Code (IaC) คือวิธีในการจัดการและสร้างส่วนของ Infrastructure
ผ่านไฟล์ที่มีรูปแบบโครงสร้างที่ง่ายต่อการทำความเข้าใจ โดยไฟล์ดังกล่าวจะมีลักษณะของการอธิบายถึง
สถานะสุดท้ายที่ต้องการให้ระบบเป็น โดย IaC มีคุณสมบัติหลัก ดังนี้
การจัดการเป็นไปอย่างอัตโนมัติ
01
มีการควบคุมเวอร์ชัน
02
มีประสิทธิภาพ
03
สามารถนำไปใช้ซ้ำได้
04
Babel Coder
Babel Coder
https://www.babelcoder.com
TERRAFORM
Babel Coder
Babel Coder
https://www.babelcoder.com
Terraform เป็นเครื่องมือที่ใช้จัดการ Infrastructure อย่างปลอดภัยและมีประสิทธิภาพ โดยใช้ภาษาที่เรียกว่า
HashiCorp Configuration Language (HCL) ที่สั้นและเข้าใจง่ายในการนิยามการทำงานซึ่งสามารถใช้จัดการ Cloud ได้
เกือบทุกเจ้า รวมถึง Docker, Kubernetes, และอีกมากมายกว่า 200+ providers
Terraform มีความสามารถดังนี้:
จัดการ resources ด้วย configuration syntax ที่สั้นและเข้าใจง่าย: สามารถกำหนดและจัดการกับ
Infrastructure เช่น เซิร์ฟเวอร์, Network, และ Database ด้วยภาษา HCL (HashiCorp Configuration
Language) โดยทีมนักพัฒนาสามารถกำหนดรายละเอียดโดยสร้าง Configuration Files และสามารถแก้ไขได้ตาม
ต้องการ ⁴.
แสดงสิ่งที่กำลังจะทำ: ก่อนที่จะมีการสร้าง/ลบ/แก้ไข resources จริงๆ เพื่อให้ทราบว่าจะมีการทำอะไรกับ
Infrastructure บ้าง ช่วยลดโอกาสผิดพลาด
สร้าง resource-dependencies graph: เพื่อจัดลำดับการสร้าง/ลบ/แก้ไข resources ได้อย่างมีประสิทธิภาพ
สูงสุด
รัน configuration ซ้ำได้เรื่อยๆ: โดยที่ไม่ทำให้ resources เดิมมีปัญหา
ใช้จัดการ resources ได้แทบทุก platforms
Babel Coder
Babel Coder
https://www.babelcoder.com
TERRAFORM ARCHITECTURE
ส่วนประกอบหลักของ Terraform ประกอบด้วย Terraform Core, Terraform State File และ Terraform
Providers ดังนี้
DevOps Terraform Manifest Files
(.tf)
Terraform Core
Providers
Provisioners
Plugins
State File
(.tfstate)
AWS, Azure, GCP, ...
remote-exec, local-exec, ...
Cloud Service Providers
command
Babel Coder
Babel Coder
https://www.babelcoder.com
การสร้างไฟล์ตั้งค่า DROPLETS
ก่อนอื่นเราต้องหาให้เจอก่อนว่าปลั๊กอินของ Terraform ที่ใช้กับ Cloud Provider เจ้านั้น ๆ มีชื่อว่าอย่างไร โดยการใช้
Google เช่น กรณีของ Digital Ocean เราสามารถค้นหาได้ด้วยคำว่า digitalocean terraform
Babel Coder
Babel Coder
https://www.babelcoder.com
การสร้างไฟล์ตั้งค่า DROPLETS
เมื่อทำการเข้าสู่หน้าเอกสารดังกล่าวจะพบกับวิธีการใช้งานของปลั๊กอินนั้น ๆ
Babel Coder
Babel Coder
https://www.babelcoder.com
การสร้างไฟล์ตั้งค่า DROPLETS
ลำดับถัดมาให้ทำการสร้างไฟล์ main.tf โดยเริ่มต้นจากการประกาศบลอค terraform ด้วยการระบุ Provider ที่ต้องการใช้
งานโดยอ้างอิงจากตัวอย่างการใช้ปลั๊กอินบนหน้าเว็บไซต์
การสร้างไฟล์ตั้งค่า DROPLETS
Babel Coder
Babel Coder
https://www.babelcoder.com
กรณีของ Digital Ocean การใช้งาน Terraform มีผลลัพธ์ให้เกิดการเรียกใช้ API โดยส่งไปยัง Digital Ocean เพื่อ
ทำการสร้างทรัพยากรตามที่ระบุ การเข้าถึง API ของ Digital Ocean นั้นต้องแนบ Personal Access Token (PAT) ไป
ด้วย เพื่อให้ Digital Ocean ทราบว่าเราผู้กระทำการเรียกใช้ API นั้นคือใคร
Babel Coder
Babel Coder
https://www.babelcoder.com
การสร้างไฟล์ตั้งค่า DROPLETS
สำหรับวิธีการสร้าง PAT นั้นให้ไปยังเมนู API แล้วเลือก Generate Access Token
Babel Coder
Babel Coder
https://www.babelcoder.com
การสร้างไฟล์ตั้งค่า DROPLETS
หน้าเว็บไซต์จะแสดงหน้าต่าง New Personal access token ให้ทำการระบุ Token name เป็น terraform และเลือก
Write (optional) สุดท้ายจึงกดปุ่ม Generate Token
Babel Coder
Babel Coder
https://www.babelcoder.com
การสร้างไฟล์ตั้งค่า DROPLETS
หน้าจอจะแสดง Token ให้ทำการกดไอคอนข้าง Token เพื่อทำการคัดลอก Token ดังกล่าวเก็บเอาไว้
Babel Coder
Babel Coder
https://www.babelcoder.com
การสร้างไฟล์ตั้งค่า DROPLETS
ทำการประกาศตัวแปรชื่อ do_token โดยเราจะทำการส่งค่าของ Token ที่สร้างเมื่อซักครู่ไปภายหลังเมื่อออกคำสั่งบน
Terraform CLI
Babel Coder
Babel Coder
https://www.babelcoder.com
การสร้างไฟล์ตั้งค่า DROPLETS
เพื่อให้การใช้งานทรัพยากรบน Provider เกิดขึ้นได้ เราต้องตั้งค่าบลอค provider สำหรับ Digital Ocean ต้องทำการส่ง
PAT ไปด้วย
Babel Coder
Babel Coder
https://www.babelcoder.com
การสร้างไฟล์ตั้งค่า DROPLETS
การสร้าง Droplet นั้นจะมีขึ้นตอนนึงที่เราต้องระบุ SSH Key เพื่อให้เราสามารถเข้าถึง Droplet ได้ในภายหลัง เราทราบดี
อยู่แล้วว่าเราเคยสร้าง SSH Key บน Digital Ocean มาก่อนแล้วโดยใช้ชื่อว่า do_terraform เราจึงสามารถใช้บลอค
data เพื่อเข้าถึงค่าที่มีอยู่แล้วบน Provider ได้
Babel Coder
Babel Coder
https://www.babelcoder.com
การสร้างไฟล์ตั้งค่า DROPLETS
สุดท้ายจึงทำการสร้าง Droplet โดยระบุค่าต่าง ๆ ให้เหมือนกับตอนที่เราสั่งสร้างผ่านเว็บไซต์
Babel Coder
Babel Coder
https://www.babelcoder.com
การสร้างไฟล์ตั้งค่า DROPLETS
ก่อนหน้าที่เราจะสร้าง Droplet บนหน้า UI เราสร้างโปรเจคขึ้นมาก่อน สำหรับกรณีของ Terraform ก็สามารถใช้บลอค
resource ในการสร้างโปรเจคขึ้นมาพร้อมระบุ Droplet ที่เราพึ่งสร้างให้เป็นส่วนหนึ่งของโปรเจคดังกล่าวได้
Babel Coder
Babel Coder
https://www.babelcoder.com
การสร้างไฟล์ตั้งค่า DROPLETS
สุดท้ายเราต้องการผลลัพธ์เมื่อออกคำสั่ง Terraform ให้เป็นเลข IP ของ Droplet ที่พึ่งสร้าง เราจึงสร้างส่วนบลอค
output ดังนี้
TERRAFORM WORKFLOW
Babel Coder
Babel Coder
https://www.babelcoder.com
Terraform Workflow คือขั้นตอนปฏิบัติในการใช้งาน Terraform แบ่งออกเป็น 5 ขั้นตอนได้แก่ Write Init Plan Apply และ
Destroy
Write: Write หรือ Define คือขั้นตอนของการเขียนไฟล์การตั้งค่าของ Terraform โดยต้องนิยามบลอคต่าง ๆ ให้ครบถ้วน
Init: เป็นขั้นตอนของการออกคำสั่ง terraform init มีผลให้เกิดการสร้างพื้นที่ของการทำงานที่เรียกว่า Terraform
Workspace ในขั้นตอนนี้จะมีการสร้างโฟลเดอร์ชื่อ .terraform ขึ้นมาโดย Terraform จะทำการดาวน์โหลด Providers ต่าง ๆ
ที่เรานิยามไว้นำมาใส่โฟลเดอร์นี้
Plan: คำสั่ง terraform plan เป็นคำสั่งของขั้นตอนนี้ที่ Terraform จะมีการเชื่อมต่อกับ Cloud Providers ที่เรานิยามไว้ในไฟล์
การตั้งค่าเพื่อตรวจสอบว่าทรัพยากรใดที่นิยามเอาไว้ที่ยังไม่มีอยู่บน Providers นั้น ๆ บ้าง แล้วจึงออกรายงานบนหน้าจอเพื่อให้
ทราบว่าจะมีการเปลี่ยนแปลงใดเกิดขึ้นบ้างเมื่อ Terraform ได้รับการทำงาน ในขั้นตอนของ Plan จะยังไม่มีการเปลี่ยนแปลง
ทรัพยากรบน Providers แต่อย่างใด
Apply: ขั้นตอนนี้เป็นขั้นตอนของคำสั่ง terraform apply ที่จะทำการสร้าง แก้ไข หรือเปลี่ยนแปลงทรัพยากรบน Cloud
Providers ตราบใดที่ทรัพยากรบน Providers เหล่านั้นไม่ตรงกับที่นิยามในไฟล์การตั้งค่า โดยทั่วไปแล้วขั้นตอนของการ apply จะ
มีการเรียก plan ก่อนเพื่อให้เห็นว่าจะเกิดการเปลี่ยนแปลงใดบ้าง เมื่อผู้ใช้งานยอมรับการเปลี่ยนแปลงนั้นจึงเกิดการสร้างหรือแก้ไข
ทรัพยากรบน Providers ต่อไป
Destroy: ขั้นตอนนี้เป็นขั้นตอนของการลบ Infrastructure ทั้งหลายที่ถูกจัดการด้วย Terraform
Babel Coder
Babel Coder
https://www.babelcoder.com
TERRAFORM INIT
$ terraform init
TERRAFORM PLAN
$ terraform plan
Babel Coder
Babel Coder
https://www.babelcoder.com
Terraform will perform the following actions:
# digitalocean_droplet.my-node will be created
+ resource "digitalocean_droplet" "my-node" {
+ backups = false
+ created_at = (known after apply)
+ disk = (known after apply)
+ graceful_shutdown = false
+ id = (known after apply)
+ image = "docker-20-04"
+ ipv4_address = (known after apply)
+ ipv4_address_private = (known after apply)
+ ipv6 = false
+ ipv6_address = (known after apply)
+ locked = (known after apply)
....
Babel Coder
Babel Coder
https://www.babelcoder.com
Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# digitalocean_droplet.my-node will be created
+ resource "digitalocean_droplet" "my-node" {
+ backups = false
+ created_at = (known after apply)
+ disk = (known after apply)
+ graceful_shutdown = false
+ id = (known after apply)
+ image = "docker-20-04"
+ ipv4_address = (known after apply)
TERRAFORM APPLY
$ terraform apply
Babel Coder
Babel Coder
https://www.babelcoder.com
Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
- destroy
Terraform will perform the following actions:
# digitalocean_droplet.my-node will be destroyed
- resource "digitalocean_droplet" "my-node" {
- backups = false -> null
- created_at = "2024-04-18T11:43:43Z" -> null
TERRAFORM DESTROY
$ terraform destroy
GITOPS
Babel Coder
Babel Coder
https://www.babelcoder.com
GITOPS
GitOps เป็นกรอบการทำงานที่รวมเอาทฤษฎีของ DevOps มาใช้งานด้วยการผสานเข้ากับ Git โดยมีรูปแบบ
ในการจัดการผ่าน Git ในฐานะที่เป็นแหล่งเก็บข้อมูลสำคัญ GitOps เน้นการประกาศการทำงานของส่วนต่าง ๆ
ในรูปแบบของ Declarative (เขียนคำสั่งในลักษณะของการตั้งค่าว่าปลายทางต้องการผลลัพธ์ใด) มากกว่าการ
สร้างชุดคำสั่งหลายขั้นตอนที่มีลักษณะยาวและยากต่อการทำความเข้าใจ การตั้งค่าต่าง ๆ ของระบบ เช่น
Infrastructure การทำงานของ Kubernetes ขั้นตอนของ CI/CD ทุกอย่างล้วนจัดเก็บเป็นค่าคอนฟิคใน
ลักษณะของโค้ดแบบ Declarative ใน Git Repository
Babel Coder
Babel Coder
https://www.babelcoder.com
1. ทำไม GITOPS จึงจำเป็น
ทำให้การ Deploy ซอฟต์แวร์ดีกว่าเดิม
01
ทำให้การกู้คืนระบบจากข้อผิดพลาดเป็นไปอย่างรวดเร็ว
02
มีการจัดการข้อมูลความลับหรือ Credentials ที่ดีกว่าเดิม
03
ขั้นตอนการ Deploy อธิบายได้ด้วยชุดของการตั้งค่า
04
ส่งเสริมให้เกิดความรู้สึกเป็นเจ้าของและการแสวงหาความรู้
05
Babel Coder
Babel Coder
https://www.babelcoder.com
2. หลักการของ GITOPS
อธิบายระบบทั้งหมดด้วยวิธีการแบบ Declarative
01
ใช้ Git เป็นเครื่องมือควบคุมเวอร์ชัน
02
การเปลี่ยนแปลงใด ๆ ในระบบเป็นไปอย่างอัตโนมัติโดยอาศัยเครื่องมือ
03
สามารถกู้คืนสู่สถานะที่ถูกต้องได้โดยอัตโนมัติและแจ้ง
เตือนได้เมื่อเกิดสิ่งผิดปกติ
04
Babel Coder
Babel Coder
https://www.babelcoder.com
3. GITOPS WORKFLOW - PUSH MODEL
01
Build Pipeline
Deployment
Pipeline
Environment
triggers
push
update triggers deploys
The push model
Application
Repository
Image Registry
Environment
Repository
Babel Coder
Babel Coder
https://www.babelcoder.com
Build Pipeline
Deployment
Pipeline
Environment
3. GITOPS WORKFLOW - PULL MODEL
01
The pull model
triggers
push
update
deploys
Application
Repository
Environment
Repository
observes
observes
writes
Babel Coder
Babel Coder
https://www.babelcoder.com
CI / CD
Babel Coder
Babel Coder
https://www.babelcoder.com
Babel Coder
CI / CD
CI/CD ย่อมาจาก Continuous Integration และ Continuous Delivery/Deployment เป็นกลุ่มของ
หลักการปฏิบัติในการกระบวนการพัฒนาและส่งมอบซอฟต์แวร์อย่างอัะตโนมัติ
Continuous Integration (CI) เป็นหลักปฏิบัติที่ทำให้สามารถเปลี่ยนแปลงซอร์จโค้ดได้บ่อยตาม
ต้องการ เนื่องจากรวมหลักปฏิบัติที่ดีแบบอัตโนมัติไว้ในขั้นตอนของ CI เช่น การทดสอบซอฟต์แวร์แบบ
อัตโนมัติ เป็นต้น ขั้นตอนดังกล่าวจึงช่วยให้การเปลี่ยนแปลงซอร์จโค้ดผ่านการ Merged Code เกิดขึ้นได้
บ่อยเท่าที่ต้องการ โดยลดความเป็นกังวลด้านความน่าเชื่อถือของซอฟต์แวร์ลงด้วยการทดสอบแบบ
อัตโนมัตินั่นเอง
Continuous Delivery/Deployment (CD) เป็นขั้นตอนที่กล่าวถึงการรวมความเปลี่ยนแปลงของ
โค้ดเข้ากับการทดสอบแล้วจึงทำการส่งมอบโค้ดที่เปลี่ยนแปลงนั้นออกเป็นแอปพลิเคชันต่อไป
Continuous Delivery นั้นจะเป็นขั้นตอนที่รวมถึงการ built การทดสอบแบบอัตโนมัติ และการเตรียม
ความพร้อมสำหรับการ Deploy สู่ Production โดยการนำส่งสู่ Production นี้ขึ้นอยู่กับการตัดสินใจซึ่ง
อาจจะอยู่ในรูปแบบของการ Manual Deploy ในขณะที่ Continuous Deployment จะเป็นขั้นตอนแบบ
อัตโนมัติทั้งหมดที่โค้ดทุกส่วนที่เปลี่ยนแปลงและได้รับการทดสอบแบบอัตโนมัติแล้วจะถูกนำส่งสู่
Production โดยอัตโนมัติ
Babel Coder
https://www.babelcoder.com
Babel Coder
CI / CD
Code
push
Github
Test
Build
Register Image
Deploy
CI
CI
CI
CD
CD
CD
Babel Coder
https://www.babelcoder.com
Babel Coder
สร้างการทำงาน CI ด้วย GITHUB ACTIONS
Github Actions คือแพลตฟอร์มสำหรับการสร้างการทำงานแบบ Continuous Integration (CI) และ
Continuous Delivery (CD) เพื่อสร้างการทำงานแบบอัตโนมัติสำหรับการ build, test และ deploy ในรูป
แบบของขั้นตอนการทำงานหรือที่เรียกว่า Workflow โดยอาศัยการผูกความสัมพันธ์กับเหตุการณ์ (Event) ที่
เกิดขึ้น เช่น ให้เกิดการทำ CI เมื่อมีการ push หรือเมื่อเกิด pull request เป็นต้น
Babel Coder
https://www.babelcoder.com
สร้างการทำงาน CI ด้วย GITHUB ACTIONS
Babel Coder
Code
push
Github
Babel Coder
https://www.babelcoder.com
สร้างการทำงาน CD ด้วย GITHUB ACTIONS
Babel Coder
Code
push
Github
Babel Coder
https://www.babelcoder.com
LOGGING, TRACING
AND
MONITORING
Babel Coder
Babel Coder
https://www.babelcoder.com
ELASTIC STACK
Babel Coder
Babel Coder
https://www.babelcoder.com
ELASTIC STACK
Babel Coder
Babel Coder
https://www.babelcoder.com
ELASTIC STACK
Babel Coder
Babel Coder
https://www.babelcoder.com
GRAFANA
Babel Coder
Babel Coder
https://www.babelcoder.com
KUBERNETES
Babel Coder
Babel Coder
https://www.babelcoder.com
1. CONTAINER ORCHESTRATION
https://kubernetes.io/docs/concepts/architecture/
Babel Coder
Babel Coder
https://www.babelcoder.com
1. CONTAINER ORCHESTRATION
Babel Coder
Babel Coder
https://www.babelcoder.com
2. PODS
$ kubectl run site --image=babelcoder/intro-to-devops-ui:1.0
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
site 1/1 Running 0 2m1s
$ kubectl port-forward site 5151:80
Forwarding from 127.0.0.1:5151 -> 80
Forwarding from [::1]:5151 -> 80
Babel Coder
Babel Coder
https://www.babelcoder.com
2. PODS
$ kubectl port-forward site 5151:80
Forwarding from 127.0.0.1:5151 -> 80
Forwarding from [::1]:5151 -> 80
kubectl
5151 kube API
server
Pod
443 80
localhost Kubernetes Cluster
Babel Coder
Babel Coder
https://www.babelcoder.com
2. PODS
$ kubectl delete pod site
pod "site" deleted
Babel Coder
Babel Coder
https://www.babelcoder.com
/usr/share/nginx/html
index.html
3. MULTI-CONTAINER DESIGN PATTERNS
site
init
Init Containers
api
ambassador
Ambassador Pattern
localhost:6379
redis pod
redis
redis:6379
Babel Coder
Babel Coder
https://www.babelcoder.com
3. MULTI-CONTAINER DESIGN PATTERNS
site
log
Sidecar Pattern
api redis pod
Volume
log transformer
Volume
site
Adapter Pattern
Babel Coder
Babel Coder
https://www.babelcoder.com
4. DEPLOYMENTS
Deployment ReplicaSet Pods
Manages
Manages
Babel Coder
Babel Coder
https://www.babelcoder.com
4. DEPLOYMENTS
ReplicaSet
Deployment
M
anages
app=site app=site
app=site
app=api
$ kubectl apply -f deployment.yaml
deployment.yaml
Babel Coder
Babel Coder
https://www.babelcoder.com
Target Pod
Target Pod Target Pod Source Pod
Cluster IP
5. SERVICES - CLUSTER IP
Kubernetes Cluster
Node Node
Internal
Communication
(api)
(db)
(db)
(db)
service.yaml
Babel Coder
Babel Coder
https://www.babelcoder.com
5. SERVICES - CLUSTER IP
Kubernetes Cluster
Target Pod
Target Pod Target Pod Source Pod
Cluster IP
Node Node
Internal
Communication
(api)
(db)
(db)
(db)
$ $ kubectl apply -f service.yaml
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
db ClusterIP 10.102.134.43 <none> 6379/TCP 3s
$ kubectl describe svc db
TargetPort: 6379/TCP
Endpoints: 10.1.0.26:6379,10.1.0.30:6379,10.1.0.32:6379
$ kubectl run busybox --rm --restart Never -it --
image=busybox
/ # telnet db 6379
Connected to db
Babel Coder
Babel Coder
https://www.babelcoder.com
Target Pod
Target Pod Target Pod
Cluster IP
Node Port - 32074 Node Port - 32074
5. SERVICES - NODEPORT
Kubernetes Cluster
(api)
(api)
(api)
service.yaml
Babel Coder
Babel Coder
https://www.babelcoder.com
5. SERVICES - NODEPORT
Target Pod
Target Pod Target Pod
Cluster IP
Node Port - 32074 Node Port - 32074
Babel Coder
Babel Coder
https://www.babelcoder.com
Kubernetes Cluster
(api)
(api)
(api)
$ kubectl apply -f service.yaml
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
api NodePort 10.100.61.121 <none> 5152:32074/TCP 14m
$ kubectl describe svc api
Port: <unset> 5152/TCP
TargetPort: 3000/TCP
NodePort: <unset> 32074/TCP
Endpoints: 10.1.0.27:3000,10.1.0.28:3000,10.1.0.34:3000
$ curl localhost:32074
เข้าถึงด้วย IP ของ Node กรณีของการใช้ Kubernetes บน Docker
จะมีเพียง 1 Node และสามารถเข้าถึง Node นั้นได้ผ่าน localhost
Target Pod
Target Pod Target Pod
Cluster IP
Node Port - 32074 Node Port - 32074
5. SERVICES - LOADBALANCER
Load Balancer
Kubernetes Cluster
(site)
(site)
(site)
service.yaml
Babel Coder
Babel Coder
https://www.babelcoder.com
Target Pod
Target Pod Target Pod
Cluster IP
Node Port - 30575 Node Port - 30575
5. SERVICES - LOADBALANCER
Load Balancer
Kubernetes Cluster
(site)
(site)
(site)
$ kubectl apply -f service.yaml
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
site LoadBalancer 10.96.239.241 localhost 5151:30575/TCP 34m
$ kubectl describe svc site
Port: <unset> 5151/TCP
TargetPort: 80/TCP
NodePort: <unset> 30575/TCP
Endpoints: 10.1.0.29:80,10.1.0.31:80,10.1.0.33:80
Session Affinity: None
External Traffic Policy: Cluster
$ curl localhost:5151
Babel Coder
Babel Coder
https://www.babelcoder.com
เข้าถึงด้วย IP ของ Cluster กรณีของการใช้ Kubernetes บน Docker
จะมีเพียง 1 Node และสามารถเข้าถึง Cluster ผ่าน Node นั้นได้ผ่าน localhost
6. CONFIGMAP
docker-compose.yml
Babel Coder
Babel Coder
https://www.babelcoder.com
6. CONFIGMAP
docker-compose.yml config-map.yaml
Babel Coder
Babel Coder
https://www.babelcoder.com
6. CONFIGMAP
config-map.yaml
deployment.yaml
Babel Coder
Babel Coder
https://www.babelcoder.com
HPA
Babel Coder
Babel Coder
https://www.babelcoder.com
HORIZONTAL POD AUTOSCALER
Babel Coder
Babel Coder
https://www.babelcoder.com
Kubernetes มีทรัพยากรประเภทหนึ่งที่เรียกว่า HorizontalPodAutoscaler หรือ HPA มีหน้าที่อัพเดท
จำนวนของทรัพยากรประเทภ Workload
เช่น Deployment หรือ StatefulSet ให้มีจำนวนมากขึ้นหรือน้อยลงเพื่อให้ตรงตามค่าวัด (Metrics) ที่ได้
กำหนดไว้
HorizontalPodAutoscaler มีรูปแบบการสเกลแบบ Horizontal Scaling กล่าวคือการทำงานของมันจะ
เป็นการเพิ่มจำนวน Pods เข้าไปในระบบ
เพื่อให้ตรงกับค่าคาดหมาย กระบวนการนี้จะแตกต่างจากการทำงานแบบ Vertical Scaling ที่ Kubernetes
จะทำการเพิ่มทรัพยากรประเภทหน่วยความจำหรือ CPU เข้าไปในระบบเพื่อขยายขนาดนั่นเอง
การทำงานของ HorizontalPodAutoscaler นั้นเมื่อพบว่าจำนวน Pods เกินกว่าค่าคาดหมายที่ได้กำหนดไว้
แล้วจะทำการออกคำสั่งไปยัง Workload เหล่านั้น คือ Deployment หรือ StatefulSet เพื่อให้ทำการลด
จำนวน Pods ในระบบลง
HORIZONTAL POD AUTOSCALER
Babel Coder
Babel Coder
https://www.babelcoder.com
Pod
31%
CPU
Metrics: CPU > 50%
Pod
61%
CPU
Pod
1. ติดตั้ง METRICS SERVER
Babel Coder
Babel Coder
https://www.babelcoder.com
เพื่อให้ HPA สามารถทำงานได้ บนระบบคลัสเตอร์ต้องทำการติดตั้ง Kubernetes Metrics Server เพื่อ
รวบรวมข้อมูลของ Metrics ต่าง ๆ จาก kubelet ในคลัสเตอร์ เราจึงจำเป็นต้องทำการติดตั้ง Metrics
Server ผ่านการสร้างไฟล์ k8s/hpa-components.yaml รายละเอียดตามบทความในคอร์ส
จากนั้นให้ออกคำสั่ง kubectl apply -f k8s/hpa-components.yaml เพื่อใช้งาน
Babel Coder
Babel Coder
https://www.babelcoder.com
2. การเรียกใช้งาน HPA
เป็นตัวกำหนดว่าแต่ละ Pod จำเป็นต้องมีทรัพยากรใด
จำนวนเท่าไหร่เพื่อให้เพียงพอต่อการใช้งาน
k8s/deployment.yaml
Babel Coder
Babel Coder
https://www.babelcoder.com
2. การเรียกใช้งาน HPA
เมื่อเสร็จเรียบร้อยเราจะออกคำสั่งต่อไปนี้เพื่อสร้าง HPA ที่มีการทำงานคือการกำหนดจำนวน Pods ขั้นต่ำที่ 1
Pods และสูงสุดถึง 5 Pods
โดยการสเกลนั้นจะเพิ่มหรือลด Pods ขึ้นอยู่กับการพิจารณาสัดส่วนการใช้งาน CPU หากมีการใช้งาน CPU
เฉลี่ยมากกว่า 20% จะทำการสเกลขึ้นด้วยการเพิ่มจำนวน Pods และจะลดจำนวน Pods ลงเมื่อการใช้งาน
CPU เฉลี่ยต่ำกว่า 50% ในระดับหนึ่ง ในที่นี้เราจะสร้าง HPA เพื่อใช้งานกับ Deployment ที่มีชื่อว่า api เท่านั้น
$ kubectl autoscale deployment api --cpu-percent=20 --min=1 --max=5
horizontalpodautoscaler.autoscaling/api autoscaled
Babel Coder
Babel Coder
https://www.babelcoder.com
2. การเรียกใช้งาน HPA
$ kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
api Deployment/api 1%/20% 1 5 1 17m
ส่วนนี้จะพบกับคอลัมภ์ชื่อ TARGETS แสดงผลเป็น 1%/20% ที่มีความ
หมายว่ามีการตั้งค่า Metrics ไว้ที่ 20% แต่ปัจจุบันการใช้งาน CPU
เฉลี่ยนอยู่ที่ 1%
Pod
1%
CPU
Babel Coder
Babel Coder
https://www.babelcoder.com
3. ทดลองเพิ่มและลดโหลดของ API
$ kubectl run -i --tty load-generator --rm --image=busybox:1.28 --
restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O-
http://localhost:5152/articles; done"
Pod
1%
CPU
เราจะทำการเพิ่มโหลดเพื่อดูการทำงานของ HPA ว่าจะมีการเพิ่มจำนวน Pods เมื่อ CPU เฉลี่ยนเกิน 20% หรือ
ไม่ โดยออกคำสั่งสำหรับการเรียกใช้งาน API อย่างต่อเนื่อง ดังนี้
$ kubectl get hpa api --watch
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
api Deployment/api 1%/20% 1 5 1 3s
Babel Coder
Babel Coder
https://www.babelcoder.com
3. ทดลองเพิ่มและลดโหลดของ API
$ kubectl get deploy api -w
Pod
31%
CPU
เมื่อ CPU เฉลี่ยใช้งานถึง 31% เมื่อนั้น HPA จะทำการเพิ่มจำนวน Pod เป็น 2 ตัว
NAME READY UP-TO-DATE AVAILABLE AGE
api 2/2 2 2 6d5h
Pod
Babel Coder
Babel Coder
https://www.babelcoder.com
31%
3. ทดลองเพิ่มและลดโหลดของ API
$ kubectl get deploy api -w
Pod
CPU
หยุดการทำงานของคำสั่งในการร้องขอข้อมูลจาก API ลง เพื่อให้การใช้งาน CPU เฉลี่ยลดลง
ทำการสังเกตการใช้งาน CPU เมื่อเวลาผ่านไประยะหนึ่งจะพบผลลัพธ์ดังนี้
NAME READY UP-TO-DATE AVAILABLE AGE
api 1/1 1 1 6d5h
Pod
Babel Coder
Babel Coder
https://www.babelcoder.com
4. การตั้งค่าการทำงานของ HPA ผ่านไฟล์ YAML
เราจะเปลี่ยนรูปแบบการเรียกใช้ HPA จากเดิมที่เป็นการออกคำสั่งให้อยู่ในรูปแบบของไฟล์ YAML แทน
กำหนดจำนวน Pod ต่ำสุดและสูงสุด
กำหนดให้เกิดการสเกลเมื่อ CPU มีการใช้งานเฉลี่ยเกิน 20%
บทส่งท้าย
Babel Coder
Babel Coder
https://www.babelcoder.com
การปรับเปลี่ยนวัฒนธรรมองค์กรเพื่อเป็นองค์กร
แบบ DEVOPS
การปรับเปลี่ยนวัฒนธรรมองค์กรเพื่อเป็นองค์กรแบบ DevOps ไม่ใช่เพียงแค่การเปลี่ยนแปลง
เทคโนโลยีหรือกระบวนการทำงานเท่านั้น แต่ยังรวมถึงการเปลี่ยนแปลงทัศนคติ ความคิด และวัฒนธรรม
ภายในองค์กรด้วย ดังนั้น การปรับเปลี่ยนวัฒนธรรมเพื่อสนับสนุน DevOps จึงเป็นสิ่งที่สำคัญ
การส่งเสริมวัฒนธรรมการเรียนรู้
01
การทำงานร่วมกันและการแบ่งปันประสบการณ์
02
การยอมรับการเปลี่ยนแปลง
03
การวัดผลและปรับปรุงอย่างต่อเนื่อง
04
การส่งเสริมการสื่อสารและการทำงานร่วมกัน
05
Babel Coder
Babel Coder
https://www.babelcoder.com
กรณีศึกษาการใช้งาน DEVOPS
Netflix ถือเป็นตัวอย่างที่ดีของการใช้งาน DevOps โดยมีการนำเสนอความคิดที่เกี่ยวกับ DevOps และ
มุ่งเน้นที่คุณภาพผ่านกระบวนการที่เป็นอัตโนมัติ แอปพลิเคชันสตรีมวิดีโอของ Netflix ได้ส่งผลกระทบ
อย่างมากต่อโลกเทคโนโลยีด้วยการทำงานทางวิศวกรรมที่ยอดเยี่ยม วัฒนธรรม และการพัฒนา
ผลิตภัณฑ์ในหลายปีที่ผ่านมา
Netflix ได้พัฒนาวัฒนธรรม DevOps อย่างเป็นธรรมชาติด้วยความคิดที่ไม่เหมือนใครและนำไปสู่
ประโยชน์ทางธุรกิจอย่างมาก วัฒนธรรม DevOps ของ Netflix ได้ช่วยให้สามารถผลิตนวัตกรรมได้เร็ว
ขึ้น ทำให้สามารถส่งฟีเจอร์ใหม่ ๆ ให้กับผู้ใช้ได้เร็วขึ้น และเพิ่มจำนวนสมาชิกและชั่วโมงการสตรีมได้อย่าง
มาก
Netflix ได้เลือก AWS เป็นพาร์ทเนอร์คลาวด์และใช้เวลาเกือบเจ็ดปีในการย้ายข้อมูลทั้งหมดไปยังคลาวด์
แต่ Netflix ไม่ได้ย้ายระบบแล้วนำไปวางลงใน AWS แต่เลือกที่จะเขียนแอปพลิเคชันทั้งหมดใหม่ในคลา
วด์เพื่อให้เป็น cloud-native ซึ่งเปลี่ยนแปลงวิธีการดำเนินงานของบริษัทอย่างสิ้นเชิง
01
Babel Coder
Babel Coder
https://www.babelcoder.com

More Related Content

More from NuttavutThongjor1

mean stack mean stack mean stack mean stack
mean stack mean stack  mean stack  mean stackmean stack mean stack  mean stack  mean stack
mean stack mean stack mean stack mean stack
NuttavutThongjor1
 

More from NuttavutThongjor1 (20)

2 เทคโนโลยี cloud computing.pdf 2 เทคโนโลยี cloud computing.pdf
2 เทคโนโลยี cloud computing.pdf 2 เทคโนโลยี cloud computing.pdf2 เทคโนโลยี cloud computing.pdf 2 เทคโนโลยี cloud computing.pdf
2 เทคโนโลยี cloud computing.pdf 2 เทคโนโลยี cloud computing.pdf
 
1 devops คืออะไร.pdf 1 devops คืออะไร.pdf
1 devops คืออะไร.pdf 1 devops คืออะไร.pdf1 devops คืออะไร.pdf 1 devops คืออะไร.pdf
1 devops คืออะไร.pdf 1 devops คืออะไร.pdf
 
angular fundamentals.pdf angular fundamentals.pdf
angular fundamentals.pdf angular fundamentals.pdfangular fundamentals.pdf angular fundamentals.pdf
angular fundamentals.pdf angular fundamentals.pdf
 
mean stack mean stack mean stack mean stack
mean stack mean stack  mean stack  mean stackmean stack mean stack  mean stack  mean stack
mean stack mean stack mean stack mean stack
 
pinia.pdf
pinia.pdfpinia.pdf
pinia.pdf
 
nuxt-rendering-modes.pdf
nuxt-rendering-modes.pdfnuxt-rendering-modes.pdf
nuxt-rendering-modes.pdf
 
zustand.pdf
zustand.pdfzustand.pdf
zustand.pdf
 
tanstack-query.pdf
tanstack-query.pdftanstack-query.pdf
tanstack-query.pdf
 
nuxt-fundamentals.pdf
nuxt-fundamentals.pdfnuxt-fundamentals.pdf
nuxt-fundamentals.pdf
 
vue-components.pdf
vue-components.pdfvue-components.pdf
vue-components.pdf
 
vue-reactivity.pdf
vue-reactivity.pdfvue-reactivity.pdf
vue-reactivity.pdf
 
vue-template.pdf
vue-template.pdfvue-template.pdf
vue-template.pdf
 
recap-restful.pdf
recap-restful.pdfrecap-restful.pdf
recap-restful.pdf
 
nuxt-tech-stack.pdf
nuxt-tech-stack.pdfnuxt-tech-stack.pdf
nuxt-tech-stack.pdf
 
recap-js-and-ts.pdf
recap-js-and-ts.pdfrecap-js-and-ts.pdf
recap-js-and-ts.pdf
 
prisma.pdf
prisma.pdfprisma.pdf
prisma.pdf
 
fullstack-nextjs.pdf
fullstack-nextjs.pdffullstack-nextjs.pdf
fullstack-nextjs.pdf
 
angular fundamentals.pdf
angular fundamentals.pdfangular fundamentals.pdf
angular fundamentals.pdf
 
javascript for modern application.pdf
javascript for modern application.pdfjavascript for modern application.pdf
javascript for modern application.pdf
 
harmonyx.pdf
harmonyx.pdfharmonyx.pdf
harmonyx.pdf
 

Intro to Modern DevOps.pdfIntro to Modern DevOps.pdfIntro to Modern DevOps.pdf

  • 3. Babel Coder BABEL CODER Nuttavut T https://www.babelcoder.com Babel Coder https://www.babelcoder.com
  • 8. CI / CD Babel Coder Babel Coder https://www.babelcoder.com
  • 13. ARGO CD Babel Coder Babel Coder https://www.babelcoder.com
  • 16. Babel Coder 1 2 3 DevOps คืออะไร เทคโนโลยี Cloud Computing Microservices Babel Coder https://www.babelcoder.com
  • 18. Babel Coder 8 Git เบื้องต้น GitOps คืออะไร Babel Coder https://www.babelcoder.com 7
  • 19. Babel Coder 9 CI / CD Babel Coder https://www.babelcoder.com 10 Logging, Tracing และ Monitoring ด้วย Datadog
  • 23. DEVOPS คืออะไร DevOps เป็นคำที่มาจาก “development” และ “operations” ซึ่งเป็นการเปลี่ยนแปลงทางวัฒนธรรมในการพัฒนา ซอฟต์แวร์ที่เน้นการรวมการพัฒนาซอฟต์แวร์ (Dev) และ IT operations (Ops) เป็นการผสมผสานของปฏิบัติการ, เครื่องมือ, และปรัชญาทางวัฒนธรรมที่เน้นขั้นตอนการทำงานแบบอัตโนมัติ และบูรณาการการทำงานระหว่างทีมพัฒนา ซอฟต์แวร์และทีม IT operations วิธีการนี้มุ่งเน้นที่จะนำผลิตภัณฑ์ที่ดีกว่าให้กับลูกค้าได้เร็วขึ้นโดยสร้างสภาพแวดล้อมที่ส่งเสริมการทำงานร่วมกันที่บทบาทที่ เคยถูกแยกออกเป็นฝ่ายต่างๆ เช่น Developer, IT, operations และ วิศวกรรมคุณภาพและความปลอดภัย สามารถ ประสานงานและทำงานร่วมกันเพื่อผลิตผลิตภัณฑ์ที่ดีกว่าและมีความน่าเชื่อถือมากขึ้น การทำงานร่วมกันและความมีประสิทธิภาพที่เพิ่มขึ้นนี้ยังเป็นส่วนสำคัญในการบรรลุเป้าหมายทางธุรกิจเช่นการเร่งการนำ ผลิตภัณฑ์เข้าตลาด การปรับตัวตามตลาดและการแข่งขัน การรักษาความเสถียรและความน่าเชื่อถือของระบบ และการ ปรับปรุงเวลาเฉลี่ยในการกู้คืนระบบ Babel Coder Babel Coder https://www.babelcoder.com
  • 24. 1. ลักษณะสำคัญ การรวมตัว (Unification) 01 การทำงานร่วมกัน (Collaboration) 02 การทำงานอัตโนมัติ (Automation) 03 Babel Coder อิทธิพลต่อวงจรชีวิตของแอปพลิเคชัน (Lifecycle Influence) 04 Babel Coder https://www.babelcoder.com
  • 25. 1.1 การรวมตัวกัน DepOps คือการรวมคน, กระบวนการ, และเทคโนโลยีเพื่อให้คุณค่าต่อลูกค้า อย่างต่อเนื่อง Babel Coder Babel Coder https://www.babelcoder.com
  • 26. 1.2 การทำงานร่วมกัน DevOps ทำให้บทบาทที่เคยแยกกัน ได้แก่ การพัฒนา การดำเนินการ IT วิศวกรรมคุณภาพ และ ความปลอดภัย สามารถประสานงานและทำงานร่วมกันเพื่อผลิตผลิตภัณฑ์ที่ดีและเชื่อถือได้มากขึ้น Dev Team Op Team DevOps Team Babel Coder Babel Coder https://www.babelcoder.com
  • 27. 1.3 การทำงานอัตโนมัติ ทีม DevOps ใช้เครื่องมือเพื่อทำงานแบบ อัตโนมัติและเร่งกระบวนการทำงานต่าง ๆ ซึ่งช่วยเพิ่มความน่าเชื่อถือมากขึ้น Babel Coder Babel Coder https://www.babelcoder.com
  • 28. 1.4 อิทธิพลต่อ SDLC DevOps มีอิทธิพลต่อวงจรชีวิตของแอปพลิเคชัน (SDLC) ตลอดจากการวางแผน พัฒนา ส่งมอบ และดำเนินการ โดยการนำวัฒนธรรม DevOps พร้อมด้วยการปฏิบัติและเครื่องมือ DevOps มาใช้ ทีมสามารถตอบสนองต่อความ ต้องการของลูกค้าได้ดีขึ้น เพิ่มความมั่นใจในแอปพลิเคชันที่พวกเขาสร้าง และบรรลุเป้าหมายทางธุรกิจได้เร็วขึ้น Babel Coder Babel Coder https://www.babelcoder.com
  • 29. Babel Coder 2. DEVOPS และ DEVOPS INFINITY LOOP ทีม DevOps ประกอบด้วยนักพัฒนาและ IT operations ที่ทำงานร่วมกันตลอดวงจรชีวิตของผลิตภัณฑ์เพื่อ เพิ่มความเร็วและคุณภาพของการปรับใช้ซอฟต์แวร์ ภายใต้โมเดล DevOps ทีมพัฒนาและ operations ไม่ได้ แยกออกเป็น “ซิโล” (Silos) อีกต่อไป บางครั้งทีมเหล่านี้จะรวมกันเป็นทีมเดียวที่วิศวกรทำงานตลอดทั้งวงจร การใช้งาน จากการพัฒนาและทดสอบไปจนถึงการปรับใช้และการดำเนินการ และมีทักษะหลากหลายที่เป็นความ สามารถทางวิชาการ DevOps Infinity Loop เป็นวงกลมการติดต่อสื่อสารที่ต่อเนื่อง ประกอบด้วยหลายขั้นตอน: การวางแผน การ พัฒนา การทดสอบ การปรับใช้ และการตรวจสอบ วิธีการนี้เน้นการทำงานร่วมกัน การสื่อสาร และการทำงานอัตโนมัติระหว่างทีมพัฒนาซอฟต์แวร์และทีมดำเนิน การ IT Z Babel Coder https://www.babelcoder.com
  • 30. ขั้นตอนการทำงานของ DEVOPS INFINITY LOOP การวางแผน 01 การพัฒนา 02 การทดสอบ 03 การปรับใช้ 04 การตรวจสอบ 05 Babel Coder Babel Coder https://www.babelcoder.com
  • 31. Monitoring and Logging IaC Babel Coder 3. คำศัพท์ DEVOPS ที่ควรทราบ Code push Github Test Build Register Image Deploy CI CI CI CD CD CD CaC Babel Coder https://www.babelcoder.com
  • 32. Babel Coder 4. ประโยชน์ของ DEVOPS ทีมที่ยอมรับวัฒนธรรมการปฏิบัติและเครื่องมือ DevOps จะมีประสิทธิภาพสูงสร้างผลิตภัณฑ์ที่ดีกว่าได้เร็วขึ้น สำหรับความพึงพอใจของลูกค้า การปรับปรุงการทำงานร่วมกันและความมีประสิทธิภาพนี้ยังเป็นส่วนสำคัญใน การบรรลุเป้าหมายทางธุรกิจเช่นการเร่งการนำเข้าตลาดการปรับตัวตามตลาดและการแข่งขันการรักษาความ เสถียรและความน่าเชื่อถือของระบบและการปรับปรุงเวลาเฉลี่ยในการกู้คืน Z Babel Coder https://www.babelcoder.com
  • 33. Babel Coder 5. DEVSECOPS DevSecOps หรือ Development, Security, and Operations คือกรอบการทำงานที่รวมการรักษาความ ปลอดภัยเข้าไปในทุกขั้นตอนของวัฒนธรรมการส่งมอบซอฟต์แวร์ องค์กรจะนำเอากรอบการทำงานนี้มาใช้เพื่อ ลดความเสี่ยงในการปล่อยโค้ดที่มีช่องโหว่ด้านความปลอดภัย DevSecOps มีความสำคัญอย่างยิ่งเนื่องจากมันช่วยลดความเสี่ยงในการปล่อยซอฟต์แวร์ที่มีการตั้งค่าผิด พลาดและช่องโหว่อื่น ๆ ที่ผู้ไม่หวังดีสามารถนำไปใช้ประโยชน์ DevSecOps มุ่งเน้นที่การส่งมอบซอฟต์แวร์ที่ปลอดภัยโดยไม่ทำให้กระบวนการพัฒนาซอฟต์แวร์ช้าลง ทีม ทั้งหมดจะรับผิดชอบในการรักษาความปลอดภัย ไม่ใช่แค่ทีมความปลอดภัยเท่านั้น นอกจากนี้ DevSecOps ยัง ช่วยให้การส่งมอบซอฟต์แวร์เป็นไปอย่างรวดเร็วและมีความปลอดภัยมากขึ้น Z Babel Coder https://www.babelcoder.com
  • 34. 6. IT ในรูปแบบเดิม VS DEVOPS การวางแผนและการจัดการ 01 ขนาดของวงรอบการทำงาน 02 โครงสร้างองค์กร 03 Babel Coder การจัดการเวลา 04 การเปลี่ยนแปลงทางวัฒนธรรม 05 Babel Coder https://www.babelcoder.com
  • 35. 6.1 การวางแผนและการจัดการ แบบดั้งเดิมจัดการทุกขั้นตอนในวัฒนธรรมการส่งมอบซอฟต์แวร์ (SDLC) ด้วยความสำคัญเท่า ๆ กัน หรือบางครั้งมุ่งเน้นไปที่ข้อผิดพลาดที่เกิดขึ้น ในทางกลับกัน DevOps มุ่งเน้นที่กระบวนการที่เพิ่ม คุณค่าโดยพยายามหาขั้นตอนเพื่อลดความเสี่ยง ทีมแบบ DevOps จะมีการปรับใช้หลักการของ Agile เพื่อให้ทีมมีการพูดคุยที่มากขึ้น แก้ไขความต้องการของลูกค้าได้ง่ายขึ้น และส่งมอบผลิตภัณฑ์ได้เร็วขึ้น Babel Coder Babel Coder https://www.babelcoder.com
  • 36. 6.2 ขนาดของวงรอบการทำงาน แบบดั้งเดิมมุ่งเน้นไปที่การออกแบบวงรอบของการพัฒนาที่กว้าง มีระยะ เวลาดำเนินงานของโปรเจคที่ยาวตามรูปแบบของ Waterfall ในขณะที่ วัฒนธรรมแบบ DevOps มุ่งเน้นไปที่วงรอบที่มีขนาดเล็ก ระยะเวลาแต่ละ ช่วงของโปรเจคสั้น เพื่อลดความซับซ้อนของโครงการ อันนำมาสู่การลดลง ของความเสี่ยงที่อาจเกิดขึ้น รวมถึงทำให้การทำงานร่วมกันของทีมเป็นไปได้ อย่างง่ายดาย https://medium.com/@chathmini96/waterfall-vs-agile- methodology-28001a9ca487 Babel Coder Babel Coder https://www.babelcoder.com
  • 37. 6.3 โครงสร้างองค์กร แบบดั้งเดิมจัดแบ่งทีมตามความสามารถทำให้เกิดความไร้ประสิทธิภาพ ในขณะที่ DevOps เน้นการ ทำงานร่วมกัน การสื่อสารกันระหว่าง Development และ Operations ในรูปแบบของทีมเดียวกัน Babel Coder Babel Coder https://www.babelcoder.com
  • 38. 6.4 การจัดการเวลา ทีม DevOps ใช้เวลามากขึ้นในการปรับปรุงโครงสร้างพื้นฐานเพื่อป้องกันความล้มเหลวและใช้เวลาน้อย ลงในการจัดการกรณีสนับสนุนอื่น ๆ (Support Cases) เนื่องจากการผลักดันให้มีระบบการทำงานแบบ อัตโนมัติมากขึ้น Babel Coder Babel Coder https://www.babelcoder.com
  • 39. 6.5 การเปลี่ยนแปลงทางวัฒนธรรม ความแตกต่างหลักระหว่าง DevOps และ IT แบบดั้งเดิมคือการเปลี่ยนแปลงทางวัฒนธรรม ใน IT แบบ ดั้งเดิมทุกทีมมีวัตถุประสงค์ที่แตกต่างกัน แต่ DevOps ทำให้วัตถุประสงค์การดำเนินงานของพวกเขา สอดคล้องกัน Babel Coder Babel Coder https://www.babelcoder.com
  • 41. CLOUD COMPUTING Cloud Computing หรือการประมวลผลแบบกลุ่มเมฆคือการเข้าถึงและใช้งานทรัพยากรคอมพิวเตอร์ อาทิเช่น เซิร์ฟเวอร์ พื้นที่เก็บข้อมูล ซอฟต์แวร์ เครื่องมือที่มีขุมพลัง AI และอื่น ๆ ผ่านทางอินเทอร์เน็ต โดยมีรูปแบบการเสียค่าใช้จ่ายตามการใช้ งาน Cloud Computing ช่วยให้คุณสามารถหลีกเลี่ยงค่าใช้จ่ายและความพยายามในการซื้อ ติดตั้ง กำหนดค่าและจัดการ คอมพิวเตอร์แม่ข่ายและโครงสร้างพื้นฐานอื่น ๆ ที่อยู่บนพื้นที่ในองค์กรของคุณเอง นอกจากนี้ Cloud Computing ยังช่วย ให้การส่งมอบซอฟต์แวร์เป็นไปอย่างรวดเร็วและมีความปลอดภัยมากขึ้น มีรูปแบบการให้บริการของ Cloud Computing ที่หลากหลาย ซึ่งรวมถึง Infrastructure as a Service (IaaS) Platform as a Service (PaaS) และ Software as a Service (SaaS) แต่ละรูปแบบนี้มีความแตกต่างกันในระดับของความยืดหยุ่น และการควบคุมที่ผู้ใช้จะได้รับ Babel Coder Babel Coder https://www.babelcoder.com
  • 42. 1. ประเภทของ CLOUD COMPUTING Cloud Computing ประกอบด้วยรูปแบบ 3 ประการ ดังนี้ Infrastructure as a Service (IaaS) เป็นรูปแบบของ Cloud Computing ที่ให้ บริการทรัพยากรคอมพิวเตอร์ที่จำเป็น เช่น เซิร์ฟเวอร์ พื้นที่เก็บข้อมูล และทรัพยากรเครือ ข่าย ตามความต้องการและใช้จ่ายตามการใช้งาน ผู้ให้บริการจะดูแลการจัดการทรัพยากร เหล่านี้ให้ ในขณะที่คุณจะต้องจัดการซอฟต์แวร์ของคุณเอง รวมถึงระบบปฏิบัติการ ซอฟต์แวร์กลาง และแอปพลิเคชัน Platform as a Service (PaaS) ให้บริการทั้งสภาพแวดล้อมการพัฒนาและการปรับใช้ งานในคลาวด์ พร้อมทรัพยากรที่ช่วยให้คุณสามารถสร้างแอปพลิเคชันที่ง่ายหรือซับซ้อนได้ PaaS นั้นไม่เพียงแต่รวมทรัพยากรพื้นฐานเช่นเดียวกับ IaaS แต่ยังรวมถึงซอฟต์แวร์ กลาง เครื่องมือพัฒนา บริการทางธุรกิจ ระบบจัดการฐานข้อมูล และอื่น ๆ Software as a Service (SaaS) ให้บริการซอฟต์แวร์ที่สามารถเข้าถึงและใช้งานผ่าน คลาวด์ ตัวอย่างที่นิยมคือ อีเมล ปฏิทิน และเครื่องมือสำนักงาน (เช่น Microsoft Office 365) คุณสามารถเช่าการใช้แอปสำหรับองค์กรของคุณ และผู้ใช้ของคุณสามารถเชื่อมต่อ กับแอปผ่านอินเทอร์เน็ต โดยส่วนใหญ่ผ่านเว็บเบราว์เซอร์ Babel Coder Babel Coder https://www.babelcoder.com
  • 43. 2. ประโยชน์ที่ได้รับจากการใช้งาน ลดค่าใช้จ่ายด้าน IT 01 ส่งเสริมความยั่งยืน 02 เพิ่มประสิทธิภาพการทำงาน 03 Babel Coder เพิ่มความปลอดภัย 04 มีความยืดหยุ่นในการขยายตัว 05 เข้าถึงเทคโนโลยีใหม่ ๆ อยู่เสมอ 06 ความน่าเชื่อถือ 07 Babel Coder https://www.babelcoder.com
  • 45. 4. ตัวอย่างบริการของ AWS Amazon Elastic Compute Cloud (EC2) 01 Amazon Simple Storage Service (S3) 02 Amazon Lambda 03 Babel Coder Amazon Elastic Kubernetes Service (EKS) 04 05 Babel Coder https://www.babelcoder.com
  • 46. 5. CLOUD NATIVE คืออะไร Cloud Native คือแนวทางที่ซอฟต์แวร์ใช้ในการสร้าง ปรับใช้ และจัดการแอปพลิเคชันที่ทันสมัยในสภาพแวดล้อมการ ประมวลผลบนคลาวด์ หากแอปพลิเคชันนั้นถูกออกแบบมาเพื่อใช้งานบนคลาวด์จะเรียกว่า Cloud Native Applications คุณสมบัติหลักของ Cloud Native ได้แก่: ความยืดหยุ่น 01 การประมวลผลบนคลาวด์ 02 ไมโครเซอร์วิส 03 การใช้งาน Container 04 DevOps และ Automation 05 การประหยัดค่าใช้จ่าย การอัปเดตฟีเจอร์ 07 06 Babel Coder Babel Coder https://www.babelcoder.com
  • 47. 6. CLOUD COMPUTING กับ DEVOPS Cloud Computing และ DevOps มีความสัมพันธ์กันอย่างใกล้ชิด ทั้งสองเป็นส่วนสำคัญใน กระบวนการพัฒนาและการจัดการแอปพลิเคชันในยุคดิจิตอล Cloud Computing ช่วยให้ทีม DevOps สามารถสร้างและขยายแอปพลิเคชันได้อย่าง รวดเร็วและมีประสิทธิภาพ โดยไม่ต้องลงทุนในการจัดซื้อและบำรุงรักษาโครงสร้างพื้นฐาน ทางกายภาพ DevOps ให้ช่วยให้ทีมงานสามารถสร้างและปรับปรุงผลิตภัณฑ์ได้เร็วขึ้น โดยใช้เครื่องมือ และเทคโนโลยีที่ช่วยให้พวกเขาดำเนินการและพัฒนาแอปพลิเคชันได้อย่างรวดเร็วและเชื่อ ถือได้ ทั้งสองเทคโนโลยีนี้ร่วมกันช่วยให้องค์กรสามารถสร้างและส่งมอบแอปพลิเคชันได้อย่าง รวดเร็ว ทำให้สามารถตอบสนองต่อความต้องการของลูกค้าและการเปลี่ยนแปลงของ ตลาดได้ดียิ่งขึ้น Babel Coder Babel Coder https://www.babelcoder.com
  • 49. 1. MICROSERVICES คืออะไร การออกแบบแอปพลิเคชันแบบ Monolithic นั้นจะรวมศูนย์ทุกฟีเจอร์เข้าเป็นโปรแกรมเดียว โดยทั้งแอปพลิเคชันจะมีการใช้งานฐานข้อมูลร่วมกันเพื่อจัดเก็บข้อมูลสำหรับฟีเจอร์ต่าง ๆ Order Stock Payment Monolithic Babel Coder Babel Coder https://www.babelcoder.com
  • 50. 1. MICROSERVICES คืออะไร สถาปัตยกรรมแบบ Monolithic นี้ประกอบด้วยข้อดีต่าง ๆ ได้แก่ ง่ายต่อการพัฒนา ง่ายต่อการแก้ไขหรือเปลี่ยนแปลง สามารถทำการทดสอบฟังก์ชันต่าง ๆ ได้อย่างตรงไปตรงมา ง่ายต่อการ Deploy แอปพลิเคชันสู่ Production ไม่ยุ่งยากในการ Scale ระบบ Babel Coder Babel Coder https://www.babelcoder.com
  • 51. 1. MICROSERVICES คืออะไร อย่างไรก็ตาม Monolithic นั้นก็มีข้อเสียด้วยเช่นกัน คือ การผูกติดกับภาษาโปรแกรม ความยุ่งยากในการพัฒนาระดับทีม ความช้าในการ Deploy การ Scale ระบบที่ไร้ประสิทธิภาพ Babel Coder Babel Coder https://www.babelcoder.com
  • 53. 1. MICROSERVICES คืออะไร เพื่อแก้ปัญหาของ Monolithic ดังกล่าว จึงเป็นที่มาของสถาปัตยกรรมแบบ Microservices สถาปัตยกรรมแบบ Microservices เป็นสถาปัตยกรรมที่ออกแบบตามหลักการของ Cloud Native โดยระบบหนึ่ง ๆ จะประกอบไปด้วยหลายหน่วยย่อยหรือเซอร์วิส ที่มีการเชื่อมต่อกัน อย่างหลวม ๆ กับเซอร์วิสอื่น แต่ละเซอร์วิสจะมีขนาดเล็กและแยก Deploy ได้อย่างอิสระ Babel Coder Babel Coder https://www.babelcoder.com
  • 54. Order 1. MICROSERVICES คืออะไร microservices Stock Payment Babel Coder Babel Coder https://www.babelcoder.com
  • 55. 2. ลักษณะพื้นฐานของ MICROSERVICES สถาปัตยกรรมแบบ Microservices ประกอบด้วยลักษณะต่าง ๆ ดังต่อไปนี้ Autonomy แต่ละเซอร์วิสในสถาปัตยกรรมแบบ Microservices สามารถแยกพัฒนาได้ เช่น มีทีมสำหรับการพัฒนาเซอร์วิสของ User, Article, Order และ Payment แยกแตก ต่างกันออกไป พร้อมทั้งสามารถแยก Deploy หรือ scale แยกแต่ละเซอร์วิสได้โดยไม่ กระทบกับเซอร์วิสอื่น Specialization แต่ละเซอร์วิสได้รับการออกแบบโดยอาศัยการแบ่งแยกตาม Business Capability เพื่อให้สามารถแก้ปัญหาทางธุรกิจนั้น ๆ ได้อย่างเฉพาะเจาะจง Agility ความคล่องตัวนั้นเกิดจากการที่ Microservices ส่งเสริมให้องค์กรมีการ ออกแบบทีมขนาดเล็กเพื่อเป็นเจ้าของแต่ละเซอร์วิส Flexible Scaling Microservices ทำให้เกิดการ scale แต่ละเซอร์วิสได้อย่างอิสระโดย ไม่กระทบกับเซอร์วิสอื่น ๆ Babel Coder Babel Coder https://www.babelcoder.com
  • 56. Order 2. ลักษณะพื้นฐานของ MICROSERVICES Stock Payment Order Order Babel Coder Babel Coder https://www.babelcoder.com
  • 57. SCALE CUBE --- Wikimedia Babel Coder Babel Coder https://www.babelcoder.com
  • 58. 3. API GATEWAY คืออะไร Order Stock Payment POST <ORDER_IP>/orders Babel Coder Babel Coder https://www.babelcoder.com
  • 59. Order Stock Payment 3. API GATEWAY คืออะไร POST <GATEWAY_IP>/orders POST /orders A P I G a t e w a y Babel Coder Babel Coder https://www.babelcoder.com
  • 60. 4. การสื่อสารระหว่างเซอร์วิส Order Stock Payment Babel Coder Babel Coder https://www.babelcoder.com
  • 61. Order Stock Payment 1 4.1 SYNCHRONOUS MESSAGES Request an order check stock Calculate total price 2 3 Babel Coder Babel Coder https://www.babelcoder.com
  • 62. Order Stock Payment 4.1 SYNCHRONOUS MESSAGES check stock Calculate total price 2 3 POST <STOCK_IP>/products/<ID> POST <PAYMENT_IP>/checkout Babel Coder Babel Coder https://www.babelcoder.com
  • 63. Order Stock Payment 1 4.2 ASYNCHRONOUS MESSAGES ORDER_REQUESTED Event Message Channel Message Broker Babel Coder Babel Coder https://www.babelcoder.com
  • 64. 4.3 เมื่อไหร่ควรใช้การสื่อสารแบบใด ทั้งการสื่อสารแบบ Synchronous และ Asynchronous ต่างมีข้อดีข้อเสียแตกต่างกัน การเลือกใช้การสื่อสารประเภทต่าง ๆ ตามความ เหมาะสมจึงเป็นเรื่องสำคัญ เราควรเลือกใช้การสื่อสารแบบ Synchronous ในกรณีต่อไปนี้ หากไม่สามารถดำเนินการอย่างอื่นได้ถ้าไม่ได้รับผลลัพธ์จากเซอร์วิสอื่น เช่น กรณีสอบถามข้อมูลสินค้าจาก Product ที่เซอร์วิส Product มีการร้องขอข้อมูลผู้ขายต่อไปยัง User กรณีนี้ต้องใช้ Synchronous เพื่อให้ข้อความตอบกลับไปยังส่วนของ UI นั้นสมบูรณ์ เมื่อต้องการข้อมูลแบบ Real-time เมื่อแต่ละเซอร์วิสมีระยะเวลาการประมวลผลที่สั้น เราควรเลือกใช้การสื่อสารแบบ Asynchronous ในกรณีต่อไปนี้ เมื่อฟีเจอร์นั้นยอมรับการทำงานที่เสร็จสิ้นในภายหลังได้ เช่น การออกรายงานที่สามารถส่งผลลัพธ์ภายหลังผ่านอีเมล์ได้ เมื่อการทำงานของเซอร์วิสระหว่างกลางมีความล่าช้าหรือใช้ระยะเวลานานในการประมวลผล เมื่อยอมรับให้บางเซอร์วิสเกิดข้อผิดพลาดในการทำงานได้และต้องการความสามารถในการทำซ้ำ (Retry) Babel Coder Babel Coder https://www.babelcoder.com
  • 65. 5. SAGA PATTERN Saga Pattern คือรูปแบบของการออกแบบระบบในสถาปัตยกรรม Microservices เพื่อจัดการให้เกิด Data Consistency จากการสื่อสารกันของเซอร์วิสต่าง ๆ ในระบบ รูปแบบของ Saga นั้นจะมองว่าธุรกรรม (Transaction) ใด ๆ จะเกิดจากการดำเนินการผ่านธุรกรรมย่อย ๆ ในแต่ละเซอร์วิส (Local Transactions) แต่ละธุรกรรมย่อย ๆ ของเซอร์วิสนั้นจะมีการอัพเดทลงฐานข้อมูลของเซอร์วิสตนเอง จากนั้นเซอร์วิสจึงส่งต่อ การทำงานด้วยการส่งเหตุการณ์ (Event) เพื่อให้เกิดการทำงานของเซอร์วิสถัดไป หากธุรกรรมย่อยนั้นล้มเหลว ในการดำเนินงาน Saga จะทำการเรียก Compensating Transaction อันเป็นธุรกรรมย้อนกลับเพื่อให้ระบบ สามารถย้อนการเปลี่ยนแปลงกลับไปได้ รูปแบบการทำงานของ Saga แบ่งออกเป็นสองประเภท คือ Choreography-based Saga และ Orchestration-based Saga Babel Coder Babel Coder https://www.babelcoder.com
  • 66. 5.1 CHOREOGRAPHY-BASED SAGA Order Stock Payment ORDER_REQUESTED 1. 2. ORDER_CREATED 3. STOCK_RESERVED 4 . O R D E R _ P L A C E D Babel Coder Babel Coder https://www.babelcoder.com
  • 68. 5.2 ORCHESTRATION-BASED SAGA Orchestrator Order Stock Payment T1: Order requested Saga Log ORDER_REQUESTED 1. T3: Check status requested 3. CHECK_STOCK_REQUESTED 2. ORDER_CREATED 4. STOCK_RESERVED 6. PAYMENT_APPROVED T5: Payment requested 5. PAYMENT_REQUESTED T6: Payment approved 7. O RD ER_ RESERV ED T2: Order created T4: Stock reserved T7: Order reserved Babel Coder Babel Coder https://www.babelcoder.com
  • 69. 6. COMPENSATING TRANSACTIONS Orchestrator Order Stock Payment T1: Order requested Saga Log ORDER_REQUESTED 1. T3: Check status requested 3. CHECK_STOCK_REQUESTED 2. ORDER_CREATED 4. STOCK_REJECTED C3: - C2: - T2: Order created T4: Stock rejected C1: Order cancelled 5 . O R D E R _ C A N C E L L E D Babel Coder Babel Coder https://www.babelcoder.com C4: -
  • 71. App A glibc 2.39 App B glibc 1.2 1. ปัญหาของเทคโนโลยี VIRTUALIZATION Babel Coder Babel Coder https://www.babelcoder.com
  • 72. 1. ปัญหาของเทคโนโลยี VIRTUALIZATION Host OS Guest OS Guest OS App A glibc 2.39 App B glibc 1.2 VM 1 VM 2 Babel Coder Babel Coder https://www.babelcoder.com
  • 73. 1. ปัญหาของเทคโนโลยี VIRTUALIZATION Host OS App A glibc 2.39 App B glibc 1.2 C 1 C 2 Docker Engine Babel Coder Babel Coder https://www.babelcoder.com
  • 74. 1. ปัญหาของเทคโนโลยี VIRTUALIZATION Host OS Docker Engine Service A C 1 C 2 Service B C 2 Service B C 2 Service B Babel Coder Babel Coder https://www.babelcoder.com
  • 75. 2. ประวัติย่อของเทคโนโลยีคอนเทนเนอร์ Docker เป็นชุดของผลิตภัณฑ์ platform as a service (PaaS) ที่ได้สร้างการเปลี่ยนแปลงในโลกของการ พัฒนาซอฟต์แวร์ด้วยวิธีการนำเสนอซอฟต์แวร์ในแพคเกจที่เรียกว่าคอนเทนเนอร์ Docker ก่อตั้งขึ้นเป็น DotCloud ในปี 2008 โดย Solomon Hykes ที่ปารีส เริ่มต้นจากการเป็น platform as a service (PaaS) ก่อนที่จะเปลี่ยนเป็นเทคโนโลยีคอนเทนเนอร์ในปี 2013 รุ่นเริ่มต้นของ Docker ออกมาในวันที่ 20 มีนาคม 2013 ซอฟต์แวร์ที่เป็นตัวจัดการและหัวใจสำคัญของการ ควบคุมคอนเทนเนอร์เรียกว่า `Docker Engine` Docker เป็นเครื่องมือที่ใช้ในการทำงานอัตโนมัติของการ ปรับใช้แอปพลิเคชันในคอนเทนเนอร์ที่ Lightweight เพื่อให้แอปพลิเคชันสามารถทำงานได้อย่างมีประสิทธิภาพ ในสภาพแวดล้อมที่แตกต่างกัน เมื่อ Docker ปรากฏขึ้นในปี 2013 คอนเทนเนอร์ได้รับความนิยมอย่างรวดเร็ว การเติบโตของ Docker และ การใช้คอนเทนเนอร์ไปด้วยกัน Docker ใช้ LXC ในช่วงเริ่มต้นและในภายหลังได้แทนที่ตัวจัดการคอนเทนเนอร์ นั้นด้วยไลบรารีของตนเองคือ libcontainer Babel Coder Babel Coder https://www.babelcoder.com
  • 76. 3. การทำงานของ DOCKER $ App 80 docker run -p 5152:80 babelcoder/intro-to-devops-ui:1.0 Image Tag Port Mapping Unable to find image 'babelcoder/intro-to-devops-ui:1.0' locally 1.0: Pulling from babelcoder/intro-to-devops-ui 619be1103602: Already exists 018b9065ed0d: Already exists c3ea3344e711: Already exists c7059f310278: Already exists a101c9a82b88: Already exists d6a456492aaa: Already exists e1c681003a03: Already exists a85ccd8c07bd: Already exists e31596f4f45d: Already exists Digest: sha256:fca7c993dd5c3fbe2ab3e320f4a77c049f1d475b6efbf5f249b9f668b8c68373 Status: Downloaded newer image for babelcoder/intro-to-devops-ui:1.0 HOST 5152 -p 5152:80 Babel Coder Babel Coder https://www.babelcoder.com
  • 77. docker run ค้นหา Image บน เครื่อง มีติดตั้งแล้วหรือ ไม่ 3. การทำงานของ DOCKER ค้นหา Image จาก Docker Hub พบบน Docker Hub หรือไม่ ดาวน์โหลด Image ติดตั้ง Layers ต่าง ๆ บนเครื่อง Docker ทำการสร้าง container จาก Image พร้อมเริ่ม ทำงาน container ทำงาน No Yes Babel Coder Babel Coder https://www.babelcoder.com
  • 78. 3. การทำงานของ DOCKER C1 C2 C3 Dockerfile Docker Images docker build docker run Babel Coder Babel Coder https://www.babelcoder.com
  • 79. 3. การทำงานของ DOCKER $ $ $ $ $ Unable to find image 'babelcoder/intro-to-devops-ui:1.0' locally 1.0: Pulling from babelcoder/intro-to-devops-ui docker run -p 5152:80 babelcoder/intro-to-devops-ui:1.0 docker ps docker stop amazing_lamarr docker start amazing_lamarr docker stop amazing_lamarr && docker rm amazing_lamarr CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 625f8285698b babelcoder/intro-to-devops-ui:1.0 "/docker-entrypoint.…" 5 seconds ago Up 5 seconds 0.0.0.0:5152->80/tcp amazing_lamarr Babel Coder Babel Coder https://www.babelcoder.com
  • 80. API SITE 6379 6379 5152 3000 80 5151 4. การใช้งาน DOCKER COMPOSE redis babelcoder/intro-to-devops-api babelcoder/intro-to-devops-ui Babel Coder Babel Coder https://www.babelcoder.com
  • 81. 4. การใช้งาน DOCKER COMPOSE API SITE 6379 6379 5152 3000 80 5151 redis babelcoder/intro-to-devops-api babelcoder/intro-to-devops-ui docker-compose.yml $ docker compose up Babel Coder https://www.babelcoder.com
  • 82. 5. การสร้าง DOCKER IMAGES Dockerfile Docker Images Docker Hub push pull build 1 2 3 Layer Layer Layer Layer Babel Coder Babel Coder https://www.babelcoder.com
  • 83. 5. การสร้าง DOCKER IMAGES ./api $ $ CGO_ENABLED=0 go build -o api Babel Coder https://www.babelcoder.com $ # install Go compiler $ go mod download
  • 84. 5. การสร้าง DOCKER IMAGES ./api $ $ CGO_ENABLED=0 go build -o api Babel Coder Babel Coder https://www.babelcoder.com มี Go Compiler ใน Image นี้ Dockerfile $ # install Go compiler $ go mod download
  • 85. 5. การสร้าง DOCKER IMAGES Babel Coder Babel Coder https://www.babelcoder.com $ /app/api $ nginx -g daemon off
  • 86. 5. การสร้าง DOCKER IMAGES Cache Docker Images Babel Coder Babel Coder https://www.babelcoder.com
  • 87. 5. การสร้าง DOCKER IMAGES Babel Coder Babel Coder https://www.babelcoder.com ในการดาวน์โหลดแพคเกจนั้นต้องอาศัยไฟล์ go.mod และ go.sum ที่มีรายการแพคเกจที่ต้องใช้งานแสดงอยู่ภายในไฟล์
  • 88. 5. การสร้าง DOCKER IMAGES Babel Coder Babel Coder https://www.babelcoder.com
  • 89. 5. การสร้าง DOCKER IMAGES Babel Coder Babel Coder https://www.babelcoder.com
  • 90. 5. การสร้าง DOCKER IMAGES $ docker build -t babelcoder/intro-to-devops-api:1.0 . Build Context REPOSITORY TAG IMAGE ID CREATED SIZE babelcoder/intro-to-devops-api 1.0 0549c371879d 3 hours ago 17.2MB $ docker image ls Babel Coder Babel Coder https://www.babelcoder.com
  • 91. 5. การสร้าง DOCKER IMAGES docker build -t babelcoder/intro-to-devops-api:1.0 . $ .dockerignore Babel Coder Babel Coder https://www.babelcoder.com
  • 92. 6. การเผยแพร่ DOCKER IMAGES docker login $ Username: xxxxxx Password: xxxxxx Login Succeeded docker push babelcoder/intro-to-devops-api:1.0 $ The push refers to repository [docker.io/babelcoder/intro-to-devops-api] 2174cfeeabd2: Pushed b8d6ec71502e: Pushed d4fc045c9e3a: Layer already exists 1.0: digest: sha256:214d679fde8958b9ea028430aea9bea5b6c46790724422db8c3291c8e 308cb5e size: 945 Docker Hub push Babel Coder Babel Coder https://www.babelcoder.com
  • 93. 6. การเผยแพร่ DOCKER IMAGES $ Babel Coder Babel Coder https://www.babelcoder.com
  • 95. Babel Coder Babel Coder https://www.babelcoder.com API Site 1. API GATEWAY คืออะไร GET <GATEWAY_IP>/api A P I G a t e w a y GET <GATEWAY_IP>
  • 96. 1. API GATEWAY API Gateway เป็นอินเตอร์เฟซที่จัดการกับ Request ต่าง ๆ ที่หลากหลาย ก่อนจะทำการส่งต่อไปยังเซอร์วิสที่อยู่ภายใน API Gateway มีหน้าที่ดังนี้: Filter: กรอง traffic หรือ request ที่เข้ามาจากทั้ง web, mobile, web service และอื่น ๆ โดยแก้ปัญหาได้หลายหลาก เช่น การมีหลาย Entry point (URL) ของแต่ละเซอร์วิส ทำให้ยากต่อการจดจำและเข้าถึง และปัญหาด้านความปลอดภัย เป็นต้น Single Entry Point: เปิดเผย Endpoint ของ APIs ต่าง ๆ โดยเปิดเผยเพียงแค่ endpoint เดียว แล้วให้ request ที่เข้ามา ถูกพิจารณาส่วนของ Path ก่อน เช่น เมื่อพาธเป็น /articles ให้วิ่งต่อไปยังเซอร์วิสคือ Article ส่วนนี้จึงกล่าวได้ว่า API Gateway ทำหน้าที่ Routing API Management: การจัดการกับ API ต่าง ๆ ที่จะถูกส่งต่อไป เช่น rate limit เป็นต้น Security mechanism: กลไกของเรื่องความปลอดภัย ไม่ว่าจะเป็นการเข้าถึงบางเซอร์วิสที่ต้องผ่านการลอคอินก่อน หรือการ ทำ logging เป็นต้น Babel Coder Babel Coder https://www.babelcoder.com
  • 97. 2. KONG API GATEWAY ซอฟต์แวร์ API Gateway ที่นิยมในปัจจุบันมีหลายตัวในที่นี้จะนำเสนอ Kong API Gateway Kong API Gateway เป็นระบบ API Gateway แบบ Opensource ที่คอยบริหารจัดการ API ทั้งส่วนของการทำ Routing และ Monitoring นอกจากนี้ยังรองรับ Plugin ต่าง ๆ ที่เกี่ยวข้องในการจัดการ API อีกด้วย วิธีการตั้งค่า Kong มีด้วยกันหลายวิธี สำหรับบทเรียนนี้จะนำเสนอรูปแบบการตั้งค่าผ่านไฟล์ kong.yml โดยสร้าง Endpoint เดียวเมื่อมี Request ส่งเข้ามาจะส่งการ ทำงานต่อเนื่องไปยังเซอร์วิสปลายทางโดยพิจารณาจากพาธ ดังนี้ /: ให้ส่ง Request ต่อไปยังเซอร์วิส site /api: ให้ส่ง Request ต่อไปยังเซอร์วิส api Babel Coder Babel Coder https://www.babelcoder.com
  • 98. Babel Coder Babel Coder https://www.babelcoder.com 2. KONG API GATEWAY kong/kong.yml docker-compose.yml <IP>:8000 <IP>:8000/api
  • 100. DIGITAL OCEAN Babel Coder Babel Coder https://www.babelcoder.com Digital Ocean เป็นหนึ่งในบริการคลาวด์ที่ให้บริการทั้งการสร้างเซิฟเวอร์แบบ VPS การสร้างพื้นที่สำหรับการ จัดเก็บข้อมูล และบริการอื่น ๆ อีกมาก เช่น ระบบคลัสเตอร์ของ Kubernetes ในที่นี้เราจะทำการสร้างเซิฟเวอร์ ผ่านบริการสร้างที่เรียกว่า Droplets Droplets คือเครื่องเสมือน (Virtual Machine) ที่ทำงานบนระบบปฏิบัติการ Linux แต่ละ Droplets จะ เสมือนเป็นเครื่องเซิฟเวอร์ที่แยกจากกันในลักษณะของ VPS
  • 101. DIGITAL OCEAN Babel Coder Babel Coder https://www.babelcoder.com $ ssh-keygen เมื่อ Droplets มีลักษณะเป็นเซิฟเวอร์ เราจึงสามารถเข้าถึงเซิฟเวอร์นี้ได้ด้วย 2 วิธี คือการใช้ SSH และการใช้รหัสผ่าน ในที่นี้จะ นำเสนอการเข้าถึงเซิฟเวอร์ด้วย SSH โดยเริ่มต้นจากการสร้าง SSH Keys ก่อนผ่านคำสั่งดังนี้ เมื่อ nthongjor คือชื่อของผู้ใช้ งานปัจจุบันบนเครื่อง Generating public/private rsa key pair. Enter file in which to save the key (/home/nthongjor/.ssh/id_rsa): /home/nthongjor/.ssh/do_terraform Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/nthongjor/.ssh/do_terraform Your public key has been saved in /home/nthongjor/.ssh/do_terraform.pub The key fingerprint is: SHA256:U1q3moz32e2ElwXZ7iI+d5qX6UxJlgJlN33Hkp09dIw nthongjor@LAPTOP-HEF902DE The key's randomart image is: +---[RSA 3072]----+ | o.X=| | o E=@| | o.. o.=| |
  • 102. DIGITAL OCEAN Babel Coder Babel Coder https://www.babelcoder.com $ cat /home/nthongjor/.ssh/do_terraform.pub จากนั้นให้ทำการแสดง Public Key ดังกล่าวผ่านคำสั่ง cat แล้วจึงทำการคัดลอกค่าดังกล่าวไว้ ssh-rsa xxxxxxxxxxxxxxxxxxxx
  • 116. Babel Coder Babel Coder https://www.babelcoder.com DIGITAL OCEAN $ ssh -i ~/.ssh/do_terraform root@206.189.43.202 ลำดับถัดไปเราจะทำการทดสอบว่า Droplet ของเราสามารถใช้งานได้จริงและมี Docker ติดตั้งอยู่ภายในเซิฟ เวอร์ ให้ทำการคัดลอก IP ของ Droplet แล้วจึงออกคำสั่งดังต่อไปนี้ The authenticity of host '206.189.43.202 (206.189.43.202)' can't be established. ED25519 key fingerprint is SHA256:C+HytWBXrD957ZKo4QGvYhcKRBn/kTm6gQm4eOxTJOg. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '206.189.43.202' (ED25519) to the list of known hosts. Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-94-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/pro System information as of Wed Mar 27 11:45:50 UTC 2024
  • 117. Babel Coder Babel Coder https://www.babelcoder.com DIGITAL OCEAN $ docker info ทำการทดสอบว่ามี Docker ติดตั้งอยู่ภายในด้วยการออกคำสั่งนี้ Client: Docker Engine - Community Version: 25.0.3 Context: default Debug Mode: false Plugins: buildx: Docker Buildx (Docker Inc.) Version: v0.12.1 Path: /usr/libexec/docker/cli-plugins/docker-buildx compose: Docker Compose (Docker Inc.) Version: v2.17.2 Path: /root/.docker/cli-plugins/docker-compose
  • 118. INFRASTRUCTURE AS CODE Infrastructure as Code (IaC) คือวิธีในการจัดการและสร้างส่วนของ Infrastructure ผ่านไฟล์ที่มีรูปแบบโครงสร้างที่ง่ายต่อการทำความเข้าใจ โดยไฟล์ดังกล่าวจะมีลักษณะของการอธิบายถึง สถานะสุดท้ายที่ต้องการให้ระบบเป็น โดย IaC มีคุณสมบัติหลัก ดังนี้ การจัดการเป็นไปอย่างอัตโนมัติ 01 มีการควบคุมเวอร์ชัน 02 มีประสิทธิภาพ 03 สามารถนำไปใช้ซ้ำได้ 04 Babel Coder Babel Coder https://www.babelcoder.com
  • 119. TERRAFORM Babel Coder Babel Coder https://www.babelcoder.com Terraform เป็นเครื่องมือที่ใช้จัดการ Infrastructure อย่างปลอดภัยและมีประสิทธิภาพ โดยใช้ภาษาที่เรียกว่า HashiCorp Configuration Language (HCL) ที่สั้นและเข้าใจง่ายในการนิยามการทำงานซึ่งสามารถใช้จัดการ Cloud ได้ เกือบทุกเจ้า รวมถึง Docker, Kubernetes, และอีกมากมายกว่า 200+ providers Terraform มีความสามารถดังนี้: จัดการ resources ด้วย configuration syntax ที่สั้นและเข้าใจง่าย: สามารถกำหนดและจัดการกับ Infrastructure เช่น เซิร์ฟเวอร์, Network, และ Database ด้วยภาษา HCL (HashiCorp Configuration Language) โดยทีมนักพัฒนาสามารถกำหนดรายละเอียดโดยสร้าง Configuration Files และสามารถแก้ไขได้ตาม ต้องการ ⁴. แสดงสิ่งที่กำลังจะทำ: ก่อนที่จะมีการสร้าง/ลบ/แก้ไข resources จริงๆ เพื่อให้ทราบว่าจะมีการทำอะไรกับ Infrastructure บ้าง ช่วยลดโอกาสผิดพลาด สร้าง resource-dependencies graph: เพื่อจัดลำดับการสร้าง/ลบ/แก้ไข resources ได้อย่างมีประสิทธิภาพ สูงสุด รัน configuration ซ้ำได้เรื่อยๆ: โดยที่ไม่ทำให้ resources เดิมมีปัญหา ใช้จัดการ resources ได้แทบทุก platforms
  • 120. Babel Coder Babel Coder https://www.babelcoder.com TERRAFORM ARCHITECTURE ส่วนประกอบหลักของ Terraform ประกอบด้วย Terraform Core, Terraform State File และ Terraform Providers ดังนี้ DevOps Terraform Manifest Files (.tf) Terraform Core Providers Provisioners Plugins State File (.tfstate) AWS, Azure, GCP, ... remote-exec, local-exec, ... Cloud Service Providers command
  • 121. Babel Coder Babel Coder https://www.babelcoder.com การสร้างไฟล์ตั้งค่า DROPLETS ก่อนอื่นเราต้องหาให้เจอก่อนว่าปลั๊กอินของ Terraform ที่ใช้กับ Cloud Provider เจ้านั้น ๆ มีชื่อว่าอย่างไร โดยการใช้ Google เช่น กรณีของ Digital Ocean เราสามารถค้นหาได้ด้วยคำว่า digitalocean terraform
  • 122. Babel Coder Babel Coder https://www.babelcoder.com การสร้างไฟล์ตั้งค่า DROPLETS เมื่อทำการเข้าสู่หน้าเอกสารดังกล่าวจะพบกับวิธีการใช้งานของปลั๊กอินนั้น ๆ
  • 123. Babel Coder Babel Coder https://www.babelcoder.com การสร้างไฟล์ตั้งค่า DROPLETS ลำดับถัดมาให้ทำการสร้างไฟล์ main.tf โดยเริ่มต้นจากการประกาศบลอค terraform ด้วยการระบุ Provider ที่ต้องการใช้ งานโดยอ้างอิงจากตัวอย่างการใช้ปลั๊กอินบนหน้าเว็บไซต์
  • 124. การสร้างไฟล์ตั้งค่า DROPLETS Babel Coder Babel Coder https://www.babelcoder.com กรณีของ Digital Ocean การใช้งาน Terraform มีผลลัพธ์ให้เกิดการเรียกใช้ API โดยส่งไปยัง Digital Ocean เพื่อ ทำการสร้างทรัพยากรตามที่ระบุ การเข้าถึง API ของ Digital Ocean นั้นต้องแนบ Personal Access Token (PAT) ไป ด้วย เพื่อให้ Digital Ocean ทราบว่าเราผู้กระทำการเรียกใช้ API นั้นคือใคร
  • 125. Babel Coder Babel Coder https://www.babelcoder.com การสร้างไฟล์ตั้งค่า DROPLETS สำหรับวิธีการสร้าง PAT นั้นให้ไปยังเมนู API แล้วเลือก Generate Access Token
  • 126. Babel Coder Babel Coder https://www.babelcoder.com การสร้างไฟล์ตั้งค่า DROPLETS หน้าเว็บไซต์จะแสดงหน้าต่าง New Personal access token ให้ทำการระบุ Token name เป็น terraform และเลือก Write (optional) สุดท้ายจึงกดปุ่ม Generate Token
  • 127. Babel Coder Babel Coder https://www.babelcoder.com การสร้างไฟล์ตั้งค่า DROPLETS หน้าจอจะแสดง Token ให้ทำการกดไอคอนข้าง Token เพื่อทำการคัดลอก Token ดังกล่าวเก็บเอาไว้
  • 128. Babel Coder Babel Coder https://www.babelcoder.com การสร้างไฟล์ตั้งค่า DROPLETS ทำการประกาศตัวแปรชื่อ do_token โดยเราจะทำการส่งค่าของ Token ที่สร้างเมื่อซักครู่ไปภายหลังเมื่อออกคำสั่งบน Terraform CLI
  • 129. Babel Coder Babel Coder https://www.babelcoder.com การสร้างไฟล์ตั้งค่า DROPLETS เพื่อให้การใช้งานทรัพยากรบน Provider เกิดขึ้นได้ เราต้องตั้งค่าบลอค provider สำหรับ Digital Ocean ต้องทำการส่ง PAT ไปด้วย
  • 130. Babel Coder Babel Coder https://www.babelcoder.com การสร้างไฟล์ตั้งค่า DROPLETS การสร้าง Droplet นั้นจะมีขึ้นตอนนึงที่เราต้องระบุ SSH Key เพื่อให้เราสามารถเข้าถึง Droplet ได้ในภายหลัง เราทราบดี อยู่แล้วว่าเราเคยสร้าง SSH Key บน Digital Ocean มาก่อนแล้วโดยใช้ชื่อว่า do_terraform เราจึงสามารถใช้บลอค data เพื่อเข้าถึงค่าที่มีอยู่แล้วบน Provider ได้
  • 131. Babel Coder Babel Coder https://www.babelcoder.com การสร้างไฟล์ตั้งค่า DROPLETS สุดท้ายจึงทำการสร้าง Droplet โดยระบุค่าต่าง ๆ ให้เหมือนกับตอนที่เราสั่งสร้างผ่านเว็บไซต์
  • 132. Babel Coder Babel Coder https://www.babelcoder.com การสร้างไฟล์ตั้งค่า DROPLETS ก่อนหน้าที่เราจะสร้าง Droplet บนหน้า UI เราสร้างโปรเจคขึ้นมาก่อน สำหรับกรณีของ Terraform ก็สามารถใช้บลอค resource ในการสร้างโปรเจคขึ้นมาพร้อมระบุ Droplet ที่เราพึ่งสร้างให้เป็นส่วนหนึ่งของโปรเจคดังกล่าวได้
  • 133. Babel Coder Babel Coder https://www.babelcoder.com การสร้างไฟล์ตั้งค่า DROPLETS สุดท้ายเราต้องการผลลัพธ์เมื่อออกคำสั่ง Terraform ให้เป็นเลข IP ของ Droplet ที่พึ่งสร้าง เราจึงสร้างส่วนบลอค output ดังนี้
  • 134. TERRAFORM WORKFLOW Babel Coder Babel Coder https://www.babelcoder.com Terraform Workflow คือขั้นตอนปฏิบัติในการใช้งาน Terraform แบ่งออกเป็น 5 ขั้นตอนได้แก่ Write Init Plan Apply และ Destroy Write: Write หรือ Define คือขั้นตอนของการเขียนไฟล์การตั้งค่าของ Terraform โดยต้องนิยามบลอคต่าง ๆ ให้ครบถ้วน Init: เป็นขั้นตอนของการออกคำสั่ง terraform init มีผลให้เกิดการสร้างพื้นที่ของการทำงานที่เรียกว่า Terraform Workspace ในขั้นตอนนี้จะมีการสร้างโฟลเดอร์ชื่อ .terraform ขึ้นมาโดย Terraform จะทำการดาวน์โหลด Providers ต่าง ๆ ที่เรานิยามไว้นำมาใส่โฟลเดอร์นี้ Plan: คำสั่ง terraform plan เป็นคำสั่งของขั้นตอนนี้ที่ Terraform จะมีการเชื่อมต่อกับ Cloud Providers ที่เรานิยามไว้ในไฟล์ การตั้งค่าเพื่อตรวจสอบว่าทรัพยากรใดที่นิยามเอาไว้ที่ยังไม่มีอยู่บน Providers นั้น ๆ บ้าง แล้วจึงออกรายงานบนหน้าจอเพื่อให้ ทราบว่าจะมีการเปลี่ยนแปลงใดเกิดขึ้นบ้างเมื่อ Terraform ได้รับการทำงาน ในขั้นตอนของ Plan จะยังไม่มีการเปลี่ยนแปลง ทรัพยากรบน Providers แต่อย่างใด Apply: ขั้นตอนนี้เป็นขั้นตอนของคำสั่ง terraform apply ที่จะทำการสร้าง แก้ไข หรือเปลี่ยนแปลงทรัพยากรบน Cloud Providers ตราบใดที่ทรัพยากรบน Providers เหล่านั้นไม่ตรงกับที่นิยามในไฟล์การตั้งค่า โดยทั่วไปแล้วขั้นตอนของการ apply จะ มีการเรียก plan ก่อนเพื่อให้เห็นว่าจะเกิดการเปลี่ยนแปลงใดบ้าง เมื่อผู้ใช้งานยอมรับการเปลี่ยนแปลงนั้นจึงเกิดการสร้างหรือแก้ไข ทรัพยากรบน Providers ต่อไป Destroy: ขั้นตอนนี้เป็นขั้นตอนของการลบ Infrastructure ทั้งหลายที่ถูกจัดการด้วย Terraform
  • 136. TERRAFORM PLAN $ terraform plan Babel Coder Babel Coder https://www.babelcoder.com Terraform will perform the following actions: # digitalocean_droplet.my-node will be created + resource "digitalocean_droplet" "my-node" { + backups = false + created_at = (known after apply) + disk = (known after apply) + graceful_shutdown = false + id = (known after apply) + image = "docker-20-04" + ipv4_address = (known after apply) + ipv4_address_private = (known after apply) + ipv6 = false + ipv6_address = (known after apply) + locked = (known after apply) ....
  • 137. Babel Coder Babel Coder https://www.babelcoder.com Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # digitalocean_droplet.my-node will be created + resource "digitalocean_droplet" "my-node" { + backups = false + created_at = (known after apply) + disk = (known after apply) + graceful_shutdown = false + id = (known after apply) + image = "docker-20-04" + ipv4_address = (known after apply) TERRAFORM APPLY $ terraform apply
  • 138. Babel Coder Babel Coder https://www.babelcoder.com Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: - destroy Terraform will perform the following actions: # digitalocean_droplet.my-node will be destroyed - resource "digitalocean_droplet" "my-node" { - backups = false -> null - created_at = "2024-04-18T11:43:43Z" -> null TERRAFORM DESTROY $ terraform destroy
  • 140. GITOPS GitOps เป็นกรอบการทำงานที่รวมเอาทฤษฎีของ DevOps มาใช้งานด้วยการผสานเข้ากับ Git โดยมีรูปแบบ ในการจัดการผ่าน Git ในฐานะที่เป็นแหล่งเก็บข้อมูลสำคัญ GitOps เน้นการประกาศการทำงานของส่วนต่าง ๆ ในรูปแบบของ Declarative (เขียนคำสั่งในลักษณะของการตั้งค่าว่าปลายทางต้องการผลลัพธ์ใด) มากกว่าการ สร้างชุดคำสั่งหลายขั้นตอนที่มีลักษณะยาวและยากต่อการทำความเข้าใจ การตั้งค่าต่าง ๆ ของระบบ เช่น Infrastructure การทำงานของ Kubernetes ขั้นตอนของ CI/CD ทุกอย่างล้วนจัดเก็บเป็นค่าคอนฟิคใน ลักษณะของโค้ดแบบ Declarative ใน Git Repository Babel Coder Babel Coder https://www.babelcoder.com
  • 141. 1. ทำไม GITOPS จึงจำเป็น ทำให้การ Deploy ซอฟต์แวร์ดีกว่าเดิม 01 ทำให้การกู้คืนระบบจากข้อผิดพลาดเป็นไปอย่างรวดเร็ว 02 มีการจัดการข้อมูลความลับหรือ Credentials ที่ดีกว่าเดิม 03 ขั้นตอนการ Deploy อธิบายได้ด้วยชุดของการตั้งค่า 04 ส่งเสริมให้เกิดความรู้สึกเป็นเจ้าของและการแสวงหาความรู้ 05 Babel Coder Babel Coder https://www.babelcoder.com
  • 142. 2. หลักการของ GITOPS อธิบายระบบทั้งหมดด้วยวิธีการแบบ Declarative 01 ใช้ Git เป็นเครื่องมือควบคุมเวอร์ชัน 02 การเปลี่ยนแปลงใด ๆ ในระบบเป็นไปอย่างอัตโนมัติโดยอาศัยเครื่องมือ 03 สามารถกู้คืนสู่สถานะที่ถูกต้องได้โดยอัตโนมัติและแจ้ง เตือนได้เมื่อเกิดสิ่งผิดปกติ 04 Babel Coder Babel Coder https://www.babelcoder.com
  • 143. 3. GITOPS WORKFLOW - PUSH MODEL 01 Build Pipeline Deployment Pipeline Environment triggers push update triggers deploys The push model Application Repository Image Registry Environment Repository Babel Coder Babel Coder https://www.babelcoder.com
  • 144. Build Pipeline Deployment Pipeline Environment 3. GITOPS WORKFLOW - PULL MODEL 01 The pull model triggers push update deploys Application Repository Environment Repository observes observes writes Babel Coder Babel Coder https://www.babelcoder.com
  • 145. CI / CD Babel Coder Babel Coder https://www.babelcoder.com
  • 146. Babel Coder CI / CD CI/CD ย่อมาจาก Continuous Integration และ Continuous Delivery/Deployment เป็นกลุ่มของ หลักการปฏิบัติในการกระบวนการพัฒนาและส่งมอบซอฟต์แวร์อย่างอัะตโนมัติ Continuous Integration (CI) เป็นหลักปฏิบัติที่ทำให้สามารถเปลี่ยนแปลงซอร์จโค้ดได้บ่อยตาม ต้องการ เนื่องจากรวมหลักปฏิบัติที่ดีแบบอัตโนมัติไว้ในขั้นตอนของ CI เช่น การทดสอบซอฟต์แวร์แบบ อัตโนมัติ เป็นต้น ขั้นตอนดังกล่าวจึงช่วยให้การเปลี่ยนแปลงซอร์จโค้ดผ่านการ Merged Code เกิดขึ้นได้ บ่อยเท่าที่ต้องการ โดยลดความเป็นกังวลด้านความน่าเชื่อถือของซอฟต์แวร์ลงด้วยการทดสอบแบบ อัตโนมัตินั่นเอง Continuous Delivery/Deployment (CD) เป็นขั้นตอนที่กล่าวถึงการรวมความเปลี่ยนแปลงของ โค้ดเข้ากับการทดสอบแล้วจึงทำการส่งมอบโค้ดที่เปลี่ยนแปลงนั้นออกเป็นแอปพลิเคชันต่อไป Continuous Delivery นั้นจะเป็นขั้นตอนที่รวมถึงการ built การทดสอบแบบอัตโนมัติ และการเตรียม ความพร้อมสำหรับการ Deploy สู่ Production โดยการนำส่งสู่ Production นี้ขึ้นอยู่กับการตัดสินใจซึ่ง อาจจะอยู่ในรูปแบบของการ Manual Deploy ในขณะที่ Continuous Deployment จะเป็นขั้นตอนแบบ อัตโนมัติทั้งหมดที่โค้ดทุกส่วนที่เปลี่ยนแปลงและได้รับการทดสอบแบบอัตโนมัติแล้วจะถูกนำส่งสู่ Production โดยอัตโนมัติ Babel Coder https://www.babelcoder.com
  • 147. Babel Coder CI / CD Code push Github Test Build Register Image Deploy CI CI CI CD CD CD Babel Coder https://www.babelcoder.com
  • 148. Babel Coder สร้างการทำงาน CI ด้วย GITHUB ACTIONS Github Actions คือแพลตฟอร์มสำหรับการสร้างการทำงานแบบ Continuous Integration (CI) และ Continuous Delivery (CD) เพื่อสร้างการทำงานแบบอัตโนมัติสำหรับการ build, test และ deploy ในรูป แบบของขั้นตอนการทำงานหรือที่เรียกว่า Workflow โดยอาศัยการผูกความสัมพันธ์กับเหตุการณ์ (Event) ที่ เกิดขึ้น เช่น ให้เกิดการทำ CI เมื่อมีการ push หรือเมื่อเกิด pull request เป็นต้น Babel Coder https://www.babelcoder.com
  • 149. สร้างการทำงาน CI ด้วย GITHUB ACTIONS Babel Coder Code push Github Babel Coder https://www.babelcoder.com
  • 150. สร้างการทำงาน CD ด้วย GITHUB ACTIONS Babel Coder Code push Github Babel Coder https://www.babelcoder.com
  • 151. LOGGING, TRACING AND MONITORING Babel Coder Babel Coder https://www.babelcoder.com
  • 152. ELASTIC STACK Babel Coder Babel Coder https://www.babelcoder.com
  • 153. ELASTIC STACK Babel Coder Babel Coder https://www.babelcoder.com
  • 154. ELASTIC STACK Babel Coder Babel Coder https://www.babelcoder.com
  • 158. 1. CONTAINER ORCHESTRATION Babel Coder Babel Coder https://www.babelcoder.com
  • 159. 2. PODS $ kubectl run site --image=babelcoder/intro-to-devops-ui:1.0 $ kubectl get pod NAME READY STATUS RESTARTS AGE site 1/1 Running 0 2m1s $ kubectl port-forward site 5151:80 Forwarding from 127.0.0.1:5151 -> 80 Forwarding from [::1]:5151 -> 80 Babel Coder Babel Coder https://www.babelcoder.com
  • 160. 2. PODS $ kubectl port-forward site 5151:80 Forwarding from 127.0.0.1:5151 -> 80 Forwarding from [::1]:5151 -> 80 kubectl 5151 kube API server Pod 443 80 localhost Kubernetes Cluster Babel Coder Babel Coder https://www.babelcoder.com
  • 161. 2. PODS $ kubectl delete pod site pod "site" deleted Babel Coder Babel Coder https://www.babelcoder.com
  • 162. /usr/share/nginx/html index.html 3. MULTI-CONTAINER DESIGN PATTERNS site init Init Containers api ambassador Ambassador Pattern localhost:6379 redis pod redis redis:6379 Babel Coder Babel Coder https://www.babelcoder.com
  • 163. 3. MULTI-CONTAINER DESIGN PATTERNS site log Sidecar Pattern api redis pod Volume log transformer Volume site Adapter Pattern Babel Coder Babel Coder https://www.babelcoder.com
  • 164. 4. DEPLOYMENTS Deployment ReplicaSet Pods Manages Manages Babel Coder Babel Coder https://www.babelcoder.com
  • 165. 4. DEPLOYMENTS ReplicaSet Deployment M anages app=site app=site app=site app=api $ kubectl apply -f deployment.yaml deployment.yaml Babel Coder Babel Coder https://www.babelcoder.com
  • 166. Target Pod Target Pod Target Pod Source Pod Cluster IP 5. SERVICES - CLUSTER IP Kubernetes Cluster Node Node Internal Communication (api) (db) (db) (db) service.yaml Babel Coder Babel Coder https://www.babelcoder.com
  • 167. 5. SERVICES - CLUSTER IP Kubernetes Cluster Target Pod Target Pod Target Pod Source Pod Cluster IP Node Node Internal Communication (api) (db) (db) (db) $ $ kubectl apply -f service.yaml $ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE db ClusterIP 10.102.134.43 <none> 6379/TCP 3s $ kubectl describe svc db TargetPort: 6379/TCP Endpoints: 10.1.0.26:6379,10.1.0.30:6379,10.1.0.32:6379 $ kubectl run busybox --rm --restart Never -it -- image=busybox / # telnet db 6379 Connected to db Babel Coder Babel Coder https://www.babelcoder.com
  • 168. Target Pod Target Pod Target Pod Cluster IP Node Port - 32074 Node Port - 32074 5. SERVICES - NODEPORT Kubernetes Cluster (api) (api) (api) service.yaml Babel Coder Babel Coder https://www.babelcoder.com
  • 169. 5. SERVICES - NODEPORT Target Pod Target Pod Target Pod Cluster IP Node Port - 32074 Node Port - 32074 Babel Coder Babel Coder https://www.babelcoder.com Kubernetes Cluster (api) (api) (api) $ kubectl apply -f service.yaml $ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE api NodePort 10.100.61.121 <none> 5152:32074/TCP 14m $ kubectl describe svc api Port: <unset> 5152/TCP TargetPort: 3000/TCP NodePort: <unset> 32074/TCP Endpoints: 10.1.0.27:3000,10.1.0.28:3000,10.1.0.34:3000 $ curl localhost:32074 เข้าถึงด้วย IP ของ Node กรณีของการใช้ Kubernetes บน Docker จะมีเพียง 1 Node และสามารถเข้าถึง Node นั้นได้ผ่าน localhost
  • 170. Target Pod Target Pod Target Pod Cluster IP Node Port - 32074 Node Port - 32074 5. SERVICES - LOADBALANCER Load Balancer Kubernetes Cluster (site) (site) (site) service.yaml Babel Coder Babel Coder https://www.babelcoder.com
  • 171. Target Pod Target Pod Target Pod Cluster IP Node Port - 30575 Node Port - 30575 5. SERVICES - LOADBALANCER Load Balancer Kubernetes Cluster (site) (site) (site) $ kubectl apply -f service.yaml $ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE site LoadBalancer 10.96.239.241 localhost 5151:30575/TCP 34m $ kubectl describe svc site Port: <unset> 5151/TCP TargetPort: 80/TCP NodePort: <unset> 30575/TCP Endpoints: 10.1.0.29:80,10.1.0.31:80,10.1.0.33:80 Session Affinity: None External Traffic Policy: Cluster $ curl localhost:5151 Babel Coder Babel Coder https://www.babelcoder.com เข้าถึงด้วย IP ของ Cluster กรณีของการใช้ Kubernetes บน Docker จะมีเพียง 1 Node และสามารถเข้าถึง Cluster ผ่าน Node นั้นได้ผ่าน localhost
  • 172. 6. CONFIGMAP docker-compose.yml Babel Coder Babel Coder https://www.babelcoder.com
  • 173. 6. CONFIGMAP docker-compose.yml config-map.yaml Babel Coder Babel Coder https://www.babelcoder.com
  • 176. HORIZONTAL POD AUTOSCALER Babel Coder Babel Coder https://www.babelcoder.com Kubernetes มีทรัพยากรประเภทหนึ่งที่เรียกว่า HorizontalPodAutoscaler หรือ HPA มีหน้าที่อัพเดท จำนวนของทรัพยากรประเทภ Workload เช่น Deployment หรือ StatefulSet ให้มีจำนวนมากขึ้นหรือน้อยลงเพื่อให้ตรงตามค่าวัด (Metrics) ที่ได้ กำหนดไว้ HorizontalPodAutoscaler มีรูปแบบการสเกลแบบ Horizontal Scaling กล่าวคือการทำงานของมันจะ เป็นการเพิ่มจำนวน Pods เข้าไปในระบบ เพื่อให้ตรงกับค่าคาดหมาย กระบวนการนี้จะแตกต่างจากการทำงานแบบ Vertical Scaling ที่ Kubernetes จะทำการเพิ่มทรัพยากรประเภทหน่วยความจำหรือ CPU เข้าไปในระบบเพื่อขยายขนาดนั่นเอง การทำงานของ HorizontalPodAutoscaler นั้นเมื่อพบว่าจำนวน Pods เกินกว่าค่าคาดหมายที่ได้กำหนดไว้ แล้วจะทำการออกคำสั่งไปยัง Workload เหล่านั้น คือ Deployment หรือ StatefulSet เพื่อให้ทำการลด จำนวน Pods ในระบบลง
  • 177. HORIZONTAL POD AUTOSCALER Babel Coder Babel Coder https://www.babelcoder.com Pod 31% CPU Metrics: CPU > 50% Pod 61% CPU Pod
  • 178. 1. ติดตั้ง METRICS SERVER Babel Coder Babel Coder https://www.babelcoder.com เพื่อให้ HPA สามารถทำงานได้ บนระบบคลัสเตอร์ต้องทำการติดตั้ง Kubernetes Metrics Server เพื่อ รวบรวมข้อมูลของ Metrics ต่าง ๆ จาก kubelet ในคลัสเตอร์ เราจึงจำเป็นต้องทำการติดตั้ง Metrics Server ผ่านการสร้างไฟล์ k8s/hpa-components.yaml รายละเอียดตามบทความในคอร์ส จากนั้นให้ออกคำสั่ง kubectl apply -f k8s/hpa-components.yaml เพื่อใช้งาน
  • 179. Babel Coder Babel Coder https://www.babelcoder.com 2. การเรียกใช้งาน HPA เป็นตัวกำหนดว่าแต่ละ Pod จำเป็นต้องมีทรัพยากรใด จำนวนเท่าไหร่เพื่อให้เพียงพอต่อการใช้งาน k8s/deployment.yaml
  • 180. Babel Coder Babel Coder https://www.babelcoder.com 2. การเรียกใช้งาน HPA เมื่อเสร็จเรียบร้อยเราจะออกคำสั่งต่อไปนี้เพื่อสร้าง HPA ที่มีการทำงานคือการกำหนดจำนวน Pods ขั้นต่ำที่ 1 Pods และสูงสุดถึง 5 Pods โดยการสเกลนั้นจะเพิ่มหรือลด Pods ขึ้นอยู่กับการพิจารณาสัดส่วนการใช้งาน CPU หากมีการใช้งาน CPU เฉลี่ยมากกว่า 20% จะทำการสเกลขึ้นด้วยการเพิ่มจำนวน Pods และจะลดจำนวน Pods ลงเมื่อการใช้งาน CPU เฉลี่ยต่ำกว่า 50% ในระดับหนึ่ง ในที่นี้เราจะสร้าง HPA เพื่อใช้งานกับ Deployment ที่มีชื่อว่า api เท่านั้น $ kubectl autoscale deployment api --cpu-percent=20 --min=1 --max=5 horizontalpodautoscaler.autoscaling/api autoscaled
  • 181. Babel Coder Babel Coder https://www.babelcoder.com 2. การเรียกใช้งาน HPA $ kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE api Deployment/api 1%/20% 1 5 1 17m ส่วนนี้จะพบกับคอลัมภ์ชื่อ TARGETS แสดงผลเป็น 1%/20% ที่มีความ หมายว่ามีการตั้งค่า Metrics ไว้ที่ 20% แต่ปัจจุบันการใช้งาน CPU เฉลี่ยนอยู่ที่ 1% Pod 1% CPU
  • 182. Babel Coder Babel Coder https://www.babelcoder.com 3. ทดลองเพิ่มและลดโหลดของ API $ kubectl run -i --tty load-generator --rm --image=busybox:1.28 -- restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://localhost:5152/articles; done" Pod 1% CPU เราจะทำการเพิ่มโหลดเพื่อดูการทำงานของ HPA ว่าจะมีการเพิ่มจำนวน Pods เมื่อ CPU เฉลี่ยนเกิน 20% หรือ ไม่ โดยออกคำสั่งสำหรับการเรียกใช้งาน API อย่างต่อเนื่อง ดังนี้ $ kubectl get hpa api --watch NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE api Deployment/api 1%/20% 1 5 1 3s
  • 183. Babel Coder Babel Coder https://www.babelcoder.com 3. ทดลองเพิ่มและลดโหลดของ API $ kubectl get deploy api -w Pod 31% CPU เมื่อ CPU เฉลี่ยใช้งานถึง 31% เมื่อนั้น HPA จะทำการเพิ่มจำนวน Pod เป็น 2 ตัว NAME READY UP-TO-DATE AVAILABLE AGE api 2/2 2 2 6d5h Pod
  • 184. Babel Coder Babel Coder https://www.babelcoder.com 31% 3. ทดลองเพิ่มและลดโหลดของ API $ kubectl get deploy api -w Pod CPU หยุดการทำงานของคำสั่งในการร้องขอข้อมูลจาก API ลง เพื่อให้การใช้งาน CPU เฉลี่ยลดลง ทำการสังเกตการใช้งาน CPU เมื่อเวลาผ่านไประยะหนึ่งจะพบผลลัพธ์ดังนี้ NAME READY UP-TO-DATE AVAILABLE AGE api 1/1 1 1 6d5h Pod
  • 185. Babel Coder Babel Coder https://www.babelcoder.com 4. การตั้งค่าการทำงานของ HPA ผ่านไฟล์ YAML เราจะเปลี่ยนรูปแบบการเรียกใช้ HPA จากเดิมที่เป็นการออกคำสั่งให้อยู่ในรูปแบบของไฟล์ YAML แทน กำหนดจำนวน Pod ต่ำสุดและสูงสุด กำหนดให้เกิดการสเกลเมื่อ CPU มีการใช้งานเฉลี่ยเกิน 20%
  • 187. การปรับเปลี่ยนวัฒนธรรมองค์กรเพื่อเป็นองค์กร แบบ DEVOPS การปรับเปลี่ยนวัฒนธรรมองค์กรเพื่อเป็นองค์กรแบบ DevOps ไม่ใช่เพียงแค่การเปลี่ยนแปลง เทคโนโลยีหรือกระบวนการทำงานเท่านั้น แต่ยังรวมถึงการเปลี่ยนแปลงทัศนคติ ความคิด และวัฒนธรรม ภายในองค์กรด้วย ดังนั้น การปรับเปลี่ยนวัฒนธรรมเพื่อสนับสนุน DevOps จึงเป็นสิ่งที่สำคัญ การส่งเสริมวัฒนธรรมการเรียนรู้ 01 การทำงานร่วมกันและการแบ่งปันประสบการณ์ 02 การยอมรับการเปลี่ยนแปลง 03 การวัดผลและปรับปรุงอย่างต่อเนื่อง 04 การส่งเสริมการสื่อสารและการทำงานร่วมกัน 05 Babel Coder Babel Coder https://www.babelcoder.com
  • 188. กรณีศึกษาการใช้งาน DEVOPS Netflix ถือเป็นตัวอย่างที่ดีของการใช้งาน DevOps โดยมีการนำเสนอความคิดที่เกี่ยวกับ DevOps และ มุ่งเน้นที่คุณภาพผ่านกระบวนการที่เป็นอัตโนมัติ แอปพลิเคชันสตรีมวิดีโอของ Netflix ได้ส่งผลกระทบ อย่างมากต่อโลกเทคโนโลยีด้วยการทำงานทางวิศวกรรมที่ยอดเยี่ยม วัฒนธรรม และการพัฒนา ผลิตภัณฑ์ในหลายปีที่ผ่านมา Netflix ได้พัฒนาวัฒนธรรม DevOps อย่างเป็นธรรมชาติด้วยความคิดที่ไม่เหมือนใครและนำไปสู่ ประโยชน์ทางธุรกิจอย่างมาก วัฒนธรรม DevOps ของ Netflix ได้ช่วยให้สามารถผลิตนวัตกรรมได้เร็ว ขึ้น ทำให้สามารถส่งฟีเจอร์ใหม่ ๆ ให้กับผู้ใช้ได้เร็วขึ้น และเพิ่มจำนวนสมาชิกและชั่วโมงการสตรีมได้อย่าง มาก Netflix ได้เลือก AWS เป็นพาร์ทเนอร์คลาวด์และใช้เวลาเกือบเจ็ดปีในการย้ายข้อมูลทั้งหมดไปยังคลาวด์ แต่ Netflix ไม่ได้ย้ายระบบแล้วนำไปวางลงใน AWS แต่เลือกที่จะเขียนแอปพลิเคชันทั้งหมดใหม่ในคลา วด์เพื่อให้เป็น cloud-native ซึ่งเปลี่ยนแปลงวิธีการดำเนินงานของบริษัทอย่างสิ้นเชิง 01 Babel Coder Babel Coder https://www.babelcoder.com