Mari kita bahas setiap langkah secara mendetail:
- AWS CLI: Untuk berinteraksi dengan AWS dari terminal.
- Terraform: Untuk infrastruktur sebagai kode.
- kubectl: CLI untuk berinteraksi dengan Kubernetes.
- Docker: Untuk containerisasi aplikasi.
- eksctl: Untuk membuat dan mengelola cluster EKS.
brew install awscli terraform kubectl eksctl docker
my-app/
│
├── app.js
├── Dockerfile
├── package.json
├── package-lock.json
└── README.md
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello, Kubernetes!');
});
app.listen(port, () => {
console.log(`App running on port ${port}`);
});
npm init -y
npm install express
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
docker build -t my-app .
- Login ke Docker Hub atau ECR:
docker login
- Tag dan push image:
docker tag my-app:latest <repository-url>:latest
docker push <repository-url>:latest
terraform-eks/
│
├── main.tf
├── variables.tf
├── security.tf
└── network.tf
└── iam.tf
terraform init
terraform apply
aws eks --region ap-southeast-1 update-kubeconfig --name kube-node
aws eks update-kubeconfig --name kube-node --region ap-southeast-1
Verifikasi bahwa token autentikasi Anda valid
aws sts get-caller-identity
apiVersion: apps/v1
kind: Deployment
metadata:
name: kube-noode
spec:
replicas: 2
selector:
matchLabels:
app: kube-node
template:
metadata:
labels:
app: kube-node
spec:
containers:
- name: kube-node
image: rnrifai/kube-node:latest
ports:
- containerPort: 3000
kubectl apply -f deployment.yaml
apiVersion: v1
kind: Service
metadata:
name: kube-node-service
spec:
type: LoadBalancer
selector:
app: kube-node
ports:
- protocol: TCP
port: 80
targetPort: 3000
kubectl apply -f service.yaml
kubectl delete deployment --all
kubectl get pods
kubectl get services
Dapatkan IP dari LoadBalancer untuk mengakses aplikasi.
<repository-url>:latest
adalah sintaks yang digunakan untuk mereferensikan image Docker yang akan digunakan atau di-push ke suatu container registry, seperti Docker Hub atau Amazon Elastic Container Registry (ECR).
-
<repository-url>
: URL dari repository tempat image Docker disimpan. Ini bisa berupa:- Docker Hub:
username/my-app
- Amazon ECR:
123456789012.dkr.ecr.us-east-1.amazonaws.com/my-app
- Google Container Registry (GCR):
gcr.io/my-project/my-app
- Private Docker registry:
my-registry.com/my-app
- Docker Hub:
-
:latest
: Tag yang digunakan untuk menandai versi image.- Secara default, jika kamu tidak menentukan tag, Docker akan menggunakan
:latest
. - Tag ini sering digunakan untuk menandai versi terbaru, tetapi dalam lingkungan produksi, sebaiknya gunakan tag versi spesifik untuk menghindari ketidakpastian versi yang digunakan.
- Secara default, jika kamu tidak menentukan tag, Docker akan menggunakan
Jika kamu sudah build image dengan nama my-app
, lalu ingin mendorongnya ke Docker Hub:
docker tag my-app:latest my-dockerhub-username/my-app:latest
docker push my-dockerhub-username/my-app:latest
Atau jika menggunakan Amazon ECR:
docker tag my-app:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-app:latest
docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-app:latest
- Tidak ada jaminan versi yang konsisten, yang dapat menyebabkan bug sulit ditelusuri.
- Lebih baik menggunakan versi spesifik seperti
v1.0.0
,v2.1.3
, dll.