Edit This Page

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 mulai

Kamu harus memiliki klaster Kubernetes, dan perangkat baris perintah kubectl juga harus dikonfigurasikan untuk berkomunikasi dengan klaster kamu. Jika kamu belum punya klaster, kamu dapat membuatnya dengan menggunakan Minikube, atau kamu dapat menggunakan salah satu tempat bermain Kubernetes 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:

application/shell-demo.yaml
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
Catatan: Simbol tanda hubung ganda "--" digunakan untuk memisahkan antara argumen perintah yang ingin kamu eksekusi pada Container dan argumen dari kubectl itu sendiri.

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