ใช้ Argo CD กับ Plain YAML Manifest สำหรับ Kubernetes Deployment
บทนำ
Argo CD เป็นเครื่องมือ GitOps ที่ช่วยให้การจัดการและติดตั้ง Kubernetes applications เป็นเรื่องง่าย โดยจะตรวจสอบ Git repository อย่างต่อเนื่อง และทำให้สถานะของระบบสอดคล้องกับที่กำหนดไว้ในไฟล์ manifest บทความนี้จะอธิบายวิธีการใช้ Argo CD กับ Plain YAML Manifest ซึ่งเป็นวิธีที่เรียบง่าย แต่มีประสิทธิภาพสูง
ทำไมต้องใช้ Plain YAML กับ Argo CD
Plain YAML Manifest นั้นเหมาะสำหรับโครงการที่มีความซับซ้อนน้อยถึงกลาง หรือเมื่อคุณต้องการความง่ายในการจัดการ ข้อดีของการใช้ Plain YAML คือ:
- ไม่ต้องติดตั้งเครื่องมือเพิ่มเติม เช่น Helm หรือ Kustomize
- เข้าใจง่าย และควบคุมได้อย่างชัดเจน
- เหมาะสำหรับทีมที่เพิ่งเริ่มเรียนรู้ Kubernetes
- ปรับแต่งได้อย่างยืดหยุ่นตามความต้องการของโปรเจกต์
Plain YAML vs Helm vs Kustomize
ในการเลือกใช้เครื่องมือสำหรับการจัดการ Kubernetes manifests นั้น ขึ้นอยู่กับความซับซ้อนของโปรเจกต์:
- Plain YAML: เหมาะสำหรับโปรเจกต์เล็กถึงกลาง ที่ไม่ต้องใช้ parameters ที่ซับซ้อน
- Helm: ใช้ได้สำหรับ package management ที่ซับซ้อน และมี reusable templates
- Kustomize: ปรับแต่งโครงสร้าง YAML โดยไม่ต้องใช้ template engine
โครงสร้างไดเรกทอรี่แบบ Best Practice
เมื่อใช้ Plain YAML กับ Argo CD ให้จัดระเบียบไฟล์ตามโครงสร้างด้านล่าง:
my-app/
├── manifests/
│ ├── namespace.yaml
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── configmap.yaml
│ └── ingress.yaml
├── application.yaml
└── README.md
ตัวอย่าง Namespace Manifest
apiVersion: v1
kind: Namespace
metadata:
name: my-app-ns
labels:
name: my-app-ns
ตัวอย่าง Deployment Manifest
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
namespace: my-app-ns
labels:
app: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: web-app
image: myregistry/web-app:1.0.0
ports:
- containerPort: 8080
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "512Mi"
cpu: "500m"
env:
- name: APP_ENV
valueFrom:
configMapKeyRef:
name: app-config
key: environment
ตัวอย่าง Service Manifest
apiVersion: v1
kind: Service
metadata:
name: web-app-service
namespace: my-app-ns
spec:
type: ClusterIP
selector:
app: web-app
ports:
- port: 80
targetPort: 8080
protocol: TCP
ตัวอย่าง ConfigMap Manifest
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
namespace: my-app-ns
data:
environment: "production"
log_level: "info"
api_timeout: "30"
config.yaml: |
server:
port: 8080
host: 0.0.0.0
ตัวอย่าง Argo CD Application Manifest
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: web-app-deploy
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/yourusername/my-app.git
targetRevision: main
path: manifests
destination:
server: https://kubernetes.default.svc
namespace: my-app-ns
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
retry:
limit: 5
backoff:
duration: 5s
factor: 2
maxDuration: 3m
วิธีการติดตั้ง Argo CD
ก่อนใช้ Argo CD ต้องติดตั้งในคลัสเตอร์ Kubernetes ของคุณ:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
วิธีการดึงและซิงค์ Manifest จาก Git
Argo CD จะติดตามการเปลี่ยนแปลงในไฟล์ YAML ภายในโฟลเดอร์ที่กำหนดใน path ของ Application manifest โดยใช้ Git repository เป็นแหล่งความจริง (Single Source of Truth) เมื่อมีการอัพเดต manifest ใน Git Argo CD จะตรวจพบและซิงค์อัตโนมัติ
Best Practices สำหรับการใช้ Plain YAML กับ Argo CD
- แยกไฟล์ Manifest: แบ่งแต่ละ Kubernetes object ออกจากกัน เพื่อให้อ่านและบำรุงรักษาง่าย
- ใช้ Labels: ติดป้ายกำกับ resources เพื่อจัดกลุ่มและติดตามได้ง่ายขึ้น
- ตั้งค่า Resource Requests/Limits: กำหนดจำนวน CPU และ Memory ให้กับ containers
- ใช้ Namespace: จัดแยกแอปพลิเคชันต่างๆ โดยใช้ Namespace
- ตรวจสอบไฟล์: ใช้ kubectl dry-run ก่อนส่งไปยังคลัสเตอร์
- เวอร์ชันควบคุม: เก็บ manifests ทั้งหมดใน Git repository
การใช้ Argo CD บน ผู้ให้บริการโฮสติ้ง Cloud VPS
หากคุณต้องการจัดการแอปพลิเคชัน Kubernetes ด้วย Argo CD บนเซิร์ฟเวอร์ของคุณเอง ผู้ให้บริการโฮสติ้ง Cloud VPS เป็นตัวเลือกที่ยอดเยี่ยม ด้วยความเป็นส่วนตัวสูง ความยืดหยุ่นในการปรับแต่ง และประสิทธิภาพที่เชื่อถือได้ คุณสามารถติดตั้ง Kubernetes cluster และ Argo CD ได้อย่างอิสระ
ผู้ให้บริการโฮสติ้ง Cloud VPS ให้บริการคุณภาพสูง พร้อมการสนับสนุนจากทีมเทคนิคของเรา เพื่อให้แน่ใจว่าระบบของคุณทำงานได้อย่างราบรื่น
ข้อสรุป
การใช้ Plain YAML Manifest กับ Argo CD นั้นเป็นวิธีที่เรียบง่าย แต่มีประสิทธิภาพสูง สำหรับการจัดการแอปพลิเคชัน Kubernetes โดยไม่ต้องใช้เครื่องมือที่ซับซ้อน ด้วยการตั้งค่าโครงสร้างไดเรกทอรี่อย่างเหมาะสม ปฏิบัติตามแนวทาง Best Practices และ commit manifests ใน Git repository คุณจะสามารถจัดการและติดตามแอปพลิเคชันของคุณได้อย่างมีประสิทธิภาพ บนระบบไม่ว่าจะเป็น ผู้ให้บริการโฮสติ้ง Cloud VPS หรือสภาพแวดล้อมอื่นๆ

