• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar

Jaranguda

Belajar Mengajar

  • Home
  • Sponsor/Jasa
  • Tentang

Deploy Kubernetes di DigitalOcean dengan Terraform

Last Updated on 27 December 2021 By tommy Leave a Comment

Kali ini kita akan membahas cara untuk deploy Kubernetes di DigitalOcean dengan Terraform. Kubernetes dari DigitalOcean adalah managed kubernetes yang ditawarkan oleh DigitalOcean, saat ini versi yang tersedia adalah 1.21.x, 1.20.x dan 1.19.x. Disini yang perlu kita bayar adalah node yang digunakan kubernetes, karena control plane-nya sendiri disediakan gratis.

Untuk menjalankan kubernetes dengan biaya termurah di Digital Ocean adalah $10 atau sekitar Rp. 140.000/bulan.

Install Terraform, kubectl dan doctl

1. Install Terraform
Terraform adalah infrastructure as code yang memungkinkan untuk build, scaling dan manage server dari code atau lebih spesific dengan YAML file. DigitalOcean merupakah salah satu dari provider yang disupport Terraform, jadi kita bisa langsung menggunakan terraform ini untuk deploy berbagai macam service di DO

wget https://releases.hashicorp.com/terraform/1.1.2/terraform_1.1.2_linux_amd64.zip
unzip terraform_1.1.2_linux_amd64.zip
sudo cp terraform /usr/local/bin/terraform

2. Install doctl
doctl adalah command line interface/CLI dari DigitalOcean yang digunakan untuk mengelola services yang ditawarkan lewat CLI. Dengan doctl banyak yang bisa operasi yang bisa dilakukan tanpa perlu login ke dashboard DigitalOcean.
Install doctl di Linux

wget https://github.com/digitalocean/doctl/releases/download/v1.68.0/doctl-1.68.0-linux-amd64.tar.gz
tar zxvf doctl-1.68.0-linux-amd64.tar.gz
sudo cp doctl /usr/local/bin/doctl

3. Install kubectl
kubectl adalah command line interface, tool ini yang akan banyak kita gunakan untuk berinteraksi dengan Kubernetes.

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo cp kubectl /usr/local/bin/kubectl

1. Buat Token API

Token/Key ini digunakan sebagai akses masuk ke akun DigitalOcean anda, token ini bisa digunakan di terraform dan doctl. Buat lewat api/token.
digitalocean personal access token
nanti muncul tokennya, simpan token tersebut. Di terminal anda eksekusi

export DIGITALOCEAN_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX

token ini yang akan digunakan oleh terraform nantinya.

2. Terraform

Buat folder tempat menyimpan konfigurasi Terraform, disini kita akan menggunakan folder terraform-kubernetes

mkdir terraform-kubernetes
cd terraform-kubernetes

di folder tersebut buat file provider.tf, yang berisi

terraform {
  required_providers {
    digitalocean = {
      source = "digitalocean/digitalocean"
      version = "2.16.0"
    }
  }
}
 
provider "digitalocean" {
  # Configuration options
}
 
resource "digitalocean_kubernetes_cluster" "jaranguda-sg-prod" {
  name   = "jaranguda-sg-prod"
  region = "sgp1"
  # Grab the latest version slug from `doctl kubernetes options versions`
  version = "1.21.5-do.0"
 
  node_pool {
    name       = "default-pool"
    size       = "s-1vcpu-2gb"
    node_count = 2
  }
}
 
resource "digitalocean_kubernetes_node_pool" "microservices" {
  cluster_id = digitalocean_kubernetes_cluster.jaranguda-sg-prod.id
 
  name       = "microservices"
  size       = "s-1vcpu-2gb"
  node_count = 2
  tags       = ["backend"]
 
  labels = {
    service  = "backend"
  }
 
}
 
resource "digitalocean_loadbalancer" "public-lb" {
  name   = "public-lb"
  region = "sgp1"
  size = "lb-small"
  algorithm = "round_robin"
 
  forwarding_rule {
    entry_port     = 80
    entry_protocol = "http"
 
    target_port     = 80
    target_protocol = "http"
  }
 
}

Dari script diatas akan kita buat cluster kubernetes dengan nama jaranguda-sg-prod, di region Singapore, dengan 2 node pool (default-pool dan microservices), dan 1 Load Balancer.
Biasa saya menggunakan node berbeda untuk berbagai jenis services, contoh

PoolKegunaan
microservicesUntuk aplikasi microservice
jobsUntuk jobs/cronjob
debugsUntuk debugging/troubleshooting
frontendUntuk frontend

3. Download Config Kubernetes

Cara ini akan mendownload config kubernetes dan menyimpannya kedalam file $HOME/.kube/configdigitalocean download kubernetes config

doctl kubernetes cluster kubeconfig save CLUSTERNAME
# contoh
doctl kubernetes cluster kubeconfig save jaranguda-sg-prod

4. Test Deployment Kubernetes

Buat file YAML sederhana, nginx.yaml, untuk mengetes cluster yang baru dibuat

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent

deploy dengan kubectl

kubectl apply -f nginx.yaml 
# output
pod/nginx created

cek informasi pod yang baru di deploy

kubectl describe pod/nginx

akses shell pod nginx

kubectl exec --tty --stdin pod/nginx -- sh

docker exec pod nginx

Akses POD dengan Public IP/Load Balancer

Ubah nginx.yaml menjadi

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-services
  labels:
    service: nginx-services
spec:
  type: LoadBalancer
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80

re-deploy nginx.yaml

kubectl apply -f nginx.yaml

Cek services yang baru dibuat

kubectl get pods,services
# output
NAME        READY   STATUS    RESTARTS   AGE
pod/nginx   1/1     Running   0          7m41s
 
NAME                     TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)        AGE
service/kubernetes       ClusterIP      10.245.0.1       <none>         443/TCP        67m
service/nginx-services   LoadBalancer   10.245.212.106   167.99.31.xx   80:30565/TCP   8m5s

dibrowser buka yang EXTERNAL-IP di TYPE LoadBalancer

nginx kubernetes via public ip

Tulisan menarik lainnya

  • Berkenalan dengan Kubernetes di Linode

    Kubernetes di Linode masih dalam tahap beta, dan juga gratis untuk digunakan. Untuk mencoba kubernetes…

  • Monitoring Bandwith di Linux dengan iftop

    Salah satu bandwith monitoring di Linux yang bisa diandalkan adalah iftop. Cara instalasinya sangat mudah,…

  • Monitoring Bandwidth di Linux dengan NTOP

    Bingung cara mengetahui penggunaan bandwidth anda setiap hari, minggu, bulan atau tahun? Di Linux kita…

  • Monitoring Bandwidth di Debian dengan darkstat

    Sebagai admin server, memonitoring penggunaan bandwidth sangat penting, di Debian ada banyak aplikasi yang bisa…

Filed Under: dll

Reader Interactions

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Primary Sidebar

Pencarian

Tanya Jawab tentang DevOps SRE CPE, gabung di https://t.me/devopsindonesia

Terbaru

  • Cara Menonaktifkan Pager di macOS
  • Cara Mengupdate Nama Apple silicon-as-a-Service Scaleway
  • Cara Force Delete Namespace di Kubernetes
  • Install PHP MariaDB di Mac Monterey
  • MacOS Minta Install Git

Komentar

  • Ari on Cara Mematikan SSID Molecool Balifiber
  • kiki anarki on Mengambil Data dari Situs BPJS Ketenagakerjaan dengan PHP cURL
  • musgan on Password Router Huawei HG8245H5 Indihome
  • ghabily on Mengambil Informasi Router Alcatel Lucent G-241W-A dengan PHP
  • nea on Mencari urutan angka yang hilang di PHP

Tulisan Populer

  • Password Router Huawei HG8245H5 Indihome 1.1m views
  • Password Terbaru ZTE F609 Indihome 784k views
  • Password Superadmin Huawei HG8245A 314.2k views
  • Cara Setting Manual Modem GPON ZTE F609 Indihome 272.2k views
  • Cara Setting Wireless ZTE F609 Indihome 256.1k views
  • Mengaktifkan Port LAN di Huawei HG8245 Indihome 169.1k views
  • Akses UseeTV Indihome via Wireless ZTE F609 156.5k views
  • Kemana Menghilangnya Saldo BCA 50 ribu 150.3k views
  • Cara Reset Password ZTE F609 Indihome 147.2k views
  • Cara Setting DHCP Server Modem/Router ZTE F609 112.9k views

Kategori

  • Delphi
  • dll
  • Gambas
  • Internet
  • Java
  • Lazarus
  • Linux
  • PHP
  • Review
  • Teknologi

Sponsor

kadal.id
carakami.com
kuotabisa.com
Untuk jadi sponsor, hubungi kita lewat halaman sponsor
© 2021. Jaranguda
  • Linux
  • PHP
  • Internet
  • Teknologi
  • Delphi
  • Gambas
  • Java