Dua replika atau lebih di belakang Service ClusterIP, hanya dapat dijangkau dari back-end Anda.
Prasyarat
- Cluster Kubernetes dan akses
kubectlke 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
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 taglatest, setiap Pod baru menarik rilis terbaru.- Probe: readiness menjauhkan trafik dari replika sampai databasenya menjawab, dan
timeoutSeconds: 5membuatnya 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,
LoadBalanceratauNodePort; - izinkan hanya namespace back-end Anda dengan NetworkPolicy.
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.