3. ติดตั้งระบบ
อัปเดตล่าสุด: 2026-10-02
หน้านี้อธิบายการติดตั้งโปรแกรมบน VM ตั้งแต่สร้าง K3s cluster จนตรวจ applications และ storage โดยรัน script ตามลำดับใน VM เครื่องเดียวกัน:
ลำดับ:
00-install-k3s.bash→01-initial-secrets.bash→02-initial-addons.bash→04-boot-strap.bash→03-install-monitoring.bashรัน script03หลัง04เพราะ monitoring ต้องอ่าน secret ที่สร้างไว้และตั้งค่า alert หลัง Argo CD เริ่ม sync ระบบแล้ว
ก่อนเริ่ม
3.1 ดาวน์โหลด repository ลง VM
SSH เข้า VM ด้วยผู้ใช้ที่มีสิทธิ์ sudo แล้วติดตั้งเครื่องมือที่ใช้ในขั้นตอนนี้:
sudo apt update
sudo apt install -y git curl ca-certificates openssl
ดาวน์โหลด repository ที่เตรียมไว้ในหน้า 1 แล้วเข้าโฟลเดอร์นั้น:
git clone https://github.com/<your-org>/please-payment-production.git
cd please-payment-production
ตรวจว่ามี installation scripts ครบ:
ls -1 *.bash
ควรเห็นไฟล์ 00-install-k3s.bash, 01-initial-secrets.bash, 02-initial-addons.bash, 04-boot-strap.bash และ 03-install-monitoring.bash
3.2 ติดตั้ง K3s ด้วย script 00
K3s คือ Kubernetes รุ่นเบาที่ใช้รัน cluster บน VM เครื่องเดียว รัน script ด้วยสิทธิ์ root:
sudo bash ./00-install-k3s.bash
ก่อนใช้ kubectl ให้คัดลอก kubeconfig (ไฟล์เชื่อมต่อและยืนยันสิทธิ์เข้า cluster) มาไว้ใน home ของผู้ใช้ปัจจุบัน โดยกำหนดเจ้าของและ permission ให้อ่านได้เฉพาะผู้ใช้นี้:
sudo install -o "$USER" -g "$(id -gn)" -m 600 \
/etc/rancher/k3s/k3s.yaml "$HOME/k3s.yaml"
export KUBECONFIG="$HOME/k3s.yaml"
ตรวจสถานะ node:
kubectl get nodes
ผลที่ต้องได้คือมี node อย่างน้อยหนึ่งตัวและสถานะเป็น Ready เมื่อเริ่ม SSH session ใหม่ ให้ตั้งค่า KUBECONFIG อีกครั้งก่อนใช้ kubectl
3.3 เตรียม secret และรัน script 01
Secret คือข้อมูลลับที่เก็บใน Kubernetes เช่น key และ webhook ก่อนรัน script ให้เตรียมไฟล์ .env บน VM ซึ่ง script จะใช้สร้าง secret initial-secret-preset
สร้าง MUTUAL_KEY และไฟล์เริ่มต้น โดยรันคำสั่งนี้ครั้งเดียวในโฟลเดอร์ repository:
umask 077
printf 'DUMMY=demo\nMUTUAL_KEY=%s\n' "$(openssl rand -hex 32)" > .env
chmod 600 .env
เปิดไฟล์ใน editor แล้วเพิ่มบรรทัด DISCORD_WEBHOOK โดยใส่ URL จริงในไฟล์เท่านั้น ไม่ใส่ URL ในคำสั่ง terminal:
nano .env
ให้ไฟล์มี keys DUMMY, MUTUAL_KEY และ DISCORD_WEBHOOK ไฟล์นี้มีความลับ อย่า commit หรือส่งให้ผู้อื่น โดย permission 600 จำกัดการอ่านไว้ที่ผู้ใช้ปัจจุบัน
เมื่อ .env พร้อมแล้ว รัน script 01 เพื่อสร้าง initial-secret และ initial-secret-preset:
chmod +x 01-initial-secrets.bash
./01-initial-secrets.bash
Script เริ่ม Job (งานที่ cluster รันให้เสร็จ) ชื่อ secret-init เพื่อสร้าง initial-secret แล้วรอจนพบ key GIT_USER หากคำสั่งยังไม่จบ ให้เปิด SSH session ที่สองเพื่อตรวจสถานะและ log อย่าเริ่ม script 01 ซ้ำขณะที่ session แรกยังรออยู่:
export KUBECONFIG="$HOME/k3s.yaml"
kubectl get job,pod -n default
kubectl describe pod -n default -l job-name=secret-init
kubectl logs -n default job/secret-init
หลัง script จบ ตรวจชื่อ secret โดยไม่เปิดดูค่าข้างใน:
kubectl wait --for=condition=complete job/secret-init -n default --timeout=5m
kubectl get secrets -n default
ทำต่อเมื่อ Job secret-init เป็น Complete และเห็น initial-secret กับ initial-secret-preset ในรายการ Script 01 อาจจบก่อน Job ทำงานเสร็จ เพราะรอเพียง secret key บางรายการ หากคำสั่ง kubectl wait หมดเวลา ให้ตรวจ pod และ log ตามคำสั่งด้านบน แล้วแก้สาเหตุก่อนติดตั้งส่วนถัดไป
3.4 ติดตั้งส่วนประกอบพื้นฐานด้วย script 02
ส่วนประกอบพื้นฐาน (addons) คือบริการที่ cluster ต้องใช้ เช่น Argo CD, ingress-nginx, cert-manager และ External Secrets Operator ติดตั้งด้วย script 02:
chmod +x 02-initial-addons.bash
./02-initial-addons.bash
รอให้ Kubernetes สร้าง pod แล้วตรวจสถานะ:
kubectl get pods -A
ตรวจว่า pod (หน่วยที่รันบริการใน cluster) ใน namespace (กลุ่มแยกทรัพยากร) argocd, ingress-nginx, cert-manager และ external-secrets เริ่มเป็น Running หรือ Completed ตามชนิดงาน
3.5 เริ่ม sync applications ด้วย script 04
Script 04 ลงทะเบียนการตั้งค่าตั้งต้นกับ Argo CD จากนั้น Argo CD จะอ่าน repository ที่กำหนดและ sync applications (รายการแอปที่จะติดตั้ง) เข้าสู่ cluster
chmod +x 04-boot-strap.bash
./04-boot-strap.bash
ตรวจรายการและสถานะ applications:
kubectl get applications -n argocd
รอให้ applications หลักเปลี่ยนเป็น Synced และ Healthy สถานะนี้หมายถึง manifest ตรงกับ repository และ workload ผ่าน health check ของ Argo CD อย่าดูเฉพาะ bootstrap application; ตรวจ application ของส่วนประกอบทั้งหมดที่อยู่ใน repository
3.6 ติดตั้ง metrics และ Discord alerts ด้วย script 03
Helm เป็นเครื่องมือที่ script ใช้ติดตั้ง Prometheus และ Grafana ติดตั้ง Helm CLI บน Ubuntu ตาม script ของโปรเจกต์ Helm แล้วตรวจเวอร์ชัน:
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-4
chmod 700 get_helm.sh
sudo ./get_helm.sh
helm version
ดูรายละเอียดจาก คู่มือติดตั้ง Helm อย่างเป็นทางการ
ทำขั้นนี้หลัง script 04 เพราะ Alertmanager (บริการรวบรวมและส่ง alert) เชื่อมไปยัง discord-alm และใช้ webhook จาก secret ที่สร้างไว้ หลังติดตั้ง ให้ทดสอบการส่ง alert ตามนโยบายของระบบ
chmod +x 03-install-monitoring.bash
./03-install-monitoring.bash
ตรวจ pod ของ metrics และ Discord:
kubectl get pods -n monitoring
kubectl get pods -n discord-alm
3.7 ตรวจ workload และ storage
ตรวจ pod ทุก namespace และ persistent volume claim (PVC — คำขอใช้พื้นที่เก็บข้อมูลของ pod):
kubectl get pods -A
kubectl get pvc -A
pod หลักไม่ควรค้างที่ Pending, ImagePullBackOff หรือ CrashLoopBackOff ส่วน PVC ที่ต้องใช้ควรเป็น Bound เมื่อผ่านแล้ว ไปที่ 4. ตั้งค่า Domain & DNS เพื่อตรวจ DNS และ TLS จากนั้นใช้หน้า 5. ตรวจสอบหลังติดตั้ง ตรวจ Admin, Argo CD, metrics และ jobs
Checklist
- ⬜ Clone repository สำหรับการติดตั้งลง VM แล้ว
- ⬜ รัน
00-install-k3s.bashและ node เป็นReady - ⬜ ตั้ง
KUBECONFIG=$HOME/k3s.yamlสำหรับ SSH session แล้ว - ⬜ รัน
01-initial-secrets.bashและ Jobsecret-initสำเร็จแล้ว - ⬜ รัน
02-initial-addons.bashและ addons pods เริ่มทำงานแล้ว - ⬜ รัน
04-boot-strap.bashและ Argo CD applications เริ่ม sync แล้ว - ⬜ ตั้ง
DISCORD_WEBHOOKใน.envสำหรับ ExternalSecret ของ Discord alerts - ⬜ ติดตั้ง Helm แล้วรัน
03-install-monitoring.bashหลัง bootstrap - ⬜ ตรวจ pod ของ
discord-almและทดสอบการส่ง alert ตามนโยบายแล้ว - ⬜ ตรวจ pod และ PVC ก่อนตั้งค่า domain แล้ว