[{"content":"Menjalankan model lokal openai/gpt-oss-20b dengan NVIDIA L4 GPU, model ini sebenarnya dapat dijalankan pada GPU konsumer seri RTX dengan ~16GB VRAM. Saya membaginya menjadi dua bagian: menjalankan secara manual dan menggunakan kontainer dengan sistem operasi Ubuntu 24.04 LTS.\nPersiapan Instal driver dan dependensi\nwget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb sudo dpkg -i cuda-keyring_1.1-1_all.deb \u0026amp;\u0026amp; rm -rf cuda-keyring_1.1-1_all.deb sudo apt update \u0026amp;\u0026amp; sudo apt install -y \\ linux-headers-$(uname -r) \\ libnvidia-compute-580 nvidia-dkms-580-open \\ datacenter-gpu-manager-4-cuda-all \\ datacenter-gpu-manager-exporter \\ cuda-toolkit nvtop build-essential Kita memerlukan reboot host untuk menerapkan driver GPU.\nValidasi Driver nvidia-smi nvidia-smi -L Menjalankan vLLM Secara Manual Instal git LFS dan kloning repositori openai/gpt-oss-20b\ncurl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash apt install git-lfs \u0026amp;\u0026amp; git lfs install git clone https://huggingface.co/openai/gpt-oss-20b /models/gpt-oss-20b Instal UV untuk lingkungan virtual Python\ncurl -LsSf https://astral.sh/uv/install.sh | sh cd /models \u0026amp;\u0026amp; uv venv source .venv/bin/activate uv pip install vllm==0.10.2 --torch-backend=auto Mulai menyajikan model dengan vllm menggunakan perintah berikut\nexport VLLM_LOGGING_LEVEL=ERROR python3 -m vllm.entrypoints.openai.api_server \\ --host 0.0.0.0 --port 8000 \\ --api-key $API_TOKEN \\ --served-model-name openai/gpt-oss-20b \\ --model /models/gpt-oss-20b \\ --gpu-memory-utilization 0.90 \\ --chat-template-content-format openai \\ --tool-call-parser openai \\ --enable-auto-tool-choice \\ --trust-remote-code \\ --async-scheduling \\ --disable-log-requests Anda dapat memantau pemanfaatan GPU secara real-time menggunakan perintah nvtop.\nSaat model berhasil dimuat, pesan “application startup complete” akan muncul, dan Anda dapat menggunakan model tersebut. Menjalankan vLLM dengan Kontainer Instal Nvidia Container Toolkit\ncurl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo \\ gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \\ \u0026amp;\u0026amp; curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \\ sed \u0026#39;s#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g\u0026#39; | \\ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.18.0-1 sudo apt update \u0026amp;\u0026amp; apt-get install -y \\ nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \\ nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \\ libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \\ libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION} Instal Docker dan atur Nvidia Runtime\ncurl -fsSL https://get.docker.com | bash nvidia-ctk runtime configure --runtime=docker systemctl restart docker.service docker run --rm --gpus all nvidia/cuda:12.3.2-base-ubuntu22.04 nvidia-smi Jika GPU terdeteksi di tingkat kontainer, lanjutkan ke langkah berikutnya.\nCreate docker-compose.yaml file configuration\nservices: vllm: image: vllm/vllm-openai:v0.12.0 container_name: vllm-gpt-oss-20b restart: unless-stopped ports: - \u0026#34;8000:8000\u0026#34; environment: API_TOKEN: ${API_TOKEN} VLLM_LOGGING_LEVEL: ERROR volumes: - /models:/models command: \u0026gt; --host 0.0.0.0 --port 8000 --api-key ${API_TOKEN} --served-model-name openai/gpt-oss-20b --model /models/gpt-oss-20b --gpu-memory-utilization 0.90 --chat-template-content-format openai --tool-call-parser openai --enable-auto-tool-choice --trust-remote-code --async-scheduling --disable-log-requests deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu] ipc: host ipc=host membuat kontainer Anda berbagi ruang memori dengan mesin host, yang penting untuk menjalankan model besar secara efisien.\nJalankan dengan perintah docker compose up -d lalu pantau log dengan docker compose logs -f. Menggunakan Model Periksa model dengan endpoint GET API /v1/models seperti contoh berikut\ncurl -X GET http://127.0.0.1:8000/v1/models \\ -H \u0026#34;Content-Type: application/json\u0026#34; \\ -H \u0026#34;Authorization: Bearer $API_TOKEN\u0026#34; | jq -r Kemudian lakukan tes prompt dengan POST ke endpoint API /v1/chat/completions seperti contoh berikut\ncurl -X POST http://127.0.0.1:8000/v1/chat/completions \\ -H \u0026#34;Content-Type: application/json\u0026#34; \\ -H \u0026#34;Authorization: Bearer $API_TOKEN\u0026#34; \\ -d \u0026#39;{ \u0026#34;model\u0026#34;: \u0026#34;openai/gpt-oss-20b\u0026#34;, \u0026#34;messages\u0026#34;: [ { \u0026#34;role\u0026#34;: \u0026#34;user\u0026#34;, \u0026#34;content\u0026#34;: \u0026#34;what is AI ?\u0026#34; } ], \u0026#34;temperature\u0026#34;: 0.3, \u0026#34;max_tokens\u0026#34;: 256, \u0026#34;stream\u0026#34;: false, \u0026#34;reasoning_effort\u0026#34;: \u0026#34;high\u0026#34; }\u0026#39; | jq -r Benchmark Terima kasih kepada Yoosu-L atas alat benchmark LLM yang mudah digunakan.\ncurl -O https://github.com/Yoosu-L/llmapibenchmark/releases/download/v1.0.7/llmapibenchmark_linux_amd64.tar.gz tar xzvf llmapibenchmark_linux_amd64.tar.gz Kami akan menguji dengan hingga 1.024 concurrency dengan menjalankan perintah berikut:\n./llmapibenchmark_linux_amd64 \\ --base-url http://127.0.0.1:8000/v1 \\ --api-key $API_TOKEN \\ --model openai/gpt-oss-20b \\ --concurrency 1,2,4,8,16,32,64,128,256,512,1024 \\ --max-tokens 512 \\ --num-words 512 \\ --prompt \u0026#34;what is AI ?\u0026#34; \\ --format yaml | tee benchmark-results-gpt-oss-20b-nvidia-l4.yaml Results: Setelah menguji openai/gpt-oss-20b di berbagai tingkat concurrency untuk memahami perilakunya saat beban meningkat. Seiring concurrency meningkat, model secara jelas menjadi lebih cepat dalam menghasilkan token secara keseluruhan, menunjukkan perilaku skalabilitas yang kuat. Throughput prompt juga meningkat dengan concurrency yang lebih tinggi, terutama di rentang menengah.\nMeskipun respons tercepat (min TTFT) tetap konsisten rendah, respons terlama (max TTFT) meningkat secara mencolok seiring concurrency tumbuh. Ini berarti sebagian besar permintaan masih dilayani dengan cepat, tetapi sebagian kecil mulai mengalami waktu tunggu lebih lama ketika sistem sangat terisi. Yang penting, semua permintaan berhasil, bahkan pada tingkat concurrency tertinggi.\nData benchmark dapat ditemukan di sini\nReferensi https://docs.nvidia.com/datacenter/tesla/driver-installation-guide/ubuntu.html https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html https://docs.vllm.ai/projects/recipes/en/latest/OpenAI/GPT-OSS.html https://cookbook.openai.com/articles/gpt-oss/run-vllm https://docs.astral.sh/uv/getting-started/installation https://docs.redhat.com/en/documentation/red_hat_ai_inference_server https://github.com/Yoosu-L/llmapibenchmark ","permalink":"http://vikipranata.is-a.dev/id/posts/vllm-gpt-oss-20b/","summary":"\u003cp\u003eMenjalankan model lokal \u003ca href=\"https://huggingface.co/openai/gpt-oss-20b\"\u003eopenai/gpt-oss-20b\u003c/a\u003e dengan \u003ccode\u003eNVIDIA L4 GPU\u003c/code\u003e, model ini sebenarnya dapat dijalankan pada GPU konsumer seri RTX dengan ~16GB VRAM. Saya membaginya menjadi dua bagian: menjalankan secara manual dan menggunakan kontainer dengan sistem operasi \u003ccode\u003eUbuntu 24.04 LTS\u003c/code\u003e.\u003c/p\u003e\n\u003ch2 id=\"persiapan\"\u003ePersiapan\u003c/h2\u003e\n\u003cp\u003eInstal driver dan dependensi\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo dpkg -i cuda-keyring_1.1-1_all.deb \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e rm -rf cuda-keyring_1.1-1_all.deb\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt update \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e sudo apt install -y \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e     linux-headers-\u003cspan class=\"k\"\u003e$(\u003c/span\u003euname -r\u003cspan class=\"k\"\u003e)\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e     libnvidia-compute-580 nvidia-dkms-580-open \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e     datacenter-gpu-manager-4-cuda-all \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e     datacenter-gpu-manager-exporter \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e     cuda-toolkit nvtop build-essential\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cblockquote\u003e\n\u003cp\u003eKita memerlukan reboot host untuk menerapkan driver GPU.\u003c/p\u003e","title":"Menjalankan Model LLM OpenAI Open Source dengan vLLM dan GPU NVIDIA L4"},{"content":"Persiapan Saya menggunakan tiga node VM untuk proyek ini dengan 8 Core, 8GB Memori, dan 80GB untuk penyimpanan container dengan sistem operasi Rocky Linux 9.6 menggunakan RKE2 v1.32.5+rke2r1 dan Cilium v1.17.3\nHostname Node vCPU Memori Storage PrivateNet Peran Node knode01master01 8 Core 8GB 80GB 172.16.0.211 Control-plane knode01master02 8 Core 8GB 80GB 172.16.0.212 Control-plane knode01master03 8 Core 8GB 80GB 172.16.0.213 Control-plane knode01worker01 8 Core 8GB 80GB 172.16.0.211 Worker knode01worker02 8 Core 8GB 80GB 172.16.0.212 Worker knode01worker03 8 Core 8GB 80GB 172.16.0.213 Worker Semua operasi menggunakan user root, harap berhati-hati saat menjalankan perintah!\nPada langkah ini, eksekusi dilakukan di semua node\nSetel hostname statis Siapkan environment\nNODE_01=knode01master01 NODE_02=knode01master02 NODE_03=knode01master03 NODE_04=knode01worker01 NODE_05=knode01worker02 NODE_06=knode01worker03 NODE_IP01=172.16.0.211 NODE_IP02=172.16.0.212 NODE_IP03=172.16.0.213 NODE_IP04=172.16.0.214 NODE_IP05=172.16.0.215 NODE_IP06=172.16.0.216 Kemudian tambahkan hostname statis di /etc/hosts untuk semua node.\ncat \u0026lt;\u0026lt;EOF \u0026gt;\u0026gt; /etc/hosts $NODE_IP01 $NODE_01 $NODE_IP02 $NODE_02 $NODE_IP03 $NODE_03 $NODE_IP04 $NODE_04 $NODE_IP05 $NODE_05 $NODE_IP06 $NODE_06 EOF Instalasi paket \u0026amp; dependensi dnf install -y epel-release dnf install bash-color-prompt bash-completion \\ nano htop iftop iotop net-tools dnsutils \\ wget curl jq traceroute mtr tcpdump nmap setroubleshoot policycoreutils Buat direktori konfigurasi\nmkdir -p /etc/rancher/rke2 Inisialisasi Cluster Pada langkah ini, eksekusi di semua node master\ncat \u0026lt;\u0026lt;EOF | tee /etc/rancher/rke2/config.yaml node-ip: $(hostname -I | awk \u0026#39;{print $1}\u0026#39;) write-kubeconfig-mode: \u0026#34;0600\u0026#34; tls-san: - \u0026#34;localhost\u0026#34; - \u0026#34;127.0.0.1\u0026#34; cluster-cidr: 10.42.0.0/16 service-cidr: 10.43.0.0/16 # Snapshot etcd setiap 6 jam etcd-snapshot-schedule-cron: \u0026#34; */6 * * *\u0026#34; # Simpan 56 snapshot etcd (setara 2 minggu dengan 6 snapshot per hari) etcd-snapshot-retention: 56 enable-servicelb: false disable-kube-proxy: true disable: - rke2-ingress cni: cilium selinux: true EOF Unduh RKE2 dari repository resmi curl -sfL https://get.rke2.io | \\ INSTALL_RKE2_CHANNEL=\u0026#34;v1.32.5+rke2r1\u0026#34; \\ RKE2_NODE_NAME=$(hostname -s) \\ INSTALL_RKE2_TYPE=\u0026#34;server\u0026#34; \\ sh - Konfigurasi Cilium Buat file helm values untuk cilium\ncat \u0026lt;\u0026lt;EOF | tee /var/lib/rancher/rke2/server/manifests/rke2-cilium-config.yaml apiVersion: helm.cattle.io/v1 kind: HelmChartConfig metadata: name: rke2-cilium namespace: kube-system spec: valuesContent: |- k8sServiceHost: 127.0.0.1 k8sServicePort: 6443 kubeProxyReplacement: true cni: chainingMode: portmap localRedirectPolicy: true bandwidthManager: enabled: true bbr: true l2announcements: enabled: true leaseDuration: 15s leaseRenewDeadline: 5s easeRetryPeriod: 3s bpf: hostLegacyRouting: false masquerade: true hubble: enabled: false ipam: mode: kubernetes nodeIPAM: enabled: true enableLBIPAM: true EOF Untuk saat ini, Hubble dinonaktifkan untuk menghemat resource.\nAktifkan Node Local DNS Cache NodeLocal DNS Cache dengan Cilium pada mode kube-proxy replacement\ncat \u0026lt;\u0026lt;EOF | tee /var/lib/rancher/rke2/server/manifests/rke2-coredns-config.yaml apiVersion: helm.cattle.io/v1 kind: HelmChartConfig metadata: name: rke2-coredns namespace: kube-system spec: valuesContent: |- nodelocal: enabled: true use_cilium_lrp: true EOF Jika semua persiapan sudah siap, mulai dan aktifkan service rke2-server agar berjalan saat boot.\nsystemctl enable --now rke2-server.service Debug/troubleshoot dengan journalctl -xefu rke2-server\nJoin node control-plane lainnya Ambil token join dari node master pertama di cat /var/lib/rancher/rke2/server/agent-token\ncat \u0026lt;\u0026lt;EOF | tee -a /etc/rancher/rke2/config.yaml node-ip: $(hostname -I | awk \u0026#39;{print $1}\u0026#39;) server: https://$NODE_IP01:9345 token: K10e6528a04f97734c36d94c9b70e699d5f1df3b254c69c2e91bfa896fa03b468c5::server:aae38fe9abdb13aacf5754e4ba40574c selinux: true EOF Kemudian aktifkan service rke2-server:\nsystemctl enable --now rke2-server.service Debug/troubleshoot dengan journalctl -xefu rke2-server\nJoin node worker Unduh RKE2 dari repository resmi\ncurl -sfL https://get.rke2.io | \\ INSTALL_RKE2_CHANNEL=\u0026#34;v1.32.5+rke2r1\u0026#34; \\ RKE2_NODE_NAME=$(hostname -s) \\ INSTALL_RKE2_TYPE=\u0026#34;agent\u0026#34; \\ sh - Ambil token join dari node master pertama di cat /var/lib/rancher/rke2/server/agent-token\ncat \u0026lt;\u0026lt;EOF | tee -a /etc/rancher/rke2/config.yaml node-ip: $(hostname -I | awk \u0026#39;{print $1}\u0026#39;) server: https://$NODE_IP01:9345 token: K10e6528a04f97734c36d94c9b70e699d5f1df3b254c69c2e91bfa896fa03b468c5::server:aae38fe9abdb13aacf5754e4ba40574c selinux: true EOF Kemudian aktifkan service rke2-agent:\nsystemctl enable --now rke2-agent.service Debug/troubleshoot dengan journalctl -xefu rke2-agent\nAkses cluster dan instalasi utilitas Buat direktori .kube di home dan copy/link kredensial cluster, juga set endpoint containerd di /etc/crictl.yaml.\nmkdir ~/.kube ln -s /etc/rancher/rke2/rke2.yaml ~/.kube/config ln -s /var/lib/rancher/rke2/agent/etc/crictl.yaml /etc/crictl.yaml Instalasi kubectl, crictl, helm, dan cilium binary.\ninstall /var/lib/rancher/rke2/bin/kubectl /usr/bin/kubectl install /var/lib/rancher/rke2/bin/crictl /usr/bin/crictl HELM_VER=$(curl -sL https://get.helm.sh/helm-latest-version) HELM_FILE=helm-$HELM_VER-linux-amd64.tar.gz curl -sSL https://get.helm.sh/helm-$HELM_VER-linux-amd64.tar.gz -o $HELM_FILE; tar -zxf $HELM_FILE install linux-amd64/helm /usr/bin/helm CILIUM_CLI_VER=$(curl -sL https://raw.githubusercontent.com/cilium/cilium-cli/refs/heads/main/stable.txt) curl -sSL https://github.com/cilium/cilium-cli/releases/download/$CILIUM_CLI_VER/cilium-linux-amd64.tar.gz -O; tar -zxf cilium-linux-amd64.tar.gz install cilium /usr/bin/cilium Aktifkan bash completion untuk memudahkan administrasi.\nfor i in kubectl crictl helm cilium; do $i completion bash | tee /etc/bash_completion.d/$i \u0026gt; /dev/null; done source /usr/share/bash-completion/bash_completion Semua node sudah join ke cluster, cek dengan kubectl get node,pod -A -o wide. Status Cilium CNI. Referensi https://docs.rke2.io/reference/server_config https://docs.rke2.io/reference/linux_agent_config https://docs.cilium.io/en/stable/installation/cni-chaining-portmap https://docs.cilium.io/en/stable/network/l2-announcements/ https://docs.cilium.io/en/stable/network/node-ipam/ https://docs.cilium.io/en/stable/network/lb-ipam/ https://docs.cilium.io/en/stable/network/kubernetes/bandwidth-manager/ https://docs.cilium.io/en/stable/network/kubernetes/local-redirect-policy/#node-local-dns-cache https://cilium.io/blog/2020/06/22/cilium-18/#kubeproxy-removal ","permalink":"http://vikipranata.is-a.dev/id/posts/rke2-with-cillium-cni/","summary":"\u003ch2 id=\"persiapan\"\u003e\u003cem\u003ePersiapan\u003c/em\u003e\u003c/h2\u003e\n\u003cp\u003eSaya menggunakan tiga node VM untuk proyek ini dengan 8 Core, 8GB Memori, dan 80GB untuk penyimpanan container dengan sistem operasi \u003cem\u003eRocky Linux 9.6\u003c/em\u003e menggunakan RKE2 v1.32.5+rke2r1 dan Cilium v1.17.3\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e\u003cem\u003eHostname Node\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003evCPU\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003eMemori\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003eStorage\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003ePrivateNet\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003ePeran Node\u003c/em\u003e\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eknode01master01\u003c/td\u003e\n          \u003ctd\u003e8 Core\u003c/td\u003e\n          \u003ctd\u003e8GB\u003c/td\u003e\n          \u003ctd\u003e80GB\u003c/td\u003e\n          \u003ctd\u003e172.16.0.211\u003c/td\u003e\n          \u003ctd\u003eControl-plane\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eknode01master02\u003c/td\u003e\n          \u003ctd\u003e8 Core\u003c/td\u003e\n          \u003ctd\u003e8GB\u003c/td\u003e\n          \u003ctd\u003e80GB\u003c/td\u003e\n          \u003ctd\u003e172.16.0.212\u003c/td\u003e\n          \u003ctd\u003eControl-plane\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eknode01master03\u003c/td\u003e\n          \u003ctd\u003e8 Core\u003c/td\u003e\n          \u003ctd\u003e8GB\u003c/td\u003e\n          \u003ctd\u003e80GB\u003c/td\u003e\n          \u003ctd\u003e172.16.0.213\u003c/td\u003e\n          \u003ctd\u003eControl-plane\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eknode01worker01\u003c/td\u003e\n          \u003ctd\u003e8 Core\u003c/td\u003e\n          \u003ctd\u003e8GB\u003c/td\u003e\n          \u003ctd\u003e80GB\u003c/td\u003e\n          \u003ctd\u003e172.16.0.211\u003c/td\u003e\n          \u003ctd\u003eWorker\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eknode01worker02\u003c/td\u003e\n          \u003ctd\u003e8 Core\u003c/td\u003e\n          \u003ctd\u003e8GB\u003c/td\u003e\n          \u003ctd\u003e80GB\u003c/td\u003e\n          \u003ctd\u003e172.16.0.212\u003c/td\u003e\n          \u003ctd\u003eWorker\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eknode01worker03\u003c/td\u003e\n          \u003ctd\u003e8 Core\u003c/td\u003e\n          \u003ctd\u003e8GB\u003c/td\u003e\n          \u003ctd\u003e80GB\u003c/td\u003e\n          \u003ctd\u003e172.16.0.213\u003c/td\u003e\n          \u003ctd\u003eWorker\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cblockquote\u003e\n\u003cp\u003eSemua operasi menggunakan user \u003ccode\u003eroot\u003c/code\u003e, harap berhati-hati saat menjalankan perintah!\u003cbr\u003e\nPada langkah ini, eksekusi dilakukan di semua node\u003c/p\u003e","title":"Klaster Kubernetes RKE2 dengan Cilium eBPF CNI"},{"content":"Persiapan Saya menggunakan tiga node VM untuk proyek lab rumah ini dengan 4 Core, Memori 4GB, dan 20GB untuk penyimpanan container dengan sistem operasi Rocky Linux 9.5 dengan kubernetes v1.32.5+k3s1 dan cri-o v1.32.\nNode Hostname vCPU Memory Storage PrivateNet litekube01 4 Core 4GB 20GB 172.16.0.111 litekube02 4 Core 4GB 20GB 172.16.0.112 litekube03 4 Core 4GB 20GB 172.16.0.113 Semua operasi menggunakan user root, berhati-hatilah saat menjalankan perintah!\nPada langkah ini, eksekusi dilakukan di semua node\nOpsional: Setel SElinux ke mode permissive untuk lingkungan pengembangan\nsetenforce 0 sed -i \u0026#39;s/^SELINUX=enforcing$/SELINUX=permissive/\u0026#39; /etc/selinux/config Setel hostname statis Siapkan environment\nNODE_01=litekube01 NODE_02=litekube02 NODE_03=litekube03 NODE_IP01=172.16.0.111 NODE_IP02=172.16.0.112 NODE_IP03=172.16.0.113 kemudian tambahkan hostname statis di /etc/hosts untuk semua node.\ncat \u0026lt;\u0026lt;EOF \u0026gt;\u0026gt; /etc/hosts $NODE_IP01 $NODE_01 $NODE_IP02 $NODE_02 $NODE_IP03 $NODE_03 EOF Tambahkan Repository dan Instal CRI-O CRIO_VERSION=v1.32 cat \u0026lt;\u0026lt;EOF \u0026gt; /etc/yum.repos.d/cri-o.repo [cri-o] name=CRI-O baseurl=https://download.opensuse.org/repositories/isv:/cri-o:/stable:/$CRIO_VERSION/rpm/ enabled=1 gpgcheck=1 gpgkey=https://download.opensuse.org/repositories/isv:/cri-o:/stable:/$CRIO_VERSION/rpm/repodata/repomd.xml.key EOF Instal paket \u0026amp; dependensi dnf install -y epel-release dnf install -y container-selinux cri-o Unduh dan instal k3s\ncurl -sfL https://get.k3s.io | INSTALL_K3S_SKIP_START=true INSTALL_K3S_CHANNEL=v1.32.5+k3s1 sh -s - server Bootsraping cluster Eksekusi hanya di node control-plane pertama\nBuat folder /etc/rancher/k3s kemudian buat file konfigurasi berdasarkan variabel environment yang telah kita definisikan sebelumnya\nmkdir -p /etc/rancher/k3s cat \u0026lt;\u0026lt;EOF | tee /etc/rancher/k3s/config.yaml cluster-init: true node-ip: $(hostname -I | awk \u0026#39;{print $1}\u0026#39;) write-kubeconfig-mode: \u0026#34;0600\u0026#34; tls-san: - \u0026#34;localhost\u0026#34; - \u0026#34;127.0.0.1\u0026#34; - \u0026#34;$NODE_01\u0026#34; - \u0026#34;$NODE_IP01\u0026#34; - \u0026#34;$NODE_02\u0026#34; - \u0026#34;$NODE_IP02\u0026#34; - \u0026#34;$NODE_03\u0026#34; - \u0026#34;$NODE_IP03\u0026#34; container-runtime-endpoint: unix:///var/run/crio/crio.sock cluster-cidr: 10.42.0.0/16 service-cidr: 10.43.0.0/16 # Buat snapshot etcd setiap 6 jam etcd-snapshot-schedule-cron: \u0026#34; */6 * * *\u0026#34; # Simpan 56 snapshot etcd (setara dengan 2 minggu dengan 6 snapshot per hari) etcd-snapshot-retention: 56 EOF Jika semuanya sudah siap, jalankan service dan terapkan agar berjalan saat VM booting\nsystemctl enable --now k3s.service Terapkan Canal CNI (Calico untuk policy dan flannel untuk networking)\ncurl -sSL https://raw.githubusercontent.com/projectcalico/calico/v3.30.1/manifests/canal.yaml -o $HOME/canal.yaml sed -i \u0026#39;s|10.244.0.0/16|10.42.0.0/16|g\u0026#39; $HOME/canal.yaml cp $HOME/canal.yaml /var/lib/rancher/k3s/server/manifests/canal.yaml Gabung node control-plane lain ke cluster Dapatkan token cluster di node pertama di /var/lib/rancher/k3s/server/agent-token tampilannya seperti ini\n[root@litekube01 ~]# cat /var/lib/rancher/k3s/server/agent-token K10bb908f13304637e4547ad7a40edac1c3c25165c6812c65a36f327fb99d33aa86::server:359dbfc03ab8ef930664d10adeb45397 curl -sfL https://get.k3s.io | INSTALL_K3S_SKIP_START=true INSTALL_K3S_CHANNEL=v1.32.5+k3s1 sh -s - server Sama seperti node pertama, buat folder /etc/rancher/k3s kemudian buat file konfigurasi berdasarkan variabel environment yang telah kita definisikan sebelumnya tetapi kita menambahkan nilai token dan server.\nmkdir -p /etc/rancher/k3s cat \u0026lt;\u0026lt;EOF | tee /etc/rancher/k3s/config.yaml server: https://$NODE_01:6443 token: K10bb908f13304637e4547ad7a40edac1c3c25165c6812c65a36f327fb99d33aa86::server:359dbfc03ab8ef930664d10adeb45397 node-ip: $(hostname -I | awk \u0026#39;{print $1}\u0026#39;) write-kubeconfig-mode: \u0026#34;0600\u0026#34; tls-san: - \u0026#34;localhost\u0026#34; - \u0026#34;127.0.0.1\u0026#34; - \u0026#34;$NODE_01\u0026#34; - \u0026#34;$NODE_IP01\u0026#34; - \u0026#34;$NODE_02\u0026#34; - \u0026#34;$NODE_IP02\u0026#34; - \u0026#34;$NODE_03\u0026#34; - \u0026#34;$NODE_IP03\u0026#34; container-runtime-endpoint: unix:///var/run/crio/crio.sock cluster-cidr: 10.42.0.0/16 service-cidr: 10.43.0.0/16 # Buat snapshot etcd setiap 6 jam etcd-snapshot-schedule-cron: \u0026#34; */6 * * *\u0026#34; # Simpan 56 snapshot etcd (setara dengan 2 minggu dengan 6 snapshot per hari) etcd-snapshot-retention: 56 EOF Post Bootsraping Cluster Pada langkah ini, eksekusi dilakukan di semua node\nPerbarui PATH di file .bashrc di $HOME/.bashrc dan /etc/skel/.bashrc dengan text editor kemudian sesuaikan seperti ini:\n#export PATH export PATH=$PATH:/usr/local/bin Buat dan tautkan atau salin file kredensial cluster.\nmkdir -p $HOME/.kube ln -s /etc/rancher/k3s/k3s.yaml $HOME/.kube/config Buat file konfigurasi cri-tools.\ncat \u0026lt;\u0026lt;EOF \u0026gt; /etc/crictl.yaml runtime-endpoint: unix:///var/run/crio/crio.sock image-endpoint: unix:///var/run/crio/crio.sock timeout: 10 debug: false EOF Instal helm versi terbaru\nHELM_VER=$(curl -sL https://get.helm.sh/helm-latest-version) HELM_FILE=helm-$HELM_VER-linux-amd64.tar.gz curl -sSL https://get.helm.sh/helm-$HELM_VER-linux-amd64.tar.gz -o $HELM_FILE; tar -zxf $HELM_FILE mv linux-amd64/helm /usr/local/bin Perbarui bash completion untuk memudahkan administrasi cluster\nfor i in kubectl crictl helm; do $i completion bash | tee /etc/bash_completion.d/$i \u0026gt; /dev/null; done source /usr/share/bash-completion/bash_completion Sekarang Anda dapat mengadministrasi cluster k3s dan men-debug node kubernetes dengan crictl tampilannya seperti ini: Agent/Worker gabung node ke cluster Ketika kita membutuhkan penskalaan cluster horizontal, kita dapat menambahkan node agent/worker. Unduh dan instal k3s untuk agent dan salin token cluster di node pertama $NODE_01 di /var/lib/rancher/k3s/server/agent-token\ncurl -sfL https://get.k3s.io | INSTALL_K3S_CHANNEL=v1.32.5+k3s1 sh -s - agent --server https://$NODE_01:6443 \\ --token K10bb908f13304637e4547ad7a40edac1c3c25165c6812c65a36f327fb99d33aa86::server:359dbfc03ab8ef930664d10adeb45397 Referensi: https://docs.k3s.io/cli/server https://docs.k3s.io/datastore/ha-embedded https://docs.tigera.io/calico/latest/getting-started/kubernetes/flannel/install-for-flannel https://blog.andreev.it/2023/10/install-kubernetes-with-cri-o-and-cilium-on-rocky-linux-9 ","permalink":"http://vikipranata.is-a.dev/id/posts/k3s-multi-master/","summary":"\u003ch2 id=\"persiapan\"\u003e\u003cem\u003ePersiapan\u003c/em\u003e\u003c/h2\u003e\n\u003cp\u003eSaya menggunakan tiga node VM untuk proyek lab rumah ini dengan 4 Core, Memori 4GB, dan 20GB untuk penyimpanan container dengan sistem operasi \u003cem\u003eRocky Linux 9.5\u003c/em\u003e dengan kubernetes \u003cem\u003ev1.32.5+k3s1\u003c/em\u003e dan cri-o \u003cem\u003ev1.32\u003c/em\u003e.\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e\u003cem\u003eNode Hostname\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003evCPU\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003eMemory\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003eStorage\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003ePrivateNet\u003c/em\u003e\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003elitekube01\u003c/td\u003e\n          \u003ctd\u003e4 Core\u003c/td\u003e\n          \u003ctd\u003e4GB\u003c/td\u003e\n          \u003ctd\u003e20GB\u003c/td\u003e\n          \u003ctd\u003e172.16.0.111\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003elitekube02\u003c/td\u003e\n          \u003ctd\u003e4 Core\u003c/td\u003e\n          \u003ctd\u003e4GB\u003c/td\u003e\n          \u003ctd\u003e20GB\u003c/td\u003e\n          \u003ctd\u003e172.16.0.112\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003elitekube03\u003c/td\u003e\n          \u003ctd\u003e4 Core\u003c/td\u003e\n          \u003ctd\u003e4GB\u003c/td\u003e\n          \u003ctd\u003e20GB\u003c/td\u003e\n          \u003ctd\u003e172.16.0.113\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cblockquote\u003e\n\u003cp\u003eSemua operasi menggunakan user \u003ccode\u003eroot\u003c/code\u003e, berhati-hatilah saat menjalankan perintah!\u003cbr\u003e\nPada langkah ini, eksekusi dilakukan di semua node\u003c/p\u003e","title":"Klaster Kubernetes Ringan dengan Multi Master K3S dan CRI-O"},{"content":"Persiapan Saya menggunakan tiga node VM untuk proyek lab rumah ini dengan 4 inti, 4 GB memori, dan 20 GB untuk penyimpanan kontainer, menggunakan sistem operasi Rocky Linux 9.5 dengan Docker Community Edition v28.2.2.\nNama Host Node vCPU Memori Penyimpanan Jaringan Pribadi hmlab01swarm01 4 Core 4GB 20GB 172.16.0.111 hmlab01swarm02 4 Core 4GB 20GB 172.16.0.112 hmlab01swarm03 4 Core 4GB 20GB 172.16.0.113 Semua operasi menggunakan pengguna root, berhati-hatilah saat menjalankan perintah!\nPada langkah ini, eksekusi dilakukan di semua node\nOpsional: Atur SElinux ke mode permisif untuk lingkungan pengembangan\nsetenforce 0 sed -i \u0026#39;s/^SELINUX=enforcing$/SELINUX=permissive/\u0026#39; /etc/selinux/config Atur nama host statis Konfigurasi lingkungan\nnode_01=hmlab01swarm01 node_02=hmlab01swarm02 node_03=hmlab01swarm03 node_IP01=172.16.0.111 node_IP02=172.16.0.112 node_IP03=172.16.0.113 Kemudian tambahkan nama host statis di /etc/hosts untuk semua node.\ncat \u0026lt;\u0026lt;EOF \u0026gt; /etc/hosts $NODE_IP01 $NODE_01 $NODE_IP02 $NODE_02 $NODE_IP03 $NODE_03 EOF Tambahkan Repositori dan Instal Docker dnf install -y dnf-plugins-core dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin Set\ncat \u0026lt;\u0026lt;EOF | sudo tee /etc/docker/daemon.json { \u0026#34;exec-opts\u0026#34;: [\u0026#34;native.cgroupdriver=systemd\u0026#34;], \u0026#34;log-driver\u0026#34;: \u0026#34;json-file\u0026#34;, \u0026#34;log-opts\u0026#34;: { \u0026#34;max-size\u0026#34;: \u0026#34;100m\u0026#34; }, \u0026#34;storage-driver\u0026#34;: \u0026#34;overlay2\u0026#34; } EOF systemctl restart docker.service systemctl enable docker.service Membuat kluster Jalankan perintah berikut hanya pada node manajer pertama\ndocker swarm init --advertise-addr 172.16.0.111 --force-new-cluster Untuk menambahkan node manajer lain, jalankan perintah ini yang telah kita gunakan sebelumnya dengan docker swarm join-token manager di node manajer pertama.\ndocker swarm join --token SWMTKN-1-04x40p3y8w72nv7a3merg1ee4ya4t6r3ra379gv7hv79udt0ho-8d18zrgpy5elj3f69i7rvz8tf 172.16.0.111:2377 Referensi https://docs.rockylinux.org/gemstones/containers/docker https://docs.docker.com/reference/cli/docker/swarm https://dockerlabs.collabnix.com/intermediate/Implementing_High_Availability_with_Docker_Swarm.html ","permalink":"http://vikipranata.is-a.dev/id/posts/setup-docker-swarm/","summary":"\u003ch2 id=\"persiapan\"\u003e\u003cem\u003ePersiapan\u003c/em\u003e\u003c/h2\u003e\n\u003cp\u003eSaya menggunakan tiga node VM untuk proyek lab rumah ini dengan 4 inti, 4 GB memori, dan 20 GB untuk penyimpanan kontainer, menggunakan sistem operasi \u003cem\u003eRocky Linux 9.5\u003c/em\u003e dengan Docker Community Edition \u003cem\u003ev28.2.2\u003c/em\u003e.\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e\u003cem\u003eNama Host Node\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003evCPU\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003eMemori\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003ePenyimpanan\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003eJaringan Pribadi\u003c/em\u003e\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ehmlab01swarm01\u003c/td\u003e\n          \u003ctd\u003e4 Core\u003c/td\u003e\n          \u003ctd\u003e4GB\u003c/td\u003e\n          \u003ctd\u003e20GB\u003c/td\u003e\n          \u003ctd\u003e172.16.0.111\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ehmlab01swarm02\u003c/td\u003e\n          \u003ctd\u003e4 Core\u003c/td\u003e\n          \u003ctd\u003e4GB\u003c/td\u003e\n          \u003ctd\u003e20GB\u003c/td\u003e\n          \u003ctd\u003e172.16.0.112\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ehmlab01swarm03\u003c/td\u003e\n          \u003ctd\u003e4 Core\u003c/td\u003e\n          \u003ctd\u003e4GB\u003c/td\u003e\n          \u003ctd\u003e20GB\u003c/td\u003e\n          \u003ctd\u003e172.16.0.113\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cblockquote\u003e\n\u003cp\u003eSemua operasi menggunakan pengguna \u003ccode\u003eroot\u003c/code\u003e, berhati-hatilah saat menjalankan perintah!\u003cbr\u003e\nPada langkah ini, eksekusi dilakukan di semua node\u003c/p\u003e","title":"Membuat Kluster Docker Swarm dengan Rocky Linux 9.5"},{"content":"Akhirnya, VyOS Stream telah dirilis pada kuartal pertama tahun ini!\nBerbeda dengan rolling release, branch stream hanya akan menerima fitur-fitur yang benar-benar siap untuk dimasukkan ke rilis LTS di masa depan.\nSaya menggunakannya untuk melakukan beberapa pengujian di lab rumah saya, berikut hasilnya.\nPersiapan Saya menggunakan dua node VM untuk proyek lab rumah ini dengan 1 Core CPU, 1GB Memori, dan 10GB untuk root disk dengan sistem operasi VyOS 1.5 Stream 2025 Q1.\nNode Hostname Peran Node vCPU Memori RootDisk privateNet btnlab01rtr01 Master Router 1 Core 1 GB 10 GB 10.78.78.251 btnlab01rtr02 Secondary Router 1 Core 1 GB 10 GB 10.78.78.251 Pemetaan interface dan jaringan:\neth0 198.51.100.253/24 gateway 198.51.100.254 untuk virtual IP jaringan publik eth1 10.78.78.0/24 gateway 10.78.78.254 untuk jaringan privat Instalasi Sayangnya, VyOS Stream hanya menyediakan image ISO generic; tidak ada varian tambahan. Jadi satu-satunya cara saat ini adalah dengan boot ISO ke CD-ROM pada mesin virtual. Setelah selesai, login ke live ISO dengan user default vyos dan password vyos dan ikuti instruksi seperti pada gambar di bawah ini\nlalu reboot dan keluarkan ISO dari CD-ROM.\nInisialisasi Setup Jalankan di semua node.\nMasuk ke mode konfigurasi dengan perintah configure\nPada bagian ini kita mengkonfigurasi pengaturan umum atau global untuk setiap router.\nset service ssh port 22 set system name-server 1.1.1.1 set system name-server 1.0.0.1 set system time-zone Asia/Jakarta set system option reboot-on-panic set system option time-format 24-hour set system option performance throughput del service ntp set service ntp server time.cloudflare.com Tambahan, tambahkan banner sebelum dan sesudah login.\nset system login banner post-login \u0026#34;=============================================================================================================\\nATTENTION!! UNAUTHORIZED ACCESS TO THIS DEVICE IS PROHIBITED.\\nYou must have explicit, authorized permission to access or configure this device.\\nUnauthorized attempts and actions to access or use this system may result in civil and/or criminal penalties.\\nAll activities performed on this device are logged and monitored.\\n=============================================================================================================\u0026#34; set system login banner pre-login \u0026#34;=============================================================================================================\\nATTENTION!! UNAUTHORIZED ACCESS TO THIS DEVICE IS PROHIBITED.\\nYou must have explicit, authorized permission to access or configure this device.\\nUnauthorized attempts and actions to access or use this system may result in civil and/or criminal penalties.\\nAll activities performed on this device are logged and monitored.\\n=============================================================================================================\u0026#34; Tambahan, ganti user default vyos dan buat user vikiadm serta tambahkan ssh public key.\nset system login user vikiadm authentication encrypted-password \u0026#39;$6$rounds=4096$Fp08IS0HCcUvA0ln$3h.4UN9EXy4Pevt8McdNqajmpDxax2cvg6k01lnxCdZgI8d4AS833fSdnHH70dDFf2zkhmJT3fnGc0ZQLV1Eh1\u0026#39; set system login user vikiadm authentication public-keys admin@tworty.com type ssh-ed25519 set system login user vikiadm authentication public-keys admin@tworty.com key AAAAC3NzaC1lZDI1NTE5AAAAIHgl+ZYCgd4eq+aMMO4uD9sjFv+tjFKFfAk+cvaYxzcq Konfigurasi firewall dan aturan nat umum, untuk saat ini semua protokol incoming diizinkan pada interface eth1.\nset firewall ipv4 input filter default-action drop set firewall ipv4 input filter rule 10 action accept set firewall ipv4 input filter rule 10 protocol icmp set firewall ipv4 input filter rule 10 state established set firewall ipv4 input filter rule 10 state related set firewall ipv4 input filter rule 10 state new set firewall ipv4 input filter rule 99 action accept set firewall ipv4 input filter rule 99 protocol all set firewall ipv4 input filter rule 99 inbound-interface name eth1 set firewall ipv4 input filter rule 99 source group network-group privateNet set firewall ipv4 input filter rule 99 description allow-privateNet set firewall ipv4 input filter rule 100 action accept set firewall ipv4 input filter rule 100 protocol tcp set firewall ipv4 input filter rule 100 destination port 22 set firewall ipv4 input filter rule 100 description allow-ssh set nat source rule 100 description privateNet set nat source rule 100 source address 10.78.78.0/24 set nat source rule 100 outbound-interface name eth0 set nat source rule 100 translation address masquerade Jangan lupa untuk commit perubahan konfigurasi saat ini dan save konfigurasi\nScript Transisi High Availability Buat script transisi untuk layanan vrrp agar dapat menangani public ip dan default gateway untuk jaringan privat.\nscript transisi untuk menjadi master\ncat \u0026lt;\u0026lt;EOF | tee /config/scripts/vrrp-master.sh #!/bin/vbash if [ \u0026#34;$(id -g -n)\u0026#34; != \u0026#39;vyattacfg\u0026#39; ] ; then exec sg vyattacfg -c \u0026#34;/bin/vbash \\$(readlink -f \\$0) \\$@\u0026#34; fi source /opt/vyatta/etc/functions/script-template configure del protocols static route 0.0.0.0/0 next-hop 10.78.78.254 set protocols static route 0.0.0.0/0 next-hop 198.51.100.254 commit save exit EOF script transisi untuk menjadi backup dan fault\ncat \u0026lt;\u0026lt;EOF | tee /config/scripts/vrrp-backup.sh #!/bin/vbash if [ \u0026#34;$(id -g -n)\u0026#34; != \u0026#39;vyattacfg\u0026#39; ] ; then exec sg vyattacfg -c \u0026#34;/bin/vbash \\$(readlink -f \\$0) \\$@\u0026#34; fi source /opt/vyatta/etc/functions/script-template configure del protocols static route 0.0.0.0/0 next-hop 198.51.100.254 set protocols static route 0.0.0.0/0 next-hop 10.78.78.254 commit save exit EOF Router Master Jalankan hanya di master.\nMasuk ke mode konfigurasi dengan perintah configure\nAtur hostname, interface, dan alamat IP.\nset system host-name btnlab01vrtr01 set interface ethernet eth0 description publicNet set interface ethernet eth1 description privateNet set interface ethernet eth1 address 10.78.78.251/24 Atur config-sync untuk router secondary, pada tahap ini hanya beberapa konfigurasi yang perlu disinkronkan pada section config.\nset service config-sync mode load set service config-sync secondary address 10.78.78.252 set service config-sync secondary port 22940 set service config-sync secondary key config-sync-key set service config-sync section firewall set service config-sync section nat set service config-sync section pki set service config-sync section policy set service config-sync section vpn set service config-sync section service ntp set service config-sync section qos interfaces set service config-sync section qos policy set service config-sync section interfaces wireguard set service config-sync section system time-zone set service config-sync section system option set service config-sync section system static-host-mapping Atur high availability vrrp ke router secondary, pada dasarnya mirip dengan konfigurasi keepalived. Nilai prioritas yang lebih tinggi meningkatkan peluang router menjadi master.\nset high-availability vrrp group defaultHA interface eth1 set high-availability vrrp group defaultHA hello-source-address 10.78.78.251 set high-availability vrrp group defaultHA peer-address 10.78.78.252 set high-availability vrrp group defaultHA address 10.78.78.254/24 interface eth1 set high-availability vrrp group defaultHA address 103.150.80.130/28 interface eth0 set high-availability vrrp group defaultHA no-preempt set high-availability vrrp group defaultHA priority 101 set high-availability vrrp group defaultHA track interface eth1 set high-availability vrrp group defaultHA vrid 96 set high-availability vrrp sync-group sync member defaultHA set high-availability vrrp sync-group sync health-check ping 10.78.78.252 set high-availability vrrp sync-group sync health-check interval 10 set high-availability vrrp sync-group sync health-check failure-count 3 set high-availability vrrp sync-group sync transition-script master \u0026#39;/config/scripts/vrrp-master.sh defaultHA\u0026#39; set high-availability vrrp sync-group sync transition-script fault \u0026#39;/config/scripts/vrrp-backup.sh defaultHA\u0026#39; set high-availability vrrp sync-group sync transition-script backup \u0026#39;/config/scripts/vrrp-backup.sh defaultHA\u0026#39; Konfigurasi conntrack-sync dan aktifkan helpers\nset service conntrack-sync accept-protocol tcp set service conntrack-sync accept-protocol udp set service conntrack-sync accept-protocol icmp set service conntrack-sync event-listen-queue-size 8 set service conntrack-sync failover-mechanism vrrp sync-group sync set service conntrack-sync interface eth1 set service conntrack-sync mcast-group 224.0.0.50 set service conntrack-sync sync-queue-size 8 Digunakan untuk failover stateful tanpa sinkronisasi conntrack, firewall backup akan melihat koneksi aktif sebagai “baru” saat failover, sehingga sesi (misal VPN, banking) bisa terputus.\nJangan lupa untuk commit perubahan konfigurasi saat ini dan save konfigurasi\nRouter Secondary Jalankan hanya di master.\nMasuk ke mode konfigurasi dengan perintah configure\nAtur hostname, interface, dan alamat IP.\nset system host-name btnlab01vrtr02 set interface ethernet eth0 description publicNet set interface ethernet eth1 description privateNet set interface ethernet eth1 address 10.78.78.252/24 Atur layanan https untuk menyediakan config-sync via api\nset service https port 22940 set service https listen-address 10.78.78.251 set service https allow-client address 10.78.78.252 Atur high availability vrrp ke router master, pada dasarnya mirip dengan konfigurasi keepalived. Nilai prioritas yang lebih tinggi meningkatkan peluang router menjadi master.\nset high-availability vrrp group defaultHA interface eth1 set high-availability vrrp group defaultHA hello-source-address 10.78.78.252 set high-availability vrrp group defaultHA peer-address 10.78.78.251 set high-availability vrrp group defaultHA address 10.78.78.254/24 interface eth1 set high-availability vrrp group defaultHA address 103.150.80.130/28 interface eth0 set high-availability vrrp group defaultHA no-preempt set high-availability vrrp group defaultHA priority 100 set high-availability vrrp group defaultHA track interface eth1 set high-availability vrrp group defaultHA vrid 96 set high-availability vrrp sync-group sync member defaultHA set high-availability vrrp sync-group sync health-check ping 10.78.78.251 set high-availability vrrp sync-group sync health-check interval 10 set high-availability vrrp sync-group sync health-check failure-count 3 set high-availability vrrp sync-group sync transition-script master \u0026#39;/config/scripts/vrrp-master.sh defaultHA\u0026#39; set high-availability vrrp sync-group sync transition-script fault \u0026#39;/config/scripts/vrrp-backup.sh defaultHA\u0026#39; set high-availability vrrp sync-group sync transition-script backup \u0026#39;/config/scripts/vrrp-backup.sh defaultHA\u0026#39; Jangan lupa untuk commit perubahan konfigurasi saat ini dan save konfigurasi\nPerintah Operasional Jika Anda menjalankan perintah ini di mode konfigurasi, tambahkan run sebelum menjalankan perintah.\nUntuk melihat aturan firewall jalankan show firewall dan show firewall statistics Untuk melihat aturan nat masquerade jalankan show nat source rules dan show nat source statistics Untuk melihat status high availability jalankan show vrrp dan show vrrp statistics dan jika ingin menguji transisi Virtual IP, Anda bisa menjalankan perintah restart vrrp.\nBerdasarkan pengalaman saya, menguji VyOS Stream release ini sangat nyaman dan performanya lebih baik dibandingkan rolling release yang harus diuji secara berkala. Saya rasa ini sudah cukup untuk melakukan PoC di lingkungan staging sebelum mengimplementasikannya langsung di lingkungan produksi. Ke depannya, saya mungkin akan menggunakannya sebagai reverse proxy server dan vpn server dengan kombinasi sistem otomasi yang sudah dipersiapkan seperti API, Ansible, Terraform, Cloud-init, dan lain-lain.\nReferensi https://docs.vyos.io/en/latest/ https://docs.vyos.io/en/latest/configuration/highavailability/ https://docs.vyos.io/en/latest/automation/command-scripting.html https://docs.vyos.io/en/latest/configuration/service/config-sync.html https://vyos.net/get/stream/#1.5-2025-Q1 ","permalink":"http://vikipranata.is-a.dev/id/posts/vyos-router-setup-ha/","summary":"\u003cp\u003eAkhirnya, VyOS Stream telah dirilis pada kuartal pertama tahun ini!\u003cbr\u003e\nBerbeda dengan rolling release, branch stream hanya akan menerima fitur-fitur yang benar-benar siap untuk dimasukkan ke rilis LTS di masa depan.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"vyos-stream\" loading=\"lazy\" src=\"/posts/vyos-router-setup-ha/uploads/vyos-stream.webp\"\u003e\u003c/p\u003e\n\u003cp\u003eSaya menggunakannya untuk melakukan beberapa pengujian di lab rumah saya, berikut hasilnya.\u003c/p\u003e\n\u003ch2 id=\"persiapan\"\u003e\u003cem\u003ePersiapan\u003c/em\u003e\u003c/h2\u003e\n\u003cp\u003eSaya menggunakan dua node VM untuk proyek lab rumah ini dengan 1 Core CPU, 1GB Memori, dan 10GB untuk root disk dengan sistem operasi VyOS 1.5 Stream 2025 Q1.\u003c/p\u003e","title":"High Availability VyOS Stream dengan Config Sync"},{"content":"Setelah kita selesai membangun cluster OpenStack dengan kolla ansible pada postingan sebelumnya, untuk mengoperasikan OpenStack melalui CLI terdapat beberapa langkah sebagai berikut:\nMengakses Cluster Menggunakan OpenStack RC File File RC berisi kumpulan variabel yang digunakan untuk mengakses OpenStack dengan user atau project tertentu.\nsource ~/admin-openrc.sh Membuat Project openstack project create --enable --description \u0026#34;project untuk kubernetes\u0026#34; kubernetes openstack project list --long --fit-width Membuat User openstack user create --project admin --email viki@homelab.is-a.dev --password p@ssw0rd viki openstack user create --project kubernetes --email k8s@homelab.is-a.dev --password-prompt k8s openstack user set viki --project kubernetes Verifikasi\nfor i in {viki,k8s}; do openstack user show $i; done Role Project openstack role add --user viki --project admin admin openstack role add --user viki --project kubernetes member openstack role add --user k8s --project kubernetes admin Verifikasi\nfor i in {viki,k8s}; do openstack role assignment list --user $i --names; done Membuat Kuota Project openstack quota set --core 24 --ram 20480 --instances 10 --volumes 10 --floating-ips 6 --secgroups 2 kubernetes Membuat Image Unduh file cloud image terlebih dahulu:\nwget https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img curl -LO https://download.cirros-cloud.net/0.6.1/cirros-0.6.1-x86_64-disk.img Kemudian import image yang sudah diunduh ke OpenStack dengan perintah berikut:\nopenstack image create --public --disk-format qcow2 --file cirros-0.6.1-x86_64-disk.img cirros-test openstack image create --public --disk-format qcow2 --file focal-server-cloudimg-amd64.img ubuntu20-focal openstack image list Membuat Flavor Flavor mendefinisikan spesifikasi sebuah instance. Contohnya, membuat flavor dengan 1 VCPU, 1GB RAM, dan 10GB Disk dapat dilakukan dengan perintah berikut:\nopenstack flavor create --project kubernetes --private --vcpu 2 --ram 2048 --disk 2 n1-kubemaster openstack flavor create --project kubernetes --private --vcpu 4 --ram 4096 --disk 4 n2-kubeworker openstack flavor list --all Membuat SSH Keypair Keypair di sini adalah SSH keypair yang biasanya kita buat dengan perintah ssh-keygen, yang menghasilkan file public key dan private key. Ini membantu cloud-init untuk memasukkan public key ke dalam instance. Untuk membuat keypair, gunakan perintah berikut:\nopenstack keypair create --public-key ~/.ssh/id_rsa.pub controller-key openstack keypair create --public-key ~/.ssh/k8s.pub k8s-key Membuat Security Group Security group berfungsi sebagai firewall pada level instance. Misalnya, kita dapat mengatur koneksi masuk (ingress) pada SSH (TCP port 22), layanan web (TCP port 80, 443), dan protokol ICMP dengan perintah berikut:\nMembuat security group kubesecgroup\nopenstack security group create kubesecgroup openstack security group rule create --ingress --protocol icmp openstack security group rule create --ingress --protocol tcp --dst-port 22 --description ssh openstack security group rule create --ingress --protocol tcp --dst-port 80 --description http openstack security group rule create --ingress --protocol tcp --dst-port 443 --description https openstack security group rule create --ingress --protocol tcp --dst-port 6443 --description api-service openstack security group rule create --ingress --protocol tcp --dst-port 8443 --description ha-api-service openstack security group show kubesecgroup Membuat security group app-secgroup\nopenstack security group create app-secgroup openstack security group rule create --ingress --protocol tcp --dst-port 30080 --description http-ingress openstack security group rule create --ingress --protocol tcp --dst-port 30443 --description https-ingress Membuat External Network External network digunakan untuk komunikasi keluar dari instance melalui provider eksternal. Untuk membuatnya, kita perlu mengetahui physical network provider terlebih dahulu dengan perintah berikut:\nsudo cat /etc/kolla/neutron-server/ml2_conf.ini | grep flat_network | awk \u0026#39;{print $3}\u0026#39; Kemudian, definisikan network dan subnet dengan perintah berikut:\nopenstack network create --project admin --external --provider-network-type flat \\ --provider-physical-network physnet1 ext-net openstack subnet create --network ext-net \\ --subnet-range 172.16.1.0/24 --gateway 172.16.1.1 --dns-nameserver 172.16.1.1 \\ --allocation-pool start=172.16.1.242,end=172.16.1.254 --no-dhcp ext-subnet openstack network list --long --fit-width openstack subnet list --long --fit-width Membuat Internal Network Internal network digunakan untuk komunikasi antar instance melalui jaringan internal. Untuk membuatnya, definisikan network dan subnet dengan perintah berikut:\nopenstack network create --internal kubenet openstack subnet create --network kubenet --subnet-range 10.1.0.0/24 --gateway 10.1.0.1 kubesubnet openstack network list --long --fit-width openstack subnet list --long --fit-width Membuat Router Di OpenStack, router digunakan untuk menghubungkan trafik internal ke trafik eksternal, baik masuk (ingress) maupun keluar (egress). Untuk membuat router, gunakan perintah berikut:\nopenstack router create kuberouter openstack router set --external-gateway ext-net kuberouter openstack router add subnet kuberouter kubesubnet openstack router show kuberouter Membuat Instance Setelah langkah-langkah di atas selesai, Anda dapat membuat instance dengan perintah berikut:\nopenstack server create --flavor n1-kubemaster --network kubenet \\ --key-name k8s-key --image ubuntu20-focal --security-group kubesecgroup k8s-master01 openstack server create --flavor n2-kubeworker --network kubenet \\ --key-name k8s-key --image ubuntu20-focal --security-group kubesecgroup k8s-worker01 Membuat Floating IP Floating IP berfungsi sebagai NAT yang diterapkan ke IP internal instance. Untuk membuat floating IP, gunakan perintah berikut:\nopenstack floating ip create --floating-ip 172.16.1.244 ext-net openstack floating ip create --floating-ip 172.16.1.245 ext-net openstack floating ip list openstack server add floating ip k8s-master01 172.16.1.244 openstack server add floating ip k8s-worker01 172.16.1.245 openstack server list Membuat Volume Volume digunakan sebagai penyimpanan persisten untuk instance dalam bentuk block storage. Untuk membuat volume dan meng-attach ke instance, gunakan perintah berikut:\nopenstack volume create --size 1 mvolume openstack server add volume k8s-master01 mvolume Memperbesar Volume openstack server remove volume k8s-master01 mvolume openstack volume set --size 2 mvolume openstack volume list openstack server add volume k8s-master01 mvolume openstack server show k8s-master01 Instance dengan Penyimpanan Persisten Untuk membuat penyimpanan persisten pada partisi root saat instance dibuat, gunakan perintah berikut:\nopenstack volume create --size 10 --image ubuntu20-focal web-server-ubuntu02 openstack server create --flavor c1-standard-01 \\ --key-name controllerkey \\ --security-group secg-basic-web \\ --network int-net01 \\ --volume web-server-ubuntu02 --wait \\ web-server-ubuntu02 Upgrade Instance dengan Flavor Baru Seiring waktu, spesifikasi instance mungkin perlu di-upgrade untuk memenuhi kebutuhan resource baru. Untuk melakukan upgrade, ikuti perintah berikut:\nopenstack flavor create --vcpus 2 --ram 2048 --disk 15 --public c2-standard-01 openstack server resize --flavor c2-standard-01 web-server-ubuntu01 openstack server list | grep web-server-ubuntu01 openstack server resize confirm web-server-ubuntu01 Referensi https://docs.openstack.org/python-openstackclient/latest/cli https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/project-v2.html#project-create https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/user-v2.html#user-create https://docs.openstack.org/keystone/rocky/admin/cli-manage-projects-users-and-roles.html ","permalink":"http://vikipranata.is-a.dev/id/posts/openstack-operational-cli/","summary":"\u003cp\u003eSetelah kita selesai membangun cluster OpenStack dengan kolla ansible pada \u003ca href=\"/id/posts/openstack-kolla-ansible-2024.2/\"\u003epostingan sebelumnya\u003c/a\u003e, untuk mengoperasikan OpenStack melalui CLI terdapat beberapa langkah sebagai berikut:\u003c/p\u003e\n\u003ch2 id=\"mengakses-cluster\"\u003eMengakses Cluster\u003c/h2\u003e\n\u003ch3 id=\"menggunakan-openstack-rc-file\"\u003eMenggunakan OpenStack RC File\u003c/h3\u003e\n\u003cp\u003eFile RC berisi kumpulan variabel yang digunakan untuk mengakses OpenStack dengan user atau project tertentu.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003esource\u003c/span\u003e ~/admin-openrc.sh\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"membuat-project\"\u003eMembuat Project\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eopenstack project create --enable --description \u003cspan class=\"s2\"\u003e\u0026#34;project untuk kubernetes\u0026#34;\u003c/span\u003e kubernetes\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eopenstack project list --long --fit-width\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"membuat-user\"\u003eMembuat User\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eopenstack user create --project admin --email viki@homelab.is-a.dev --password p@ssw0rd viki\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eopenstack user create --project kubernetes --email k8s@homelab.is-a.dev --password-prompt k8s\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eopenstack user \u003cspan class=\"nb\"\u003eset\u003c/span\u003e viki --project kubernetes\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eVerifikasi\u003c/p\u003e","title":"Mengoperasikan OpenStack via CLI"},{"content":"Persiapan Saya menggunakan lima node VM untuk proyek lab rumah ini dengan 16 Core, 16GB Memori, dan 40GB untuk root disk dengan sistem operasi Ubuntu 22.04.5 LTS.\nHostname Node Peran Node vCPU Memori RootDisk ManagementNet StorageNet btnlab01adm01 Ansible 2 Core 2GB 20GB 10.78.78.199 - btnlab01con01 Controller 16 Core 16GB 40GB 10.78.78.201 10.79.79.201 btnlab01con02 Controller 16 Core 16GB 40GB 10.78.78.202 10.79.79.202 btnlab01con03 Controller 16 Core 16GB 40GB 10.78.78.203 10.79.79.203 btnlab01hpv01 Hypervisor 32 Core 32GB 40GB 10.78.78.204 10.79.79.204 btnlab01hpv02 Hypervisor 32 Core 32GB 40GB 10.78.78.205 10.79.79.205 Pemetaan interface:\neth0 untuk Jaringan Publik eth1 untuk Jaringan Manajemen eth2 untuk Jaringan Storage dengan Jumbo frames eth4 untuk Tunnel/Self Service/Guest Network dengan Jumbo frames Konfigurasi jaringan dapat dilihat pada sample-netplan.yaml\nInstalasi NFS Server untuk layanan Glance di node btnlab01adm01\nsudo apt update sudo apt install nfs-kernel-server sudo mkdir -p /data sudo chown nobody:nogroup /data echo \u0026#34;/data *(rw,sync,no_subtree_check)\u0026#34; \u0026gt;\u0026gt; /etc/exports sudo systemctl restart nfs-kernel-server sudo exportfs -v Jalankan di semua node\nMapping hostname statis di /etc/hosts\ncat \u0026lt;\u0026lt;EOF | tee -a /etc/hosts 10.78.78.199 btnlab01adm01 btnlab01adm01.homelab.is-a.dev 10.78.78.201 btnlab01con01 btnlab01con01.homelab.is-a.dev 10.78.78.202 btnlab01con02 btnlab01con02.homelab.is-a.dev 10.78.78.203 btnlab01con02 btnlab01con03.homelab.is-a.dev 10.78.78.204 btnlab01hpv01 btnlab01hpv01.homelab.is-a.dev 10.78.78.205 btnlab01hpv02 btnlab01hpv02.homelab.is-a.dev 10.78.78.200 os-int 10.78.78.100 os-ext EOF Install paket dan dependensi\nsudo apt install -y git gcc libssl-dev libffi-dev \\ python3-venv python3-dev python3-selinux python3-setuptools \\ python3-pip python3-docker nfs-common Mount volume nfs untuk semua node\nsudo mkdir /data cat \u0026lt;\u0026lt;EOF | sudo tee -a /etc/fstab 10.78.78.199:/data /data nfs defaults,_netdev 0 0 EOF sudo mount /data Buat virtual environment untuk kolla-ansible\npython3 -m venv kolla-venv cd kolla-venv source bin/activate pwd Update pip dan install ansible\npip install -U pip pip install \u0026#39;ansible\u0026gt;=8,\u0026lt;9\u0026#39; Update konfigurasi ansible di direktori saat ini\ntee $PWD/ansible.cfg \u0026lt;\u0026lt;EOF [defaults] host_key_checking=False pipelining=True forks=100 log_path = $PWD/ansible.log EOF Instalasi kolla-ansible stable versi 2024.1\npip install git+https://opendev.org/Openstack/kolla-ansible@stable/2024.1 kolla-ansible install-deps Buat direktori untuk konfigurasi kolla\nsudo mkdir -p /etc/kolla /etc/kolla/config/nova \\ /etc/kolla/config/cinder/{cinder-volume,cinder-backup} sudo chown $USER:$USER /etc/kolla Salin ceph keyring ke direktori config nova dan cinder yang sudah dibuat sebelumnya pada postingan Ceph Reef Deployment.\nsudo mkdir -p /etc/kolla /etc/kolla/config/nova \\ /etc/kolla/config/cinder/{cinder-volume,cinder-backup} cp -r ceph.conf \\ /etc/kolla/config/{nova,cinder}/ceph.conf cp -r ceph.client.cinder.keyring \\ /etc/kolla/config/nova/ceph.client.cinder.keyring cp -r ceph.client.cinder.keyring \\ /etc/kolla/config/cincer/cinder-volume/ceph.client.cinder.keyring cp -r ceph.client.cinder.keyring \\ /etc/kolla/config/cincer/cinder-backup/ceph.client.cinder-backup.keyring sudo chown -R $USER:$USER /etc/kolla Kemudian salin konfigurasi kolla ke /etc/kolla dan salin file multinode ke direktori saat ini\ncp -r share/kolla-ansible/etc_examples/kolla/* /etc/kolla cp -r share/kolla-ansible/ansible/inventory/multinode . Konfigurasi Kolla Sesuaikan file inventory multinode, contohnya seperti ini\n[control] btnlab01con01 btnlab01con02 btnlab01con03 [network] btnlab01con01 btnlab01con02 btnlab01con03 [compute] btnlab01hpv01 btnlab01hpv02 [monitoring] btnlab01con01 btnlab01con02 btnlab01con03 Lakukan validasi dengan ansible ping untuk semua node di inventory multinode\nansible -i multinode all -m ping Kemudian sesuaikan /etc/kolla/globals.yml seperti berikut\nworkaround_ansible_issue_8743: yes kolla_base_distro: \u0026#34;ubuntu\u0026#34; kolla_install_type: \u0026#34;source\u0026#34; Openstack_release: \u0026#34;2024.1\u0026#34; kolla_internal_vip_address: \u0026#34;10.78.78.200\u0026#34; kolla_internal_fqdn: \u0026#34;os-int\u0026#34; kolla_external_vip_address: \u0026#34;10.78.78.100\u0026#34; kolla_external_fqdn: \u0026#34;os-ext\u0026#34; network_interface: \u0026#34;eth1\u0026#34; tunnel_interface: \u0026#34;eth3\u0026#34; neutron_external_interface: \u0026#34;eth0\u0026#34; neutron_plugin_agent: \u0026#34;ovn\u0026#34; kolla_enable_tls_internal: \u0026#34;yes\u0026#34; kolla_enable_tls_external: \u0026#34;yes\u0026#34; kolla_copy_ca_into_containers: \u0026#34;yes\u0026#34; Openstack_cacert: \u0026#34;/etc/ssl/certs/ca-certificates.crt\u0026#34; kolla_enable_tls_backend: \u0026#34;yes\u0026#34; Openstack_region_name: \u0026#34;Staging\u0026#34; enable_Openstack_core: \u0026#34;yes\u0026#34; enable_haproxy: \u0026#34;yes\u0026#34; enable_mariadb: \u0026#34;yes\u0026#34; enable_memcached: \u0026#34;yes\u0026#34; enable_cinder: \u0026#34;yes\u0026#34; enable_cinder_backup: \u0026#34;yes\u0026#34; enable_mariabackup: \u0026#34;yes\u0026#34; ceph_cinder_user: \u0026#34;cinder\u0026#34; ceph_cinder_keyring: \u0026#34;client.{{ ceph_cinder_user }}.keyring\u0026#34; ceph_cinder_pool_name: \u0026#34;cinder\u0026#34; ceph_cinder_backup_user: \u0026#34;cinder-backup\u0026#34; ceph_cinder_backup_keyring: \u0026#34;client.{{ ceph_cinder_backup_user }}.keyring\u0026#34; ceph_cinder_backup_pool_name: \u0026#34;cinder-backup\u0026#34; ceph_nova_keyring: \u0026#34;{{ ceph_cinder_keyring }}\u0026#34; ceph_nova_user: \u0026#34;{{ ceph_cinder_user }}\u0026#34; ceph_nova_pool_name: \u0026#34;nova\u0026#34; glance_backend_file: \u0026#34;yes\u0026#34; glance_file_datadir_volume: \u0026#34;/data/glance\u0026#34; cinder_backend_ceph: \u0026#34;yes\u0026#34; nova_backend_ceph: \u0026#34;yes\u0026#34; nova_compute_virt_type: \u0026#34;kvm\u0026#34; Generate password untuk semua service Openstack dan dependensinya\nkolla-genpwd Perintah ini akan membuat file baru di /etc/kolla/passwords.yml\nGenerate sertifikat Openstack dengan kolla-ansible lalu tambahkan ke ca-certificate sistem\nkolla-ansible -i multinode certificates cat /etc/kolla/certificates/ca/root.crt | sudo tee -a /etc/ssl/certs/ca-certificates.crt Deploy Openstack Bootstrap server dengan dependensi kolla deploy\nkolla-ansible -i ./multinode bootstrap-servers Pull semua image untuk container (hanya menarik image, tidak menjalankan perubahan container)\nkolla-ansible -v -i multinode pull Lakukan pre-deployment checks untuk host sebelum deploy\nkolla-ansible -i ./multinode prechecks Deploy dan jalankan semua container kolla\nkolla-ansible -i multinode deploy -v Validasi file konfigurasi yang dihasilkan dari service yang diaktifkan\nkolla-ansible -i multinode validate-config Post Deploy Openstack Lakukan post deploy\nkolla-ansible -i multinode post-deploy Jika semua berjalan lancar, tidak ada count failed seperti ini Salin admin-openrc.sh ke direktori home dan tambahkan Openstack CA Certificate\ncp /etc/kolla/admin-openrc.sh $HOME/admin-openrc.sh echo \u0026#34;export OS_CACERT=/etc/ssl/certs/ca-certificates.crt\u0026#34; \u0026gt;\u0026gt; $HOME/admin-openrc.sh Install Openstack cli client dan gunakan kredensial admin-openrc.sh untuk akses cluster Openstack\nsudo apt install -y python3-Openstackclient source $HOME/admin-openrc.sh Lakukan beberapa perintah pengecekan seperti\nOpenstack host list Openstack hypervisor list Openstack endpoint list Openstack service list Openstack network agent list Sekarang kita bisa mengakses dashboard horizon melalui browser https://os-ext.homelab.is-a.dev dengan kredensial yang bisa didapatkan dari file admin-openrc.sh. Langkah selanjutnya kita bisa mempelajari dasar-dasar Openstack CLI pada postingan Operational Openstack dengan Command Line.\nReferensi https://docs.openstack.org/kolla-ansible/2024.2 https://docs.openstack.org/kolla-ansible/2024.2/user/quickstart-development.html https://docs.openstack.org/kolla-ansible/2024.2/user/multinode.html ","permalink":"http://vikipranata.is-a.dev/id/posts/openstack-kolla-ansible-2024.2/","summary":"\u003ch2 id=\"persiapan\"\u003e\u003cem\u003ePersiapan\u003c/em\u003e\u003c/h2\u003e\n\u003cp\u003eSaya menggunakan lima node VM untuk proyek lab rumah ini dengan 16 Core, 16GB Memori, dan 40GB untuk root disk dengan sistem operasi \u003cem\u003eUbuntu 22.04.5 LTS\u003c/em\u003e.\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e\u003cem\u003eHostname Node\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003ePeran Node\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003evCPU\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003eMemori\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003eRootDisk\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003eManagementNet\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003eStorageNet\u003c/em\u003e\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ebtnlab01adm01\u003c/td\u003e\n          \u003ctd\u003eAnsible\u003c/td\u003e\n          \u003ctd\u003e2 Core\u003c/td\u003e\n          \u003ctd\u003e2GB\u003c/td\u003e\n          \u003ctd\u003e20GB\u003c/td\u003e\n          \u003ctd\u003e10.78.78.199\u003c/td\u003e\n          \u003ctd\u003e-\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ebtnlab01con01\u003c/td\u003e\n          \u003ctd\u003eController\u003c/td\u003e\n          \u003ctd\u003e16 Core\u003c/td\u003e\n          \u003ctd\u003e16GB\u003c/td\u003e\n          \u003ctd\u003e40GB\u003c/td\u003e\n          \u003ctd\u003e10.78.78.201\u003c/td\u003e\n          \u003ctd\u003e10.79.79.201\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ebtnlab01con02\u003c/td\u003e\n          \u003ctd\u003eController\u003c/td\u003e\n          \u003ctd\u003e16 Core\u003c/td\u003e\n          \u003ctd\u003e16GB\u003c/td\u003e\n          \u003ctd\u003e40GB\u003c/td\u003e\n          \u003ctd\u003e10.78.78.202\u003c/td\u003e\n          \u003ctd\u003e10.79.79.202\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ebtnlab01con03\u003c/td\u003e\n          \u003ctd\u003eController\u003c/td\u003e\n          \u003ctd\u003e16 Core\u003c/td\u003e\n          \u003ctd\u003e16GB\u003c/td\u003e\n          \u003ctd\u003e40GB\u003c/td\u003e\n          \u003ctd\u003e10.78.78.203\u003c/td\u003e\n          \u003ctd\u003e10.79.79.203\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ebtnlab01hpv01\u003c/td\u003e\n          \u003ctd\u003eHypervisor\u003c/td\u003e\n          \u003ctd\u003e32 Core\u003c/td\u003e\n          \u003ctd\u003e32GB\u003c/td\u003e\n          \u003ctd\u003e40GB\u003c/td\u003e\n          \u003ctd\u003e10.78.78.204\u003c/td\u003e\n          \u003ctd\u003e10.79.79.204\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ebtnlab01hpv02\u003c/td\u003e\n          \u003ctd\u003eHypervisor\u003c/td\u003e\n          \u003ctd\u003e32 Core\u003c/td\u003e\n          \u003ctd\u003e32GB\u003c/td\u003e\n          \u003ctd\u003e40GB\u003c/td\u003e\n          \u003ctd\u003e10.78.78.205\u003c/td\u003e\n          \u003ctd\u003e10.79.79.205\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003ePemetaan interface:\u003c/p\u003e","title":"Openstack 2024.2 dengan Kolla Ansible"},{"content":"Persiapan Saya menggunakan tiga node VM untuk proyek lab rumah ini dengan 8 Core, 8GB Memori, dan 20GB untuk root disk. Pada interface ClusterNet menggunakan Jumbo Frame dengan sistem operasi Rocky Linux 8.10.\nHostname Node vCPU Memori RootDisk PublicNet ClusterNet btnlab01ceph01 8 Core 8GB 20GB 10.78.78.221 10.79.79.221 btnlab01ceph02 8 Core 8GB 20GB 10.78.78.222 10.79.79.222 btnlab01ceph03 8 Core 8GB 20GB 10.78.78.223 10.79.79.223 Kemudian saya menambahkan 4 hard disk masing-masing berkapasitas 50GB yang digunakan untuk OSD.\nSemua operasi menggunakan user root, harap berhati-hati saat menjalankan perintah!\nOpsional: Setel SElinux ke mode permissive untuk lingkungan pengembangan\nsetenforce 0 sed -i \u0026#39;s/^SELINUX=enforcing$/SELINUX=permissive/\u0026#39; /etc/selinux/config Instalasi paket dan dependensi dnf install -y epel-release dnf install -y bash-completion tmux nano htop iftop iotop podman lvm2 Unduh file binary cephadm dan tambahkan repository ceph reef CEPH_RELEASE=18.2.0 curl --silent --remote-name --location https://download.ceph.com/rpm-${CEPH_RELEASE}/el9/noarch/cephadm mv cephadm /usr/bin; chmod +x /usr/bin/cephadm cephadm add-repo --release $CEPH_RELEASE Bootstrapping Cluster Dengan cephadm Jalankan di node pertama Mapping hostname statis di /etc/hosts\ncat \u0026lt;\u0026lt;EOF | tee -a /etc/hosts 10.78.78.221 btnlab01ceph01 btnlab01ceph01.homelab.is-a.dev 10.78.78.222 btnlab01ceph02 btnlab01ceph02.homelab.is-a.dev 10.78.78.223 btnlab01ceph03 btnlab01ceph03.homelab.is-a.dev EOF cephadm install cephadm install ceph-common cephadm bootstrap --mon-ip=10.78.78.221 \\ --skip-mon-network --allow-fqdn-hostname | tee cephadm-bootstrap.log Pesan sukses bootstrap selesai\nSalin ssh public key ke semua node\nfor node in btnlab01con0{2..3}; do ssh-copy-id -f -i /etc/ceph/ceph.pub root@$node sleep 2 done Setelah bootstrap selesai, tambahkan public network ceph dengan perintah berikut.\nceph config set host public_network 10.79.79.0/24 Tambahkan node lain lalu sesuaikan placement pgs\nceph orch host add btnlab01ceph02 10.78.78.222 ceph orch host add btnlab01ceph03 10.78.78.223 ceph orch apply mgr --placement=\u0026#34;3 btnlab01ceph01 btnlab01ceph02 btnlab01ceph03\u0026#34; ceph orch apply mon --placement=\u0026#34;btnlab01ceph01,btnlab01ceph02,btnlab01ceph03\u0026#34; Label semua node for node in btnlab01ceph0{1..3}; do ceph orch host label add $node mon ceph orch host label add $node mgr ceph orch host label add $node osd done Tambahkan osd dari semua disk yang tersedia ceph orch apply osd --all-available-devices --method raw ceph orch host ls ceph orch device ls Sekarang kita bisa memonitor cluster ceph dengan perintah ceph -s\nMembuat pool dan ceph keyring untuk beberapa layanan Cinder Cinder Backup for pool_name in cinder cinder-backup; do ceph osd pool create $pool_name rbd pool init $pool_name done ceph auth get-or-create client.cinder \\ mon \u0026#39;allow r\u0026#39; osd \u0026#39;allow class-read object_prefix rbd_children, allow rwx pool=cinder, allow rwx pool=nova\u0026#39; \\ -o /etc/ceph/ceph.client.cinder.keyring ceph auth get-or-create client.cinder-backup \\ mon \u0026#39;allow r\u0026#39; osd \u0026#39;allow class-read object_prefix rbd_children, allow rwx pool=cinder-backup\u0026#39; \\ -o /etc/ceph/ceph.client.cinder-backup.keyring Keyring ini akan digunakan untuk cluster openstack yang akan kita buat pada postingan Openstack 2024.2 dengan Kolla Ansible.\nSekarang kita bisa mengakses dashboard ceph melalui browser https://btnlab01ceph01.homelab.is-a.dev:8443 dengan kredensial yang didapatkan dari proses bootstrap.\nReferensi https://docs.ceph.com/en/reef/cephadm/install https://docs.ceph.com/en/reef/mgr/orchestrator https://docs.ceph.com/en/reef/rados/operations/pools https://docs.ceph.com/en/reef/rados/operations/user-management ","permalink":"http://vikipranata.is-a.dev/id/posts/ceph-reef-deployment/","summary":"\u003ch2 id=\"persiapan\"\u003e\u003cem\u003ePersiapan\u003c/em\u003e\u003c/h2\u003e\n\u003cp\u003eSaya menggunakan tiga node VM untuk proyek lab rumah ini dengan 8 Core, 8GB Memori, dan 20GB untuk root disk. Pada interface ClusterNet menggunakan \u003ca href=\"https://ceph.io/en/news/blog/2015/ceph-loves-jumbo-frames/\"\u003eJumbo Frame\u003c/a\u003e dengan sistem operasi \u003cem\u003eRocky Linux 8.10\u003c/em\u003e.\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e\u003cem\u003eHostname Node\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003evCPU\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003eMemori\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003eRootDisk\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003ePublicNet\u003c/em\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cem\u003eClusterNet\u003c/em\u003e\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ebtnlab01ceph01\u003c/td\u003e\n          \u003ctd\u003e8 Core\u003c/td\u003e\n          \u003ctd\u003e8GB\u003c/td\u003e\n          \u003ctd\u003e20GB\u003c/td\u003e\n          \u003ctd\u003e10.78.78.221\u003c/td\u003e\n          \u003ctd\u003e10.79.79.221\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ebtnlab01ceph02\u003c/td\u003e\n          \u003ctd\u003e8 Core\u003c/td\u003e\n          \u003ctd\u003e8GB\u003c/td\u003e\n          \u003ctd\u003e20GB\u003c/td\u003e\n          \u003ctd\u003e10.78.78.222\u003c/td\u003e\n          \u003ctd\u003e10.79.79.222\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ebtnlab01ceph03\u003c/td\u003e\n          \u003ctd\u003e8 Core\u003c/td\u003e\n          \u003ctd\u003e8GB\u003c/td\u003e\n          \u003ctd\u003e20GB\u003c/td\u003e\n          \u003ctd\u003e10.78.78.223\u003c/td\u003e\n          \u003ctd\u003e10.79.79.223\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eKemudian saya menambahkan 4 hard disk masing-masing berkapasitas 50GB yang digunakan untuk OSD.\u003c/p\u003e","title":"Deploy Ceph Reef"},{"content":"Instalasi Paket Dependensi dnf install -y keepalived Konfigurasi Keepalived Referensi status Keepalived\nMASTER-MASTER (jika down, kembali ke prioritas tertinggi) MASTER-BACKUP (jika down, kembali ke MASTER) BACKUP-BACKUP (jika down, mengikuti node dengan status MASTER) Router dengan prioritas 101 akan menjadi MASTER dan router dengan prioritas 100 akan menjadi BACKUP. Konfigurasi Node Pertama cat \u0026lt;\u0026lt;EOF | tee /etc/keepalived/keepalived.conf global_defs { router_id JumpServer enable_script_security vrrp_check_unicast_src } vrrp_track_process track_openvpn { process openvpn weight 2 } vrrp_instance VIP { state MASTER interface eth1 virtual_router_id 69 priority 101 advert_int 1 nopreempt authentication { auth_type PASS auth_pass Pa\\$\\$w0rd } unicast_src_ip 10.79.80.1 unicast_peer { 10.79.80.2 } virtual_ipaddress { 103.150.80.130/28 dev eth0 10.79.80.254/24 dev eth1 } virtual_routes { 0.0.0.0/0 via 103.150.80.142 dev eth0 metric 100 } static_routes { 0.0.0.0/0 via 10.79.80.251 dev eth1 metric 101 } track_process { track_openvpn } } EOF Mulai ulang layanan dan jalankan saat sistem dinyalakan\nsystemctl restart keepalived; systemctl enable keepalived Konfigurasi Node Kedua cat \u0026lt;\u0026lt;EOF | tee /etc/keepalived/keepalived.conf global_defs { router_id JumpServer enable_script_security vrrp_check_unicast_src } vrrp_track_process track_openvpn { process openvpn weight 2 } vrrp_instance VIP { state BACKUP interface eth1 virtual_router_id 69 priority 100 advert_int 1 authentication { auth_type PASS auth_pass Pa\\$\\$w0rd } unicast_src_ip 10.79.80.2 unicast_peer { 10.79.80.1 } virtual_ipaddress { 104.18.5.103/28 dev eth0 10.79.80.254/24 dev eth1 } virtual_routes { 0.0.0.0/0 via 103.150.80.142 dev eth0 metric 100 } static_routes { 0.0.0.0/0 via 10.79.80.251 dev eth1 metric 101 } track_process { track_openvpn } } EOF Mulai ulang layanan dan jalankan saat sistem dinyalakan\nsystemctl restart keepalived; systemctl enable keepalived Custom Health Check Jika ingin menggunakan skrip custom untuk health check, ubah atau sesuaikan file keepalived.conf seperti berikut.\nvrrp_script healthcheck { script \u0026#34;/bin/bash /etc/keepalived/healthcheck.sh\u0026#34; user root root interval 2 weight 2 } vrrp_instance VIP { ... track_script { healthcheck } ... } dan buat skrip bash healthcheck.sh seperti ini\n#!/bin/bash TARGET_URL=\u0026#34;https://127.0.0.1:443\u0026#34; USER_AGENT=$(keepalived -v 2\u0026gt;\u0026amp;1 | awk \u0026#39;/Keepalived/ {print $1\u0026#34;/\u0026#34;$2}\u0026#39;) curl --head \\ --silent \\ --insecure \\ --max-time 1 \\ --header \u0026#34;Via: $HOSTNAME\u0026#34; \\ --header \u0026#34;User-Agent: $USER_AGENT\u0026#34; \\ --request GET \u0026#34;$TARGET_URL\u0026#34; -o /dev/null echo \u0026#34;Result code $?\u0026#34; exit $? Jika SELinux dalam mode Enforcing, tambahkan modul berikut\nsemodule -r keepalived-health-check cat \u0026lt;\u0026lt;EOF | tee keepalived-health-check.te module keepalived-health-check 1.0; require { type shell_exec_t; type keepalived_t; type keepalived_exec_t; type unreserved_port_t; type hostname_exec_t; class file { getattr setattr execute execute_no_trans open read map }; class tcp_socket name_connect; } #============= keepalived_t ============== allow keepalived_t shell_exec_t:file setattr; allow keepalived_t unreserved_port_t:tcp_socket name_connect; allow keepalived_t keepalived_exec_t:file { execute_no_trans open }; allow keepalived_t hostname_exec_t:file { getattr execute execute_no_trans open read }; #!!!! This avc can be allowed using the boolean \u0026#39;domain_can_mmap_files\u0026#39; allow keepalived_t hostname_exec_t:file map; EOF checkmodule -M -m -o keepalived-health-check.mod keepalived-health-check.te semodule_package -o keepalived-health-check.pp -m keepalived-health-check.mod semodule -i keepalived-health-check.pp sealert -a /var/log/audit/audit.log Troubleshooting dengan keepalived debug\nkeepalived -nldD Referensi:\nhttps://www.redhat.com/sysadmin/advanced-keepalived https://access.redhat.com/solutions/3220521 https://manpages.debian.org/testing/keepalived/keepalived.conf.5.en.html https://github.com/sandervanvugt/cka/blob/master/check_apiserver.sh ","permalink":"http://vikipranata.is-a.dev/id/posts/high-availability-keepalived/","summary":"\u003ch1 id=\"instalasi-paket-dependensi\"\u003e\u003cstrong\u003eInstalasi Paket Dependensi\u003c/strong\u003e\u003c/h1\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ednf install -y keepalived\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch1 id=\"konfigurasi-keepalived\"\u003e\u003cstrong\u003eKonfigurasi Keepalived\u003c/strong\u003e\u003c/h1\u003e\n\u003cp\u003eReferensi status Keepalived\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMASTER-MASTER (jika down, kembali ke prioritas tertinggi)\u003c/li\u003e\n\u003cli\u003eMASTER-BACKUP (jika down, kembali ke MASTER)\u003c/li\u003e\n\u003cli\u003eBACKUP-BACKUP (jika down, mengikuti node dengan status MASTER)\u003c/li\u003e\n\u003cli\u003eRouter dengan prioritas 101 akan menjadi MASTER dan router dengan prioritas 100 akan menjadi BACKUP.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"konfigurasi-node-pertama\"\u003eKonfigurasi Node Pertama\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecat \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt;EOF | tee /etc/keepalived/keepalived.conf\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eglobal_defs {\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    router_id JumpServer\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    enable_script_security\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    vrrp_check_unicast_src\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003evrrp_track_process track_openvpn {\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    process openvpn\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    weight 2\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003evrrp_instance VIP {\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    state MASTER\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    interface eth1\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    virtual_router_id 69\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    priority 101\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    advert_int 1\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    nopreempt\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    authentication {\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e        auth_type PASS\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e        auth_pass Pa\\$\\$w0rd\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    unicast_src_ip 10.79.80.1\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    unicast_peer {\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e        10.79.80.2\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    virtual_ipaddress {\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e        103.150.80.130/28 dev eth0\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e        10.79.80.254/24 dev eth1\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    virtual_routes {\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e        0.0.0.0/0 via 103.150.80.142 dev eth0 metric 100\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    static_routes {\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e        0.0.0.0/0 via 10.79.80.251 dev eth1 metric 101\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    track_process {\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e        track_openvpn\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eEOF\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eMulai ulang layanan dan jalankan saat sistem dinyalakan\u003c/p\u003e","title":"High Availability dengan Keepalived"},{"content":"Instalasi Paket Dependensi dnf install -y epel-release dnf install -y openvpn openssl easy-rsa policycoreutils-python-utils Membuat dan Menyiapkan Sertifikat Server OpenVPN Set variabel environment untuk easy_rsa\ncat \u0026lt;\u0026lt;EOF | tee vars set_var EASYRSA_ALGO ec set_var EASYRSA_CURVE prime256v1 set_var EASYRSA_CA_EXPIRE 3650 set_var EASYRSA_CERT_EXPIRE 3650 set_var EASYRSA_CRL_DAYS 3650 EOF Kemudian jalankan ./easyresa init-pki\nBuat certificate authority (CA) dan sertifikat server.\nSERVER_CN=jumpserver SERVER_NAME=jumpserver ./easyrsa --batch --req-cn=\u0026#34;$SERVER_CN\u0026#34; build-ca nopass ./easyrsa --batch build-server-full \u0026#34;$SERVER_NAME\u0026#34; nopass ./easyrsa gen-crl Pindahkan semua file yang dihasilkan ke direktori /etc/openvpn/cert\nmkdir -p /etc/openvpn/cert cp pki/ca.crt \\ pki/crl.pem \\ pki/private/ca.key \\ \u0026#34;pki/issued/$SERVER_NAME.crt\u0026#34; \\ \u0026#34;pki/private/$SERVER_NAME.key\u0026#34; \\ /etc/openvpn/cert Generate tls-crypt key untuk meningkatkan keamanan\nopenvpn --genkey secret /etc/openvpn/server/tls-crypt.key Membuat Konfigurasi Server Konfigurasi server default berada di /usr/share/doc/openvpn/sample/sample-config-files/server.conf\ncat \u0026lt;\u0026lt;EOF | tee /etc/openvpn/server/server.conf port 1194 proto udp dev tun user nobody group nobody persist-key persist-tun keepalive 10 120 topology subnet server 10.79.83.0 255.255.255.0 push \u0026#34;route 10.79.80.0 255.255.255.0\u0026#34; push \u0026#34;dhcp-option DNS 10.79.80.254\u0026#34; push \u0026#34;dhcp-option DOMAIN lab.tworty.id\u0026#34; client-config-dir /etc/openvpn/client/ccd ifconfig-pool-persist /etc/openvpn/client/persistent-ip.list dh none ecdh-curve prime256v1 auth SHA256 cipher AES-128-GCM data-ciphers AES-128-GCM ca /etc/openvpn/cert/ca.crt cert /etc/openvpn/cert/jumpserver.crt key /etc/openvpn/cert/jumpserver.key crl-verify /etc/openvpn/cert/crl.pem tls-crypt /etc/openvpn/cert/tls-crypt.key tls-server tls-version-min 1.2 tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 status /var/log/openvpn/status.log log-append /var/log/openvpn/openvpn.log verb 3 EOF Tambahkan duplicate-cn ke /etc/openvpn/server/server.conf jika Anda membutuhkan beberapa koneksi VPN dengan CN yang sama. Jika menggunakan RHEL, ubah direktif group dari nogroup menjadi nobody agar sesuai dengan grup yang tersedia di distribusi.\nRouting, Kernel dan Konfigurasi Firewall Tambahkan routing policy\nnmcli device modify eth1 +ipv4.routes \u0026#34;10.79.83.0/24 10.79.80.254\u0026#34; nmcli connection modify \u0026#39;System eth1\u0026#39; +ipv4.routes \u0026#34;10.79.83.0/24 10.79.80.254\u0026#34; Tambahkan parameter kernel untuk ip forwarding\ncat \u0026lt;\u0026lt;EOF | tee /etc/sysctl.d/ipv4_forward.conf net.ipv4.ip_forward = 1 EOF sysctl -p Tambahkan konfigurasi firewall menggunakan firewalld\nfirewall-cmd --get-active-zones firewall-cmd --permanent --add-service openvpn firewall-cmd --permanent --zone=internal --add-source=10.79.80.0/22 firewall-cmd --reload atau port dan protokol spesifik dengan firewall-cmd --permanent --add-port=1194/udp\nKonfigurasi SELinux semanage port -a -t openvpn_port_t -p udp 1194 Jika ada masalah dengan kebijakan SElinux gunakan audit sealert -a /var/log/audit/audit.log ausearch -c \u0026#39;openvpn\u0026#39; --raw | audit2allow -M openvpn-custom Membuat Konfigurasi Client Konfigurasi server default berada di /usr/share/doc/openvpn/sample/sample-config-files/client.conf\nYOUR_IP=$(curl -sL ipinfo.io/ip) cat \u0026lt;\u0026lt;EOF | tee /etc/openvpn/client/client.ovpn client proto udp explicit-exit-notify remote $YOUR_IP 1194 dev tun resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server verify-x509-name jumpserver name auth SHA256 auth-nocache cipher AES-128-GCM tls-client tls-version-min 1.2 tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 verb 3 EOF Membuat Sertifikat Client CLIENT_NAME=jumpserver-client ./easyrsa --batch build-client-full \u0026#34;$CLIENT_NAME\u0026#34; nopass Masukkan file certificate authority\n{ echo \u0026#34;\u0026lt;ca\u0026gt;\u0026#34; cat /etc/openvpn/cert/ca.crt echo \u0026#34;\u0026lt;/ca\u0026gt;\u0026#34; } | tee -a /etc/openvpn/client/client.ovpn Masukkan file sertifikat\n{ echo \u0026#34;\u0026lt;cert\u0026gt;\u0026#34; awk \u0026#39;/BEGIN/,/END/\u0026#39; /etc/openvpn/easy-rsa/3/pki/issued/$CLIENT_NAME.crt echo \u0026#34;\u0026lt;/cert\u0026gt;\u0026#34; } | tee -a /etc/openvpn/client/client.ovpn Masukkan file key sertifikat\n{ echo \u0026#34;\u0026lt;key\u0026gt;\u0026#34; cat /etc/openvpn/easy-rsa/3/pki/private/$CLIENT_NAME.key echo \u0026#34;\u0026lt;/key\u0026gt;\u0026#34; } | tee -a /etc/openvpn/client/client.ovpn Masukkan file tls-crypt key\n{ echo \u0026#34;\u0026lt;tls-crypt\u0026gt;\u0026#34; awk \u0026#39;/BEGIN/,/END/\u0026#39; /etc/openvpn/cert/tls-crypt.key echo \u0026#34;\u0026lt;/tls-crypt\u0026gt;\u0026#34; } | tee -a /etc/openvpn/client/client.ovpn Sekarang konfigurasi client sudah selesai di /etc/openvpn/client/client.ovpn\nSetup logging dan logrotate Buat direktori log terlebih dahulu\nmkdir -p /var/log/openvpn Kemudian buat kebijakan logrotate\ncat \u0026lt;\u0026lt;EOF | tee /etc/logrotate.d/openvpn /var/log/openvpn/*.log { daily missingok rotate 7 compress delaycompress notifempty create 0640 root root sharedscripts postrotate /bin/systemctl reload openvpn-server@server \u0026gt; /dev/null 2\u0026gt;\u0026amp;1 || true endscript } EOF Pastikan konfigurasi logrotate\nlogrotate -d /etc/logrotate.d/openvpn Autentikasi menggunakan Linux PAM dan OTP Berikut contoh kebijakan SElinux untuk OpenVPN dengan Google Authenticator\ncat \u0026lt;\u0026lt;EOF | tee openvpn-custom.te module openvpn-custom 1.0; require { type openvpn_t; type user_home_t; type auth_home_t; type user_home_dir_t; class file { create getattr open read rename setattr unlink write }; class dir { read write add_name remove_name }; } #============= openvpn_t ============== # Allow openvpn to access auth_home_t files allow openvpn_t auth_home_t:file { open read unlink }; # Allow openvpn to access user_home_t directories and files allow openvpn_t user_home_dir_t:dir { read write add_name remove_name }; allow openvpn_t user_home_t:dir { read write add_name remove_name }; allow openvpn_t user_home_t:file { create getattr open read rename setattr unlink write }; EOF checkmodule -M -m -o openvpn-custom.mod openvpn-custom.te semodule_package -o openvpn-custom.pp -m openvpn-custom.mod semodule -i openvpn-custom.pp Tambahkan context untuk direktori home custom\nsemanage fcontext -a -t auth_home_t /home/lab.tworty.id/[^/]+/\\.google_authenticator semanage fcontext -a -t auth_home_t /home/lab.tworty.id/[^/]+/\\.google_authenticator~ restorecon -rv /home Instalasi paket dan setup kebijakan PAM\ndnf install -y google-authenticator qrencode cat \u0026lt;\u0026lt;EOF | tee /etc/pam.d/openvpn auth required pam_google_authenticator.so forward_pass auth include system-auth account include system-auth password include system-auth session include system-auth EOF Ganti konfigurasi server dengan nilai berikut\ncat \u0026lt;\u0026lt;EOF | tee -a /etc/openvpn/server/server.conf port 1194 proto udp dev tun user nobody group nobody persist-key persist-tun keepalive 10 120 topology subnet server 10.79.83.0 255.255.255.0 push \u0026#34;route 10.79.80.0 255.255.255.0\u0026#34; push \u0026#34;dhcp-option DNS 10.79.80.254\u0026#34; push \u0026#34;dhcp-option DOMAIN lab.tworty.id\u0026#34; client-config-dir /etc/openvpn/client/ccd ifconfig-pool-persist /etc/openvpn/client/persistent-ip.list dh none ecdh-curve prime256v1 auth SHA256 cipher AES-128-GCM data-ciphers AES-128-GCM ca /etc/openvpn/cert/ca.crt cert /etc/openvpn/cert/jumpserver.crt key /etc/openvpn/cert/jumpserver.key crl-verify /etc/openvpn/cert/crl.pem tls-crypt /etc/openvpn/cert/tls-crypt.key tls-server tls-version-min 1.2 tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 status /var/log/openvpn/status.log log-append /var/log/openvpn/openvpn.log plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn username-as-common-name duplicate-cn reneg-sec 0 verb 3 EOF Update file service systemd openvpn, berdasarkan issue ini lalu restart service\ncp -r /usr/lib/systemd/system/openvpn-server@.service /etc/systemd/system sed -i \u0026#39;s/^ProtectHome=true/ProtectHome=false/\u0026#39; /etc/systemd/system/openvpn-server@.service systemctl daemon-reload systemctl restart openvpn-server@server.service Tambahkan konfigurasi berikut agar saat membuat user baru atau login user harus membuat multi factor authenticator\ncat \u0026lt;\u0026lt;EOF | tee -a /etc/skel/.bashrc if [ ! -f ~/.google_authenticator ]; then echo \u0026#34;Google Authenticator configuration file not found.\u0026#34; echo \u0026#34;Setting up Google Authenticator...\u0026#34; ","permalink":"http://vikipranata.is-a.dev/id/posts/linux-openvpn-server/","summary":"\u003ch2 id=\"instalasi-paket-dependensi\"\u003e\u003cem\u003eInstalasi Paket Dependensi\u003c/em\u003e\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ednf install -y epel-release\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ednf install -y openvpn openssl easy-rsa policycoreutils-python-utils \n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"membuat-dan-menyiapkan-sertifikat-server-openvpn\"\u003e\u003cem\u003eMembuat dan Menyiapkan Sertifikat Server OpenVPN\u003c/em\u003e\u003c/h2\u003e\n\u003cp\u003eSet variabel environment untuk easy_rsa\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecat \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt;EOF | tee vars\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eset_var EASYRSA_ALGO ec\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eset_var EASYRSA_CURVE prime256v1\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eset_var EASYRSA_CA_EXPIRE 3650\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eset_var EASYRSA_CERT_EXPIRE 3650\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eset_var EASYRSA_CRL_DAYS 3650\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eEOF\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eKemudian jalankan \u003ccode\u003e./easyresa init-pki\u003c/code\u003e\u003cbr\u003e\n\u003cimg alt=\"init-pki\" loading=\"lazy\" src=\"/posts/linux-openvpn-server/uploads/init-pki.webp\"\u003e\u003c/p\u003e\n\u003cp\u003eBuat certificate authority (CA) dan sertifikat server.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eSERVER_CN\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003ejumpserver\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eSERVER_NAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003ejumpserver\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e./easyrsa --batch --req-cn\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$SERVER_CN\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e build-ca nopass\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e./easyrsa --batch build-server-full \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$SERVER_NAME\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e nopass\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e./easyrsa gen-crl\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cimg alt=\"create-ca-cert\" loading=\"lazy\" src=\"/posts/linux-openvpn-server/uploads/create-ca-cert.webp\"\u003e\u003c/p\u003e","title":"Linux OpenVPN Server dengan Google Authenticator"},{"content":"Setelah kita Setup Active Directory Server di Windows Server 2022 sekarang kita bisa menggunakan User LDAP/AD ini untuk login ke lingkungan server.\nJoin Active Directory dan Konfigurasi Login dengan User AD Instalasi paket yang dibutuhkan\ndnf install -y realmd oddjob oddjob-mkhomedir sssd adcli samba-common-tools Setel dns server ke server AD\ncat \u0026lt;\u0026lt;EOF | tee -a /etc/resolv.conf search lab.homelab.is-a.dev nameserver 10.79.80.3 EOF Discover ke server AD\nrealm discover lab.homelab.is-a.dev Join host linux ke server AD\nrealm join lab.homelab.is-a.dev -U Administrator Sesuaikan konfigurasi di file /etc/sssd/sssd.conf\n[sssd] domains = lab.homelab.is-a.dev config_file_version = 2 services = nss, pam [domain/lab.homelab.is-a.dev] default_shell = /bin/bash krb5_store_password_if_offline = True cache_credentials = True krb5_realm = lab.homelab.is-a.dev realmd_tags = manages-system joined-with-adcli id_provider = ad fallback_homedir = /home/%d/%u ad_domain = lab.homelab.is-a.dev use_fully_qualified_names = False ldap_id_mapping = True access_provider = simple Kemudian restart servicenya\nsystemctl restart sssd.service Setup konfigurasi sudo untuk User AD\ncat \u0026lt;\u0026lt;EOF | tee /etc/sudoers.d/ad-users %administrators ALL=(ALL) ALL %operations\\ team ALL=(ALL) ALL EOF Anda juga bisa membatasi akses ssh dengan menambahkan konfigurasi berikut\ncat \u0026lt;\u0026lt;EOF | tee -a /etc/ssh/sshd_config Allowgroups administrators \u0026#34;operations team\u0026#34; cloud-admin EOF systemctl restart sshd.service Masalah \u0026ldquo;KDC has no support for encryption type\u0026rdquo; Cek file konfigurasi di /etc/krb5.conf lalu sesuaikan nilainya seperti berikut\ndefault_realm = LAB.HOMELAB.IS-A.DEV default_tgs_enctypes = arcfour-hmac-md5 des-cbc-crc des-cbc-md5 default_tkt_enctypes = arcfour-hmac-md5 des-cbc-crc des-cbc-md5 Referensi:\nhttps://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/system-level_authentication_guide/sssd https://discussion.fedoraproject.org/t/kdc-has-no-support-for-encryption-type/77540/3 ","permalink":"http://vikipranata.is-a.dev/id/posts/linux-join-ad/","summary":"\u003cp\u003eSetelah kita \u003ca href=\"../setup-active-directory-server\"\u003eSetup Active Directory Server di Windows Server 2022\u003c/a\u003e sekarang kita bisa menggunakan User LDAP/AD ini untuk login ke lingkungan server.\u003c/p\u003e\n\u003ch2 id=\"join-active-directory-dan-konfigurasi-login-dengan-user-ad\"\u003eJoin Active Directory dan Konfigurasi Login dengan User AD\u003c/h2\u003e\n\u003cp\u003eInstalasi paket yang dibutuhkan\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ednf install -y realmd oddjob oddjob-mkhomedir sssd adcli samba-common-tools\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eSetel dns server ke server AD\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecat \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt;EOF | tee -a /etc/resolv.conf\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003esearch lab.homelab.is-a.dev\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003enameserver 10.79.80.3\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eEOF\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eDiscover ke server AD\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erealm discover lab.homelab.is-a.dev\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cimg alt=\"realm-discover\" loading=\"lazy\" src=\"/posts/linux-join-ad/uploads/realm-discover.webp\"\u003e\u003c/p\u003e\n\u003cp\u003eJoin host linux ke server AD\u003c/p\u003e","title":"Linux Join Active Directory"},{"content":" Halaman ini masih dalam proses pengerjaan\nSetup Active Directory Domain Services Setup selesai dan server akan melakukan restart.\nMembuat Organizational Unit dan Security Group Membuat User dan Menambahkan ke Security Group Menambahkan Domain Controller ke Domain yang Sudah Ada Setup selesai dan server akan melakukan restart.\n","permalink":"http://vikipranata.is-a.dev/id/posts/setup-active-directory-server/","summary":"\u003cblockquote\u003e\n\u003cp\u003eHalaman ini masih dalam proses pengerjaan\u003c/p\u003e\u003c/blockquote\u003e\n\u003ch2 id=\"setup-active-directory-domain-services\"\u003eSetup Active Directory Domain Services\u003c/h2\u003e\n\u003cp\u003e\u003cimg alt=\"Langkah 1\" loading=\"lazy\" src=\"/posts/setup-active-directory-server/uploads/1.webp\"\u003e \u003cbr\u003e\n\u003cimg alt=\"Langkah 2\" loading=\"lazy\" src=\"/posts/setup-active-directory-server/uploads/2.webp\"\u003e \u003cbr\u003e\n\u003cimg alt=\"Langkah 3\" loading=\"lazy\" src=\"/posts/setup-active-directory-server/uploads/3.webp\"\u003e \u003cbr\u003e\n\u003cimg alt=\"Langkah 4\" loading=\"lazy\" src=\"/posts/setup-active-directory-server/uploads/4.webp\"\u003e \u003cbr\u003e\n\u003cimg alt=\"Langkah 5\" loading=\"lazy\" src=\"/posts/setup-active-directory-server/uploads/5.webp\"\u003e \u003cbr\u003e\n\u003cimg alt=\"Langkah 6\" loading=\"lazy\" src=\"/posts/setup-active-directory-server/uploads/6.webp\"\u003e \u003cbr\u003e\n\u003cimg alt=\"Langkah 7\" loading=\"lazy\" src=\"/posts/setup-active-directory-server/uploads/7.webp\"\u003e \u003cbr\u003e\n\u003cimg alt=\"Langkah 8\" loading=\"lazy\" src=\"/posts/setup-active-directory-server/uploads/8.webp\"\u003e \u003cbr\u003e\n\u003cimg alt=\"Langkah 9\" loading=\"lazy\" src=\"/posts/setup-active-directory-server/uploads/9.webp\"\u003e \u003cbr\u003e\n\u003cimg alt=\"Langkah 10\" loading=\"lazy\" src=\"/posts/setup-active-directory-server/uploads/10.webp\"\u003e\u003c/p\u003e\n\u003cp\u003eSetup selesai dan server akan melakukan restart.\u003c/p\u003e\n\u003ch2 id=\"membuat-organizational-unit-dan-security-group\"\u003eMembuat Organizational Unit dan Security Group\u003c/h2\u003e\n\u003cp\u003e\u003cimg alt=\"Langkah 11\" loading=\"lazy\" src=\"/posts/setup-active-directory-server/uploads/11.webp\"\u003e \u003cbr\u003e\n\u003cimg alt=\"Langkah 12\" loading=\"lazy\" src=\"/posts/setup-active-directory-server/uploads/12.webp\"\u003e\u003c/p\u003e\n\u003ch2 id=\"membuat-user-dan-menambahkan-ke-security-group\"\u003eMembuat User dan Menambahkan ke Security Group\u003c/h2\u003e\n\u003cp\u003e\u003cimg alt=\"Langkah 13\" loading=\"lazy\" src=\"/posts/setup-active-directory-server/uploads/13.webp\"\u003e \u003cbr\u003e\n\u003cimg alt=\"Langkah 14\" loading=\"lazy\" src=\"/posts/setup-active-directory-server/uploads/14.webp\"\u003e\u003c/p\u003e\n\u003ch2 id=\"menambahkan-domain-controller-ke-domain-yang-sudah-ada\"\u003eMenambahkan Domain Controller ke Domain yang Sudah Ada\u003c/h2\u003e\n\u003cp\u003e\u003cimg alt=\"Langkah 15\" loading=\"lazy\" src=\"/posts/setup-active-directory-server/uploads/15.webp\"\u003e\u003cbr\u003e\n\u003cimg alt=\"Langkah 16\" loading=\"lazy\" src=\"/posts/setup-active-directory-server/uploads/16.webp\"\u003e\u003cbr\u003e\n\u003cimg alt=\"Langkah 17\" loading=\"lazy\" src=\"/posts/setup-active-directory-server/uploads/17.webp\"\u003e\u003cbr\u003e\n\u003cimg alt=\"Langkah 18\" loading=\"lazy\" src=\"/posts/setup-active-directory-server/uploads/18.webp\"\u003e\u003cbr\u003e\n\u003cimg alt=\"Langkah 19\" loading=\"lazy\" src=\"/posts/setup-active-directory-server/uploads/19.webp\"\u003e\u003cbr\u003e\n\u003cimg alt=\"Langkah 20\" loading=\"lazy\" src=\"/posts/setup-active-directory-server/uploads/20.webp\"\u003e\u003c/p\u003e\n\u003cp\u003eSetup selesai dan server akan melakukan restart.\u003c/p\u003e","title":"Setup Active Directory Server dengan Windows Server 2022"},{"content":"Konfigurasi NAT Forwarding di Linux Aktifkan parameter kernel\necho \u0026#39;net.ipv4.ip_forward = 1\u0026#39; \u0026gt; /etc/sysctl.d/99-forwarding.conf sysctl --system Konfigurasi firewalld\nnmcli connection migrate nmcli connection modify eth0 connection.zone public nmcli device modify eth0 connection.zone public nmcli connection modify eth1 connection.zone internal nmcli device modify eth1 connection.zone internal firewall-cmd --permanent --zone=public --add-masquerade firewall-cmd --permanent --new-policy NAT-int-to-ext firewall-cmd --permanent --policy NAT-int-to-ext --add-ingress-zone internal firewall-cmd --permanent --policy NAT-int-to-ext --add-egress-zone public firewall-cmd --permanent --policy NAT-int-to-ext --set-target ACCEPT firewall-cmd --reload Khusus untuk Proxmox Virtual Environment\nauto vmbr0 iface vmbr0 inet manual bridge-ports eth0 bridge-stp off bridge-fd 0 post-up echo 1 \u0026gt; /proc/sys/net/ipv4/conf/vmbr0/forwarding post-down echo 0 \u0026gt; /proc/sys/net/ipv4/conf/vmbr0/forwarding #Jaringan Publik Konfigurasi DNS Server Sederhana di Linux untuk Keperluan Lab Instalasi paket dependensi\ndnf install -y dnsmasq Konfigurasi server upstream dnsmasq\ncat \u0026lt;\u0026lt;EOF | tee -a /etc/dnsmasq.conf server=1.1.1.1 server=1.0.0.1 EOF Konfigurasi dnsmasq untuk menulis ulang permintaan DNS\ncat \u0026lt;\u0026lt;EOF | tee /etc/dnsmasq.d/lab.homelab.is-a.dev.conf address=/homelab.is-a.dev/10.79.80.3 cname=blog.homelab.is-a.dev,homelab.is-a.dev EOF Referensi https://wiki.archlinux.org/title/Firewalld#NAT_masquerade https://serverfault.com/questions/1005682/proxmox-ipv4-inward-routing-not-working ","permalink":"http://vikipranata.is-a.dev/id/posts/linux-networking/","summary":"\u003ch2 id=\"konfigurasi-nat-forwarding-di-linux\"\u003e\u003cem\u003eKonfigurasi NAT Forwarding di Linux\u003c/em\u003e\u003c/h2\u003e\n\u003cp\u003eAktifkan parameter kernel\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;net.ipv4.ip_forward = 1\u0026#39;\u003c/span\u003e \u0026gt; /etc/sysctl.d/99-forwarding.conf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esysctl --system\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eKonfigurasi firewalld\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enmcli connection migrate\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enmcli connection modify eth0 connection.zone public\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enmcli device modify eth0 connection.zone public\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enmcli connection modify eth1 connection.zone internal\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enmcli device modify eth1 connection.zone internal\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efirewall-cmd --permanent --zone\u003cspan class=\"o\"\u003e=\u003c/span\u003epublic --add-masquerade\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efirewall-cmd --permanent --new-policy NAT-int-to-ext\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efirewall-cmd --permanent --policy NAT-int-to-ext --add-ingress-zone internal\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efirewall-cmd --permanent --policy NAT-int-to-ext --add-egress-zone public\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efirewall-cmd --permanent --policy NAT-int-to-ext --set-target ACCEPT\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efirewall-cmd --reload\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eKhusus untuk Proxmox Virtual Environment\u003c/p\u003e","title":"Catatan Pribadi Jaringan Linux"},{"content":"Menambah Ruang Tanpa Reboot VM Cek penggunaan disk saat ini dengan perintah lsblk Berikut adalah tabel partisi LVM\nLangkah pertama, kita perlu memperbesar partisi di /dev/sda3, instal paket growpart terlebih dahulu\ndnf install -y cloud-utils-growpart Kemudian resize partisi dengan perintah berikut\ngrowpart /dev/sda 3 Lihat perbedaannya sebelum dan sesudah. Jika Anda tidak menggunakan skema partisi LVM, cukup jalankan resize2fs /dev/sda3 untuk memperbesar partisi.\npvresize /dev/sda3 pvs vgs Sekarang Anda siap untuk memperbesar partisi LVM\nlvresize --extents +100%FREE --resizefs /dev/vg0/root Jika Anda hanya ingin menambah partisi sebesar 20GB, gunakan perintah berikut\nlvresize --size +20G --resizefs /dev/vg0/root Menambah Ruang Tanpa Reboot VM pada ESXi Guest Host Re-scan SCSI Bus untuk menambahkan perangkat SCSI tanpa reboot VM dengan perintah berikut\nPertama, cek nama device scsi Anda.\nls /sys/class/scsi_device/ Kemudian lakukan rescan pada scsi bus. Ganti \u0026lsquo;0\\:0\\:0\\:0\u0026rsquo; dengan nama scsi bus yang ditemukan dari perintah sebelumnya. Setiap titik dua diawali dengan garis miring, sehingga terlihat unik.\necho 1 \u0026gt; /sys/class/scsi_device/0\\:0\\:0\\:0/device/rescan Resize disk tapi tidak ada ruang tersisa Jika ada kondisi di mana tidak ada ruang tersisa pada block device, Anda bisa menggunakan perintah berikut:\nmount -o size=10M,rw,nodev,nosuid -t tmpfs tmpfs /tmp lalu lakukan langkah yang sama untuk resize disk\nReferensi https://access.redhat.com/solutions/5540131 https://www.redhat.com/sysadmin/resize-lvm-simple https://communities.vmware.com/t5/vSphere-Hypervisor-Discussions/Expand-Space-without-Rebooting-VM/td-p/923809 ","permalink":"http://vikipranata.is-a.dev/id/posts/linux-resize-disk/","summary":"\u003ch2 id=\"menambah-ruang-tanpa-reboot-vm\"\u003e\u003cem\u003eMenambah Ruang Tanpa Reboot VM\u003c/em\u003e\u003c/h2\u003e\n\u003cp\u003eCek penggunaan disk saat ini dengan perintah \u003ccode\u003elsblk\u003c/code\u003e\n\u003cimg alt=\"disk-overview\" loading=\"lazy\" src=\"/posts/linux-resize-disk/uploads/disk-overview.webp\"\u003e\u003c/p\u003e\n\u003cp\u003eBerikut adalah tabel partisi LVM\u003cbr\u003e\n\u003cimg alt=\"lvm-overview\" loading=\"lazy\" src=\"/posts/linux-resize-disk/uploads/lvm-overview.webp\"\u003e\u003c/p\u003e\n\u003cp\u003eLangkah pertama, kita perlu memperbesar partisi di \u003ccode\u003e/dev/sda3\u003c/code\u003e, instal paket growpart terlebih dahulu\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ednf install -y cloud-utils-growpart\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eKemudian resize partisi dengan perintah berikut\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egrowpart /dev/sda \u003cspan class=\"m\"\u003e3\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cimg alt=\"growpart-result\" loading=\"lazy\" src=\"/posts/linux-resize-disk/uploads/growpart-result.webp\"\u003e\u003c/p\u003e\n\u003cp\u003eLihat perbedaannya sebelum dan sesudah. Jika Anda tidak menggunakan skema partisi LVM, cukup jalankan \u003ccode\u003eresize2fs /dev/sda3\u003c/code\u003e untuk memperbesar partisi.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epvresize /dev/sda3\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epvs\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evgs\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cimg alt=\"pvresize-result\" loading=\"lazy\" src=\"/posts/linux-resize-disk/uploads/pvresize-result.webp\"\u003e\u003c/p\u003e\n\u003cp\u003eSekarang Anda siap untuk memperbesar partisi LVM\u003c/p\u003e","title":"Resize Disk di Linux"},{"content":"Halo, 👋\nNama saya Berto Viki Satria Pranata, biasa dipanggil Viki Pranata. Saya adalah profesional IT yang dengan pengalaman di bidang Teknologi Informasi sejak 2015, dengan spesialisasi di asystems administration, cloud engineering, dan arsitektur TI. Saya ahli dalam mengelola infrastruktur TI yang kompleks dan menerapkan solusi dengan berbagai tumpukan teknologi, memanfaatkan berbagai alat otomasi dan praktik terbaik di lingkungan produksi.\nUntuk melihat profil lengkap saya, silakan terhubung dengan saya di LinkedIn.\nPencapaian Certified Kubernetes Administrator, diterbitkan pada 10 Januari 2023 Certified OpenStack Administrator, diterbitkan pada 12 Januari 2023 Mikrotik Certified Network Associate, diterbitkan pada 20 Juli 2023 Pelatihan Coursera, Google Cloud Platform Fundamentals: Core Infrastructure, 21 Juni 2020 Coursera, Essential Cloud Infrastructure: Foundation, 06 Juli 2020 Digital Talent Scholarship - Kominfo, PROA - Container, Kubernetes \u0026amp; OpenShift, 30 April 2021 Adinusa, Linux System Administration, 08 Juli 2021 Adinusa, Docker For DevOps, 26 Juli 2021 Adinusa, Ansible Administration, 10 Agustus 2021 Adinusa, Kubernetes Administration, 18 Agustus 2021 Adinusa, Ceph Administration, 23 Agustus 2021 Adinusa, OpenStack Administration, 31 Agustus 2021 Dicoding, Belajar Dasar-Dasar DevOps, 23 Januari 2023 Dicoding, Belajar Jaringan Komputer untuk Pemula, 24 Januari 2023 Dicoding, Cloud Practitioner Essentials (Belajar Dasar AWS Cloud), 07 Maret 2023 Dicoding, Menjadi Linux System Administrator, 28 Agustus 2023 Dicoding, Belajar Implementasi CI/CD, 31 Agustus 2023 Tetap menjadi seorang pembelajar seumur hidup. ","permalink":"http://vikipranata.is-a.dev/id/about/","summary":"\u003cp\u003eHalo, 👋\u003cbr\u003e\nNama saya Berto Viki Satria Pranata, biasa dipanggil Viki Pranata. Saya adalah profesional IT yang dengan pengalaman di bidang Teknologi Informasi sejak 2015, dengan spesialisasi di asystems administration, cloud engineering, dan arsitektur TI. Saya ahli dalam mengelola infrastruktur TI yang kompleks dan menerapkan solusi dengan berbagai tumpukan teknologi, memanfaatkan berbagai alat otomasi dan praktik terbaik di lingkungan produksi.\u003cbr\u003e\nUntuk melihat profil lengkap saya, silakan terhubung dengan saya di \u003ca href=\"https://www.linkedin.com/in/vikipranata\"\u003eLinkedIn\u003c/a\u003e.\u003c/p\u003e","title":"Tentang Saya"}]