Mendefinisikan Perintah dan Argumen untuk sebuah Kontainer
Laman ini menunjukkan bagaimana cara mendefinisikan perintah-perintah dan argumen-argumen saat kamu menjalankan Container dalam sebuah Pod.
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, tekankubectl version
.
Mendefinisikan sebuah perintah dan argumen-argumen saat kamu membuat sebuah Pod
Saat kamu membuat sebuah Pod, kamu dapat mendefinisikan sebuah perintah dan argumen-argumen untuk
Container-Container yang berjalan di dalam Pod. Untuk mendefinisikan sebuah perintah, sertakan
bidang command
di dalam berkas konfigurasi. Untuk mendefinisikan argumen-argumen untuk perintah, sertakan
bidang args
di dalam berkas konfigurasi. Perintah dan argumen-argumen yang telah
kamu definisikan tidak dapat diganti setelah Pod telah terbuat.
Perintah dan argumen-argumen yang kamu definisikan di dalam berkas konfigurasi membatalkan perintah dan argumen-argumen bawaan yang disediakan oleh image Container. Jika kamu mendefinisikan argumen-argumen, tetapi tidak mendefinisikan sebuah perintah, perintah bawaan digunakan dengan argumen-argumen baru kamu.
command
menyerupai entrypoint
di beberapa runtime Container.
Merujuk pada catatan di bawah.
Pada latihan ini, kamu akan membuat sebuah Pod baru yang menjalankan sebuah Container. Berkas konfigurasi untuk Pod mendefinisikan sebuah perintah dan dua argumen:
apiVersion: v1
kind: Pod
metadata:
name: command-demo
labels:
purpose: demonstrate-command
spec:
containers:
- name: command-demo-container
image: debian
command: ["printenv"]
args: ["HOSTNAME", "KUBERNETES_PORT"]
restartPolicy: OnFailure
-
Buat sebuah Pod dengan berkas konfigurasi YAML:
kubectl apply -f https://k8s.io/examples/pods/commands.yaml
-
Daftar Pod yang sedang berjalan
kubectl get pods
Keluaran menunjukkan bahwa Container yang berjalan di dalam Pod command-demo telah selesai.
-
Untuk melihat keluaran dari perintah yang berjalan di dalam Container, lihat log dari Pod tersebut:
kubectl logs command-demo
Keluaran menunjukan nilai dari variabel lingkungan HOSTNAME dan KUBERNETES_PORT:
command-demo tcp://10.3.240.1:443
Menggunakan variabel lingkungan untuk mendefinisikan argumen
Dalam contoh sebelumnya, kamu mendefinisikan langsung argumen-argumen dengan menyediakan string. Sebagai sebuah alternatif untuk menyediakan string secara langsung, kamu dapat mendefinisikan argumen-argumen dengan menggunakan variabel lingkungan:
env:
- name: MESSAGE
value: "hello world"
command: ["/bin/echo"]
args: ["$(MESSAGE)"]
Ini berarti kamu dapat mendefinisikan sebuah argumen untuk sebuah Pod menggunakan salah satu teknik yang tersedia untuk mendefinisikan variabel-variabel lingkungan, termasuk ConfigMap dan Secret.
"$(VAR)"
. Ini
dibutuhkan untuk variabel yang akan diperuluas di bidang command
atau args
.
Menjalankan sebuah perintah di dalam shell
Di beberapa kasus, kamu butuh perintah untuk menjalankan sebuah shell. Contohnya, perintah kamu mungkin terdiri dari beberapa perintah yang digabungkan, atau mungkin berupa skrip shell. Untuk menjalankan perintah kamu di sebuah shell, bungkus seperti ini:
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello; sleep 10;done"]
Catatan
Tabel ini merangkum nama-nama bidang yang digunakan oleh Docker dan Kubernetes.
Deskripsi | Nama bidang pada Docker | Nama bidang pada Kubernetes |
---|---|---|
Perintah yang dijalankan oleh Container | Entrypoint | command |
Argumen diteruskan ke perintah | Cmd | args |
Saat kamu mengesampingkan Entrypoint dan Cmd standar, aturan-aturan ini berlaku:
-
Jika kamu tidak menyediakan
command
atauargs
untuk sebuah Container, makacommand
danargs
yang didefinisikan di dalam image Docker akan digunakan. -
Jika kamu menyediakan
command
tetapi tidak menyediakanargs
untuk sebuah Container, akan digunakancommand
yang disediakan. Entrypoint dan Cmd bawaan yang didefinisikan di dalam image Docker diabaikan. -
Jika kamu hanya menyediakan
args
untuk sebuah Container, Entrypoint bawaan yang didefinisikan di dalam image Docker dijalakan denganargs
yang kamu sediakan. -
Jika kamu menyediakan
command
danargs
, Entrypoint dan Cmd standar yang didefinisikan di dalam image Docker diabaikan.command
kamu akan dijalankan denganargs
kamu.
Berikut ini beberapa contoh:
Image Entrypoint | Image Cmd | Container command | Container args | Command run |
---|---|---|---|---|
[/ep-1] |
[foo bar] |
<not set> | <not set> | [ep-1 foo bar] |
[/ep-1] |
[foo bar] |
[/ep-2] |
<not set> | [ep-2] |
[/ep-1] |
[foo bar] |
<not set> | [zoo boo] |
[ep-1 zoo boo] |
[/ep-1] |
[foo bar] |
[/ep-2] |
[zoo boo] |
[ep-2 zoo boo] |
Selanjutnya
- Pelajari lebih lanjut tentang mengatur Pod and Container.
- Pelajari lebih lanjut tentang menjalankan perintah di dalam sebuah Container.
- Lihat Container.