Mendapatkan Shell Untuk Masuk ke Container yang Sedang Berjalan

Laman ini menunjukkan bagaimana cara menggunakan kubectl exec untuk mendapatkan shell untuk masuk ke dalam Container yang sedang berjalan.

Sebelum kamu memulai

Kamu harus memiliki klaster Kubernetes, dan perangkat baris perintah kubectl juga harus dikonfigurasikan untuk berkomunikasi dengan klastermu. Jika kamu belum memiliki klaster, kamu dapat membuatnya dengan menggunakan minikube, atau kamu juga dapat menggunakan salah satu dari tempat mencoba Kubernetes berikut ini:

Untuk melihat versi, tekan kubectl version.

Mendapatkan sebuah shell untuk masuk ke sebuah Container

Dalam latihan ini, kamu perlu membuat Pod yang hanya memiliki satu Container saja. Container tersebut menjalankan image nginx. Berikut ini adalah berkas konfigurasi untuk Pod tersebut:

apiVersion: v1
kind: Pod
metadata:
  name: shell-demo
spec:
  volumes:
  - name: shared-data
    emptyDir: {}
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: shared-data
      mountPath: /usr/share/nginx/html
  hostNetwork: true
  dnsPolicy: Default

Buatlah Pod tersebut:

kubectl apply -f https://k8s.io/examples/application/shell-demo.yaml

Pastikan bahwa Container dalam Pod berjalan:

kubectl get pod shell-demo

Dapatkan shell untuk masuk ke dalam Container:

kubectl exec -it shell-demo -- /bin/bash

Di dalam shell kamu, perlihatkan isi dari direktori root:

root@shell-demo:/# ls /

Di dalam shell kamu, cobalah perintah-perintah yang lainnya. Berikut beberapa contohnya:

root@shell-demo:/# ls /
root@shell-demo:/# cat /proc/mounts
root@shell-demo:/# cat /proc/1/maps
root@shell-demo:/# apt-get update
root@shell-demo:/# apt-get install -y tcpdump
root@shell-demo:/# tcpdump
root@shell-demo:/# apt-get install -y lsof
root@shell-demo:/# lsof
root@shell-demo:/# apt-get install -y procps
root@shell-demo:/# ps aux
root@shell-demo:/# ps aux | grep nginx

Lihat kembali berkas konfigurasi untuk Pod kamu. Pod memiliki volume emptyDir, dan Container melakukan pemasangan (mounting) untuk volume tersebut pada /usr/share/nginx/html.

Pada shell kamu, buatlah berkas index.html dalam direktori /usr/share/nginx/html:

root@shell-demo:/# echo Hello shell demo > /usr/share/nginx/html/index.html

Pada shell kamu, kirimkan sebuah permintaan (request) GET ke server nginx.

root@shell-demo:/# apt-get update
root@shell-demo:/# apt-get install curl
root@shell-demo:/# curl localhost

Keluarannya akan menunjukkan teks yang kamu tulis pada berkas index.html.

Hello shell demo

Setelah kamu selesai dengan shell kamu, ketiklah exit.

Menjalankan perintah individu di dalam sebuah Container

Pada jendela (window) perintah biasa, bukan pada shell kamu di dalam Container, lihatlah daftar variabel lingkungan (environment variable) pada Container yang sedang berjalan:

kubectl exec shell-demo -- env

Cobalah dengan menjalankan perintah lainnya. Berikut beberapa contohnya:

kubectl exec shell-demo ps aux
kubectl exec shell-demo ls /
kubectl exec shell-demo cat /proc/1/mounts

Membuka sebuah shell ketika sebuah Pod memiliki lebih dari satu Container

Jika sebuah Pod memiliki lebih dari satu Container, gunakanlah --container atau -c untuk menentukan Container yang dimaksud pada perintah kubectl exec. Sebagai contoh, misalkan kamu memiliki Pod yang bernama my-pod, dan Pod tersebut memiliki dua Container yang bernama main-app dan helper-app. Perintah berikut ini akan membuka sebuah shell ke Container dengan nama main-app.

kubectl exec -it my-pod --container main-app -- /bin/bash

Selanjutnya

Last modified October 22, 2023 at 12:40 AM PST: [id] fix: update deprecated command in code example (30b42be4fa)