Migrasi Metabase dari EBS ke Kubernetes

Setelah sukses mencoba Kubernetes di Binar Academy untuk semua service di aplikasi, kerjaan selanjutnya adalah memigrasikan service-service lain. Salah satunya adalah Metabase. Metabase di Binar Academy sebelumnya masih menggunakan AWS EBS (Elastic Beanstalk).

Bagaimana saya memigrasikan Metabase dari EBS ke K8S?

Berikut tahap yang saya lakukan.

  1. Hentikan layanan metabase di EBS.
  2. Catat credential database dari RBS (rds url, username, password, db_name)
  3. Buat YML K8s untuk Metabase.
    YML ini saya temukan di github zenyui | https://github.com/zenyui/metabase-gke. Thanks bro. Saya memodifikasi sesuai kebutuhan saya, K8s with kops on AWS.
  4. Lakukan deployment
    kubectl apply -f recipes/p-metabase.yml
  5. Atur domain ELB ke domain yang diinginkan pada dashboard (saya menggunakan cloudflare)
  6. Lakukan konfigurasi ulang Metabase.
  7. Hapus service Metabase dari AWS EBS.

Berikut YML Metabase:


# Deploy the pods
apiVersion: apps/v1
kind: Deployment
metadata:
name: metabase
namespace: default
labels:
app: metabase
env: production
spec:
selector:
matchLabels:
app: metabase
replicas: 1
template:
metadata:
labels:
app: metabase
env: production
spec:
containers:
– name: metabase
image: metabase/metabase
ports:
– containerPort: 3000
name: metabase
env:
– name: MB_DB_USER
valueFrom:
secretKeyRef:
name: metabase-prod
key: MB_DB_USER
– name: MB_DB_PASS
valueFrom:
secretKeyRef:
name: metabase-prod
key: MB_DB_PASS
– name: MB_DB_HOST
valueFrom:
secretKeyRef:
name: metabase-prod
key: MB_DB_HOST
– name: MB_DB_DBNAME
valueFrom:
secretKeyRef:
name: metabase-prod
key: MB_DB_DBNAME
– name: MB_DB_TYPE
value: "postgres"
– name: MB_DB_PORT
value: "5432"
apiVersion: v1
kind: Service
metadata:
name: metabase-service
namespace: default
labels:
app: metabase
env: production
spec:
type: NodePort
selector:
app: p-metabase
ports:
– port: 3000
protocol: TCP

view raw

metabase.yml

hosted with ❤ by GitHub

Semoga membantu.
Estu~

Implementasi Ingress, ELB dan SSL (Bagian 6)

Membaca dari tulisan ini https://matthewpalmer.net/kubernetes-app-developer/articles/kubernetes-ingress-guide-nginx-example.html untuk mengetahui perbedaan NodePort, LoadBalancer dan Ingress.

Apa itu Ingress?

Di Kubernetes, Ingress adalah objek yang memungkinkan akses ke layanan Kubernetes dari luar cluster Kubernetes. Konfigurasi ini diatur dengan membuat kumpulan peraturan (rules) yang menentukan koneksi masuk mana yang boleh menjangkau layanan apa.

Konfigurasi ini memungkinkan untuk menggabungkan aturan perutean menjadi satu pintu. Misalnya, untuk mengatur alamat example.com/api/v1/ ke layanan api-v1, dan mengatur alamat example.com/api/v2/ ke layanan api-v2. Dengan Ingress, kita dapat mengatur ini tanpa membuat banyak LoadBalancer atau mengekspos setiap layanan di Node. Karena kenaikan jumlah loadbalancer artinya menaikan biaya bulanan.

NGINX Ingress hanya merupakan salah satu implementasi Ingress Controller menggunakan NGINX. Selain NGINX, bisa juga menggunakan Traefik dan lainnya.

ELB (Elastic Load Balancing)

ELB di Kops AWS digunakan sebagai domain akhir yang digunakan user untuk mengakses service. Bentuknya berupa kombinasi acak angka dan huruf seperti berikut aa788cc64fc9911e7b8820e801320750-1559002290.ap-southeast-1.elb.amazonaws.com.

Lanjutkan membaca “Implementasi Ingress, ELB dan SSL (Bagian 6)”

Deploy Aplikasi NodeJS di Kubernetes KOPS AWS (Bagian 5)

Sudah install-install, dilanjut mendeploy aplikasi sederhana di K8s. Panduan ini saya sadur dari tautan github ini. Pilih bagian 6 Kops. Pada bagian ini saya berasumsi docker, kubectl, kops sudah terpasang. Cluster k8s sudah dibuat. Dashboard k8s sudah bisa diakses.

image from https://github.com/nathanpeck/nodejs-aws-workshop/tree/master/6%20-%20Kubernetes%20(kops)

Step Ujicoba

Clone Repo

saya membuat garpu dari repo https://github.com/nathanpeck/nodejs-aws-workshop dan menyesuakan sedikit dengan kebutuhan saya.

git clone https://github.com/tuanpembual/nodejs-aws-workshop.git
cd nodejs-aws-workshop/cd 6\ -\ Kubernetes\ \(kops\)

Konsep

Konsepnya adalah ada dua aplikasi nodejs (locations dan characters) yang jalan di port 8081. Kemudian akan dimapping oleh nginx sebagai load balancer. Konfigurasi minimalnya akan seperti ini:

location /api/locations {
  proxy_pass http://locations-service:8081;
}
location /api/characters {
  proxy_pass http://characters-service:8081;
}

Selanjutnya kita akan membangun image dari 2 service tadi (locations dan characters) plus nginx. Kemudian image yang sudah dibangun akan kita unggah ke docker registry (Docker Hub). Selanjutnya kita akan memasang dua aplikasi itu ke cluster k8s. Dilanjutkan dengan mengekpos dua aplikasi itu sehingga bisa diakses publik. Lanjutkan membaca “Deploy Aplikasi NodeJS di Kubernetes KOPS AWS (Bagian 5)”

Merunut Tahun 2018

Sudah dipenghujung tahun 2018, sedikit mengulas balik. Kuucapkan syukur kepada Tuhan untuk semua perjalanan, ke pulau keberapa entah. Awal tahun 2018 merupakan fase lambat menurutku. Tak banyak yang aku lakukan. Masih banyak catatan yang lupa. Beberapa badai pikiran. Ku hampir limbung. Dan buku “Budak” itu masih akan menjadi mimpi yang akan ku tempuh. Ku mulai;

Agustus 2018

  • openSUSE Asia Summit 2018 digelar di Taiwan, ikut nimbrung sebagai pembicara.
  • Mengundurkan diri dari Peentar sebagai DevOps Engineer
  • Mengundurkan diri dari DevOps Master dan
  • Mencoba menjadi Talent Acquisition di Binar Career Hub

September 2018

Terbang ke Ambon, bersama Binar Terangi Bangsa dan Telkomsel. Binar Academy Batch Ambon dimulai. Dan menyelakan diri menapak tilas Pulau Buru (yang catatannya masih dalam draft kepalaku). Lanjutkan membaca “Merunut Tahun 2018”

Memasang Kops dan Membuat Kubernetes Cluster (Bagian 4)

Sudah sampe bagian 4 aja ini. Silahkan membaca bagian satu, dua, tiga dulu.

Di bagian ini saya akan menuliskan urutan pemasangan tools, pembuatan cluster k8s, dan pemasangan dashboard k8s. Di bagian ini belum akan membahas bagaimana menjalankan aplikasi di Kubernetes.

Tahap-tahap instalasi dibawah ini saya ambil dari dokumentasi kops di github:

0. https://github.com/kubernetes/kops/blob/master/docs/aws.md

Pengaturan Environment

Domain=kube.example.com
bucket_name=kube-state-store
KOPS_CLUSTER_NAME=kube.example.com
KOPS_STATE_STORE=s3://${bucket_name}

Menyiapkan Lingkungan Kerja

Perintah dibawah ini dilakukan di lapto/PC yang digunakan untuk memanajemen cluster k8s. Dalam kasus saya adalah Thinkpad x230 dengan OS openSUSE Leap 15.1.

  1. Lakukan installasi AWS CLI. Bisa mengambil dari dokumentasi aws dan lakukan konfigurasi dasar.
  2. Buat IAM khusus kops, bisa mengacu ke panduan diatas
  3. Install kops dan kubectl
curl -LO https://github.com/kubernetes/kops/releases/download/$(curl -s https://api.github.com/repos/kubernetes/kops/releases/latest | grep tag_name | cut -d '"' -f 4)/kops-linux-amd64
chmod +x kops-linux-amd64
sudo mv kops-linux-amd64 /usr/local/bin/kops
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
  • Atur router 53.
  • ID=$(uuidgen) && aws route53 create-hosted-zone --name kube.example.com --caller-reference $ID | jq .DelegationSet.NameServers
    
  • Lakukan update dns ke CloudFlare dari hasil output sebelumnya (dalam kasus saya).
  • Atur env
  • export bucket_name=kube-state-store
    export KOPS_CLUSTER_NAME=kube.example.com
    export KOPS_STATE_STORE=s3://${bucket_name}
    
  • Silahkan buat bucket di s3 dengan nama kube-state-store, gunakan webconsole AWS saja.
  • Lanjutkan membaca “Memasang Kops dan Membuat Kubernetes Cluster (Bagian 4)”

    Implementasi Docker, Kubernetes, Kops di Binar Academy (Bagian 3)

    Setelah bagian 1 dan bagian 2. Mari mbahas ke yang lebih serius.

    Kubernetes

    Kubernetes (selanjutnya ditulis k8s) adalah salah satu orchestration untuk docker. Sebelum ke k8s saya sempat menyicip docker swarm dengan dua mesin. Namun proses ini menurut saya kurang pas untuk implementasi di Binar Academy. Kubernetes merupakan tool bersumber terbuka yang awalnya didesain oleh Google dan kemudian dipelihara oleh Cloud Native Computing Foundation.

    Saya pertama belajar menggunakan minikube dengan 2 mesin di Digital Ocean. Tantangan pertama saya gagal paham menggunakan k8s dashboard. Kalo ingat masa itu adalah lucu sekali. Dan masih bingung dengan istilah: pods, deployment. Kemudian juga gagal dalam konfigurasi network menggunakan cinder. Padahal runut mengikuti panduan resmi. Entahlah, mungkin ada langkah yang luput dan sebagainya.

    K8s Cluster

    Ilustrasi dari https://kubernetes.io/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro/

    Minikube

    Silahkan install minikube dan ikuti panduan hello-minikube.

    Tautan berikut juga layak untuk dibaca:

    Setelah membaca tautan diatas diharapkan sedikit paham apa itu k8s, bagaimana cara bekerjanya. Lanjutkan membaca “Implementasi Docker, Kubernetes, Kops di Binar Academy (Bagian 3)”

    Implementasi Docker, Kubernetes, Kops di Binar Academy (Bagian 2)

    Melanjutkan bagian dua. Sillahkan membaca bagian 1 disini. Ini sepertinya jadi tulisan yang makin ngelantur.

    Docker Compose

    Docker Compose adalah tool yang akan membaca sekumpulan konfigurasi untuk dapat menjalankan satu atau lebih container dengan lebih mudah. Dalam konfigurasinya juga meliputi proses docker build dan docker run. Pada opsi build, compose akan menjalankan build dengan memanggil file Dockefile yang tersedia. Untuk opsi alamat image, compose akan mengunduh docker images sesuai alamat yang disediakan. Bisa dari docker hub atau juga dari private registry yang membutuhkan krendensial.

    Install compose:

    Docker compose membutuhkan beberapa pustaka python untuk menjalankannya. Untuk memasang di openSUSE Leap 15.1 cukup menjalankan ini di konsole

    sudo zypper in docker-compose

    Untuk menjalankan docker-compose, dibuatlah sebuah file dengan format yml standar dengan nama file docker-compose.yml. Didalamnya berisi konfigurasi manual.

    Contoh konfigurasi bisa melihat contoh berikut

    tree
    .
    ├── docker-compose.yml
    ├── Dockerfile
    └── index.html
    0 directories, 3 files
    

    Isi docker-compose adalah sebagai berikut:

    version: '3'
    services:
    ## Using image from docker hub
      hello:
        image: tuanpembual/hello
        hostname: hello
        container_name: hello
        ports:
          - "80:8080"
    ## Using image from local
      hellov2:
        build: .
        hostname: hellov2
        container_name: hellov2
        ports:
          - "80:8081"
    

    Menjalankan Compose

    docker-compose up
    

    Perintah diatas dapat dijalankan jika file konfigurasi menggunakan nama standar semisal docker-compose.yml. Namun jika nama file berbeda, butuh mengatur path file seperti berikut:

    docker-compose -f p-website-docker-compose.yml
    

    Opsi docker-compose

    docker-compose start
    docker-compose up
    docker-compose ps -a
    docker-compose stop
    docker-compose down
    

    Ada banyak model penggunaan docker-compose. Model yang saya tulis adalah perintah yg saya gunakan sehar-hari.

    Docker Swarm

    Swarm adalah tool yang dapat membantu manajemen docker pada multiple host. Bahasa lainnya adalah orkestrasi (orchestration). Swarm sendiri merupakan tools native dari Docker. Tentang swarm sendiri dapat ditemukan di wiki docker dan swarm.

    Saya sempat beberapa minggu ngulik swarm, mencoba membuat cluster sederhana. Mencoba untuk mengimplementasikan di AWS, namun setelah mencoba beberapa kali, solusi ini belum mampu menjawab kebutuhan tim di Binar Academy.

    Bahan riset selanjutnya adalah bagian tiga, mencoba kubernetes atau k8s.
    Estu~

    Implementasi Docker, Kubernetes, Kops di Binar Academy (Bagian 1)

    Awal Cerita

    Kali ini saya akan cerita (iya cerita, bukan tutorial). Bagaimana saya kenalan dengan docker, apa saja yg saya lakukan, dan bagaimana saya meracuni lingkungan pengembangan melalui docker. Saya sendiri masih merasa kesulitan untuk mengajarkan docker kepada orang lain. Bingung harus memulai dari mana.

    Proses belajar docker ini menghantarkan saya dalam proses yang cukup lama. Saya kembali lagi mendalami docker Maret 2018. Dalam kurun waktu 6 bulan terakhir ini merupakan proses yang cukup intens. Peluh dan spaneng yang dikeluarkan menjadi catatan berarti buat saya. Mulai dari membeli buku (beberapa judul yang akhirnya selesai saya baca), course online yang belum jadi saya mulai, membaca dokumentasi satu ke dokumentasi lainnya. Hingga menjadi bunga tidur dalam minggu-minggu penuh tekanan. Namun proses tidak pernah mengkhianati hasil.

    Daftar Buku

    Saya kebetulan melihat share facebook dari pak Utian Ayuba, promo beli 15 buku 25USD Mei 2018 silam. Humble Book Bundle Dev Ops by Packt. Ya sudah saya beli. Kata kunci yang saya cari adalah: docker, swarm, kubernetes. Berikut daftar buku ditulis berdasarkan saran urutan membaca:

    • Docker Cookbook By Neependra Khare, June 2015
    • Mastering Docker By Scott Gallagher, December 2015
    • Continuous Delivery with Docker and Jenkins By RafaÅ‚ Leszko August 2017
    • Deployment with Docker By Srdjan Grubor, November 2017
    • Kubernetes Cookbook By Hideto Saito, Hui-Chuan Chloe Lee, Ke-Jou Carol Hsu, June 2016
    • Mastering Kubernetes By Gigi Sayfan, May 2017
    • Getting Started with Kubernetes – Second Edition By Jonathan Baier, May 2017
    • DevOps with Kubernetes By Hideto Saito, Hui-Chuan Chloe Lee, Cheng-Yang Wu, October 2017

    Kemudian satu buku tambahan atas rekomendasi mas Agung Setiyawan

    • Docker for Rails Developers by Rob Isenberg, September 2018

    Dan buku terakhir yang belum selesai saya baca,

    • Kubernetes on AWS by Ed Robinson, November 2018

    Lanjutkan membaca “Implementasi Docker, Kubernetes, Kops di Binar Academy (Bagian 1)”

    Memperbaharui BIOS Thinkpad x230 di GNU/Linux

    Seringnya untuk memperbaharui BIOS Laptop maupun komputer mengharuskan menggunakan sistem operasi Windows. Namun saya sudah tidak menggunakan windows di Laptop kerjaan. Terus bagaimana?

    Jadi sebenarnya dari Lenovo sendiri sudah menyediakan ISO BIOS yang bisa dipakai untuk memperbaharuinya. Cukup bakar file ISO ke CD. Tapi sayang, saya sudah lama sekali tidak punya laptop yang menyediakan CD-ROOM. Mari ngulik sedikit.

    Langkahnya:

    1. Unduh ISO BIOS, sesuaikan dengan versi laptop. Saya mengunduh untuk Thinkpad x230 dari website lenovo ditautan berikut. Berkas disimpan dengan nama g2uj30us.iso
    2. Pasang tools genisoimage sesuai distro, saya menggunakan Leap 15.1.
    3. Konversi file iso tadi menjadi format img.
      $ geteltorito -o bios.img g2uj30us.iso
    4. Salin img hasil konversi ke flashdisk dengan dd
      $ sudo dd if=bios.img of=/dev/sdb bs=1M
      $ sudo sync
    5. Lanjut dengan boot dari flashdisk. Pastikan laptop tersambung dengan charger.
    6. Lakukan proses upgrade BIOS.
    7. Setelah selesai, lakukan reboot.
    8. Masuk ke BIOS untuk memastikan versi BIOS sudah terbaharui

    Semoga g error.
    Estu~

    Cerita X260, X240, X230 2K, X230 aja

    Update 18 Maret 2020: Akhirnya saya punya Thinkpad X330 (X230 dengan layar FHD)

    Estu

    Ini cuma lagi pengen cerita. Setelah sebelumnya gagal menikmati x230 kastem dari lcdfans (iya gagal dan menguap).

    Pertama kali melihat ThinkPad adalah seri 12inci, X2xx saya lupa versi lengkapnya. Pak stwn yang saat itu presentasi di depan saya saat Blankonf 2010 di Semarang. Ini lo kerennya ThinkPad. Sangat membekas di ingatan saya.

    ThinkPad X240

    Saya pertama kali memiliki ThinkPad di tahun 2016 silam, saat membutuhkan mesin untuk presentasi di FUDCon APAC Kamboja. Membeli dari Pak Haris, X240 standar, i5, 8GB, SSD 128GB bawaan, kemudian menambah 512 SSD. Kisaran 7ribu. SSD nya yang bikin mahal.

    Selepas mengundurkan diri dari tim kolam renang, X240 ini yang menemani saya mengetik, setelah sebelumnya berkutat dengan MBP Retina 2016.

    ThinkPad X260

    X240 ikut menemani ngetik di kantor Depok dan kantor Jogja. Selang 4 bulan, Mei 2017 terbelilah X260 oleh kantor Jogja. Saya membeli ini lewat bukalapak dari toko di suatu daerah di Bandung. Speknya cukup asik. FHD, i7 6600U, 16GB, 512GB SSD, dual baterai diharga 16ribuan.

    Lanjutkan membaca “Cerita X260, X240, X230 2K, X230 aja”