Namespace dibuat untuk digunakan di environment dengan banyak pengguna yang berada di dalam beberapa tim ataupun proyek. Untuk sebuah cluster dengan beberapa pengguna saja, kamu tidak harus membuat ataupun memikirkan tentang namespace. Mulai gunakan namespace saat kamu membutuhkan fitur dari namespace itu sendiri.
Membuat Namespace Baru
Buat satu file YML dengan nama namespace.yml.
apiVersion: v1kind: Namespace
metadata:
name: medium-demo
labels:
name : development
Lalu, apply file di atas ke dalam cluster kita.
kubectl apply -f namespace.ymlPastikan bahwa namespace sudah aktif.
amka@Abduls-MacBook-Pro:~$ kubectl get namespaceNAME STATUS AGEdefault Active 17d
medium-demo Active 20sMembuat PersistentVolumeClaims untuk menyimpan data MySQL
Selanjutnya, kita perlu membuat 1 PVC untuk menyimpan data di dalam direktori /var/lib/mysql.
PVC untuk MySQL
Buat satu file YML dengan nama mysql-vc.yml dengan isinya.
kind: PersistentVolumeClaimapiVersion: v1
metadata:
name: mysql-volumeclaim
namespace: medium-demo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
Lalu, apply file mysql-vc.yml ke dalam cluster kita.
amka@Abduls-MacBook-Pro:~$ kubectl apply -f mysql-vc.ymlpersistentvolumeclaim/mysql-volumeclaim createdPastikan PVC sudah berhasil dibuat dengan namespace.
- -n adalah singkatan dari namespace, karena semua services MySQL di-deploy dalam namespace medium-demo.
Kita perlu membuat 2 Secret, Karena MySQL memerlukan root password dan user
Secret MySQL untuk Root Password
secret-mysql-password.ymlapiVersion: v1kind: Secret
metadata:
name: mysql-root-password
namespace: medium-demo
type: Opaque
stringData:
password: KuB3D3m0db
Secret MySQL untuk User
secret-mysql-user.ymlapiVersion: v1kind: Secret
metadata:
name: mysql-user-creds
namespace: medium-demo
type: Opaque
stringData:
MYSQL_USER: user
MYSQL_ROOT_PASSWORD: KuB3D3m0db
MYSQL_PASSWORD: mediumdemomysql
Apply file Secret.
kubectl apply -f secret-mysql-password.ymlkubectl apply -f secret-mysql-user.ymlPastikan Secret yang sudah dibuat masuk ke dalam namespace medium-demo.
amka@Abduls-MacBook-Pro:~$ kubectl get secret -n medium-demoNAME TYPE DATA AGE
mysql-root-password Opaque 1 2m13s
mysql-user-creds Opaque 3 2m45sMembuat ConfigMap untuk Menyimpan Konfigurasi MySQL
Kita perlu membuat direktori dengan nama mysql-config untuk konfigurasi MySQL yang akan di-mount ke direktori /etc/mysql/conf.d.
letak file
Setelah masuk ke dalam direktori, tahap selanjutnya adalah pembuatan file konfigurasi MySQL dengan nama max_allowed_packet.cnf.
kubectl apply -f namespace.yml0Membuat ConfigMap
Siapkan mysql-conf.yml.
Apply file ConfigMap.
kubectl apply -f namespace.yml2Pastikan ConfigMap sudah masuk ke dalam namespace.
kubectl apply -f namespace.yml3Membuat Deployment MySQLSetelah PVC, Secret, dan ConfigMap, kita siap untuk menggunakan file YML berikut.
Pertama, siapkan mysql-cluster.yml.
Sebagai referensi, berikut adalah isi file mysql-cluster.yml yang menggunakan private registry.
kubectl apply -f namespace.yml4Untuk yang tidak menggunakan private registry, bisa menggunakan isi di bawah ini.
kubectl apply -f namespace.yml5Beberapa komentar tentang YAML,
- Menggunakan MySQL versi 5.7 untuk menyamakan dengan versi MySQL di CloudSQL,
- Menggunakan variabel untuk mengambil root password yang ada pada Secret,
- Jika menggunakan private registry, tambahkan,
imagePullSecrets:
— name: gcr-registry-json
Selanjutnya, kita dapat memeriksa log dari pod MySQL untuk menentukan apakah layanan sudah berjalan.
Setelah MySQL aktif dan berjalan, kita perlu membuat endpoint publik untuk mengakses MySQL.
Dimulai dengan membuat 2 file YML dengan nama mysql-service-lb.yml dan mysql-service.yml.
kubectl apply -f namespace.yml8File mysql-service.yml untuk mendapatkan ClusterIP local dari MySQL.
kubectl apply -f namespace.yml9Apply file mysql-service-lb.yml dan mysql-service.yml untuk membuat Service dan pastikan Service tersebut sudah ter-deploy di dalam namespace medium-demo.
amka@Abduls-MacBook-Pro:~$ kubectl get namespaceNAME STATUS AGEdefault Active 17d
medium-demo Active 20s0
Lalu, gunakan ClusterIP untuk mengakses MySQL melalui CLI.
amka@Abduls-MacBook-Pro:~$ kubectl get namespaceNAME STATUS AGEdefault Active 17d
medium-demo Active 20s1
Setelah mencoba mengakses melalui CLI, kita dapat pula menggunakan endpoint publik EXTERNAL-IP untuk mengakses MySQL dari database client.
Itu dia! Setelah mengikuti tahapan tersebut, kita memiliki MySQL yang berjalan di Kubernetes. Jika salah satu node gagal, pod akan secara otomatis dipindahtugaskan ke node yang sehat.