เริ่มต้นใช้งาน ArgoCD
ArgoCD เป็นเครื่องมือ Continuous Delivery (CD) แบบ declarative สำหรับ Kubernetes ซึ่งหมายความว่าการกำหนดค่าของแอปพลิเคชันจะถูกเก็บไว้ใน Git repository และ ArgoCD จะคอยตรวจสอบการเปลี่ยนแปลงและทำการ deploy ไปยัง Kubernetes cluster โดยอัตโนมัติ หรือที่เราเรียกกันว่าการทำ GitOps นั่นเอง
ในบทความนี้ เราจะมาเรียนรู้วิธีการติดตั้ง ArgoCD ลงบน Kubernetes cluster ของเรา
Prerequisites
ก่อนอื่น เราจะต้องมีสิ่งต่อไปนี้:
- ติดตั้ง kubectl cli
- มีไฟล์ kubeconfig สำหรับ cluster ที่เราจะติดตั้ง ArgoCD
มาเริ่มติดตั้ง ArgoCD กันนน
เราจะใช้คำสั่ง kubectl ในการติดตั้งลงไปใน cluster ของเรา
อย่าลืมตรวจสอบนะครับ ว่าเราอยู่ cluster ที่ถูกต้องไหม ถ้าไม่ชัวร์ลองเช็คดูก่อนก็ได้ครับ ใช้คำสั่ง
kubectl config current-context ถ้าไม่ใช่ก็ลองใช้คำสั่ง
kubectl config get-contexts เพื่อดูว่า cluster ของเรานั้นชื่ออะไร แล้วจึงเปลี่ยนไปใช้ตัวนั้นด้วยคำสั่ง
kubectl config use-context <ชื่อ cluster> เมื่ออยู่ที่ cluster ที่ต้องการแล้ว เราจะใช้คำสั่งนี้ในการติดตั้ง
kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
โดยคำสั่งนี้จะเป็นคำสั่งจากเว็บ official ของ argocd เลยครับ เข้าไปดูกันได้ครับ (https://argo-cd.readthedocs.io/en/stable/getting_started)
เมื่อรันคำสั่งแล้วใน cluster ของเราจะมีอีกหนึ่ง namespace เพิ่มขึ้นมาชื่อว่า argocd โดยในนั้นจะมี ArgoCD services และ application อยู่บนนั้นเรียบร้อย
ตั้งค่า TLS
อันนี้เป็นพาร์ทเสริมนะครับ ผมจะให้ ArgoCD server ทำงานโดยไม่ใช้ TLS เพราะว่าผมมี Domain ที่จะไว้ใช้กับตัว argocd อยู่แล้ว ไม่งั้นจะกลายเป็นว่าตอนที่ผมจะแมพ ingress กับ DNS เราจะต้องกำหนดค่าของ ingress ให้ไปใช้พวก cert ต่าง ๆ ด้วย ซึ่งมันก็จะยุ่งยากไปนิดนึง ฮ่าๆๆๆ แต่ถ้าหากใครที่ customize ตัว server argocd เยอะๆ แล้วมีข้อมูล secret บางอย่างอยู่ด้วย ผมแนะนำให้เปิดใช้ TLS ด้วยนะครับ เพื่อความปลอดภัย
สร้างไฟล์ argo-config.yaml ข้างในจะเป็นประมานนี้
apiVersion: v1
kind: ConfigMap
metadata:
namespace: argocd
labels:
app.kubernetes.io/name: argocd-cmd-params-cm
app.kubernetes.io/part-of: argocd
name: argocd-cmd-params-cm
data:
server.insecure: "true"
server.insecure: “true” หมายถึงการกำหนดค่าให้ ArgoCD server ทำงานโดยไม่ใช้ TLS ซึ่งหมายความว่าการสื่อสารระหว่าง ArgoCD server และ client จะไม่ได้รับการเข้ารหัส
เสร็จแล้วก็ใช้คำสั่ง apply ได้เลย
kubectl apply -f argo-config.yml
ลองรัน ArgoCD และตั้งค่า Ingress
เมื่อเราติดตั้งเสร็จแล้ว เราสามารถลองเข้าผ่าน browser ของเราได้ โดยที่เราต้องทำการ port forwarding ออกมาก่อนนะครับ ใช้คำสั่งนี้
kubectl port-forward svc/argocd-server -n argocd 8080:443 ตัว argocd api server ก็จะรันอยู่ที่ https://localhost:8080 เรียบร้อย
แต่ในที่นี้ผมมี DNS ไว้สำหรับแมพตัว argued api server อยู่ เดี๋ยวเรามาลองทำ ingress กันครับ ไฟล์ argocd-ingress.yml ของเราจะเป็นประมานนี้
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd
namespace: argocd
annotations:
kubernetes.io/ingress.class: "nginx"
ingress.kubernetes.io/proxy-body-size: 100M
ingress.kubernetes.io/app-root: "/"
spec:
rules:
- host: argo.example.com
http:
paths: - path: /
pathType: ImplementationSpecific
backend:
service:
name: argocd-server
port:
number: 80 อ้อ ลืมบอกไป ผมใช้ nginx เป็น web server นะครับสำหรับ cluster นี้
เพียงเท่านี้เราก็จะแมพ DNS กับ argocd api server ของเราเรียบร้อยครับ
มาดู Username and Password กันครับ
ต่อไปเมื่อเราเข้าหน้า ui ของ ArgoCD ได้แล้ว เราก็ต้องมีรหัสผ่านเนาะ โดยตัว ArgoCD จะมีการ generate username and password ให้ครับ โดย username จะเหมือนกันก็คือ adminเดี๋ยวผมจะมาสอนวิธีดู password กันครับ
โดยคำสั่งที่ผมจะใช้คือคำสั่งที่เข้าไป get secret ออกมาจากใน services ของ argocd บน cluster ของเรากันครับ ดังนี้
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d เราจะได้ string มาชุดนึง นั่นแหละครับคือ password ของเรา เราก็เอาข้อมูลชุดนี้ไปใช้ login หน้าเว็บได้เลย
Example :

