Lewati ke konten utama
Kubernetes

Dua replika atau lebih di belakang Service ClusterIP, hanya dapat dijangkau dari back-end Anda.

Markdown

Prasyarat​

  • Cluster Kubernetes dan akses kubectl ke cluster tersebut.
  • Database PostgreSQL khusus untuk Human Plugin, yang dapat dijangkau dari cluster. Lihat Prasyarat dan akses.
  • Kredensial registry dan access key dari Unico.

Semua yang ada di bawah ditempatkan di namespace tersendiri:

kubectl create namespace human-plugin

1. Pull secret registry​

kubectl -n human-plugin create secret docker-registry unico-registry \
--docker-server=pkg.unico.run \
--docker-username="<username>" \
--docker-password="<token>"

2. Secret pengaturan​

kubectl -n human-plugin create secret generic human-plugin \
--from-literal=HUMAN_API_ACCESS_KEY='<your access key>' \
--from-literal=POSTGRES_ADDRESS_HOST='<database host>' \
--from-literal=POSTGRES_USER='human_plugin' \
--from-literal=POSTGRES_PASSWORD='<database password>'

Tambahkan POSTGRES_ADDRESS_PORT, POSTGRES_DATABASE atau POSTGRES_SSL_MODE hanya jika database Anda berbeda dari nilai default di Konfigurasi. Jika Anda mengelola secret dengan alat lain (External Secrets, Sealed Secrets, vault), buat key yang sama dengan alat tersebut. Jangan pernah meng-commit manifest Secret berisi nilai.

3. Deployment dan Service​

human-plugin.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: human-plugin
namespace: human-plugin
spec:
replicas: 2
selector:
matchLabels: { app: human-plugin }
template:
metadata:
labels: { app: human-plugin }
spec:
terminationGracePeriodSeconds: 60
imagePullSecrets:
- name: unico-registry
containers:
- name: human-plugin
image: pkg.unico.run/human-plugin-api:latest
imagePullPolicy: Always
ports:
- { name: http, containerPort: 8080 }
envFrom:
- secretRef: { name: human-plugin }
resources:
requests: { cpu: "1", memory: 1Gi }
limits: { cpu: "1", memory: 1Gi }
readinessProbe:
httpGet: { path: /health/ready, port: http }
timeoutSeconds: 5
livenessProbe:
httpGet: { path: /health/live, port: http }
periodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
name: human-plugin
namespace: human-plugin
spec:
selector: { app: human-plugin }
ports:
- { name: http, port: 8080, targetPort: http }
kubectl apply -f human-plugin.yaml
kubectl -n human-plugin rollout status deployment/human-plugin
  • replicas: 2: replika berbagi database, sehingga Anda dapat menjalankan sebanyak yang dibutuhkan. Dua replika menjaga Human Plugin tetap tersedia saat satu replika restart.
  • terminationGracePeriodSeconds: 60: Human Plugin menunggu hingga 55 detik untuk permintaan yang sedang berjalan saat berhenti. Default Kubernetes, 30 detik, dapat memutus create di tengah jalan.
  • imagePullPolicy: Always: dengan tag latest, setiap Pod baru menarik rilis terbaru.
  • Probe: readiness menjauhkan trafik dari replika sampai databasenya menjawab, dan timeoutSeconds: 5 membuatnya gagal saat database berhenti menjawab. Lihat Kesehatan dan pemantauan.
  • Resource: nilai di atas adalah minimum untuk setiap replika. Lihat Persyaratan hardware.

4. Batasi akses​

Back-end Anda menjangkau Human Plugin di http://human-plugin.human-plugin.svc:8080. Human Plugin tidak memiliki autentikasi sendiri, sehingga:

  • jangan ekspos Service melalui Ingress, LoadBalancer atau NodePort;
  • izinkan hanya namespace back-end Anda dengan NetworkPolicy.
network-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: human-plugin-allow-backend
namespace: human-plugin
spec:
podSelector:
matchLabels: { app: human-plugin }
policyTypes: [Ingress]
ingress:
- from:
- namespaceSelector:
matchLabels: { kubernetes.io/metadata.name: <your back-end namespace> }
ports:
- { port: 8080 }

Human Plugin sendiri membutuhkan HTTPS keluar ke Unico dan akses ke database Anda. Lihat Jaringan dan keamanan.

5. Validasi​

kubectl -n human-plugin port-forward svc/human-plugin 8080:8080

Di terminal lain, periksa readiness dan jalankan permintaan create dari Quickstart terhadap http://127.0.0.1:8080:

curl --fail http://127.0.0.1:8080/health/ready

Log​

kubectl -n human-plugin logs deploy/human-plugin --since=10m

Pembaruan​

kubectl -n human-plugin rollout restart deployment/human-plugin

Pod baru menarik image terbaru dan menggantikan yang lama satu per satu, setelah siap. Lihat Operasi.