Docker biasanya memberikan pengantar pertama pengembang ke container. Kubernetes adalah platform orkestrasi yang memecahkan tantangan seputar menjalankan container dalam produksi. Inilah cara Docker memerintahkan map ke rekan-rekan Kubernetes mereka.
Anda tidak dapat menggunakan docker
CLI untuk berinteraksi dengan container yang berjalan di Kubernetes. Kubernetes menyediakan antarmuka baris perintahnya sendiri, kubectl
, untuk membantu Anda mengelola cluster. Baca panduan kami untuk memulai kubectl
jika Anda tidak terbiasa dengan alat ini.
Tak satu pun dari docker
perintah memiliki nama yang sama di kubectl
. Kubernetes mengekspos fungsionalitas dengan caranya sendiri. Beban kerja itu sendiri pada dasarnya berbeda – Docker dirancang untuk bekerja dengan satu container pada satu waktu, sedangkan Kubernetes memungkinkan orkestrasi beberapa replika.
Poin pertama yang harus diapresiasi adalah pergeseran terminologi. Docker mengacu pada "wadah" sementara Kubernetes menggunakan "pod". Pod mungkin menjalankan satu container atau beberapa replika yang dikelola sebagai satu unit. Selain detail ini, ketika Anda melihat "wadah" di Docker, Anda harus memikirkan "pod" Kubernetes. Istilah tersebut akan digunakan secara bergantian untuk sisa artikel ini.
Mendapatkan Detail Kontainer Anda
Di Docker, Anda menggunakan docker ps -a
untuk melihat semua container di mesin Anda.
Setara Kubernetes terdekat adalah kubectl get pods
.
Output dari kedua perintah tersebut sangat berbeda. Docker menampilkan lebih banyak informasi tentang beban kerja yang dijalankan container.
Kubernetes akan memberikan detail tentang gambar dan perintah saat menggunakan describe pod
memerintah. Anda harus memberikan nama pod. Ini memberikan lebih banyak informasi verbose, menggunakan daftar daripada tabel.
Menjalankan Perintah dalam Container
Docker memungkinkan Anda menjalankan perintah dalam wadah yang sedang berjalan menggunakan docker exec
.
Setara Kubernetes juga disebut exec
. Gunakan nama pod Kubernetes alih-alih nama container Docker. Perintah ditentukan sedikit berbeda – itu harus dipisahkan dari nama pod dengan --
urutan.
Anda dapat menggunakan -it
flag untuk mendapatkan akses interaktif dengan cara yang sama seperti Docker. Ini adalah singkatan dari --stdin --tty
dan harus digunakan kapan pun Anda ingin meluncurkan shell di dalam pod. Tentukan nama shell, seperti bash
, sebagai perintah.
Kubectl mendukung attach
perintah ketika Anda ingin melampirkan proses dalam wadah yang sudah berjalan. Cara kerjanya mirip dengan docker attach
tetapi Anda harus melewati -it
tandai jika Anda membutuhkan akses interaktif.
Melihat Log Kontainer
Untuk melihat log container dengan Docker, Anda menggunakan docker logs
memerintah. Menambahkan -f
switch akan “mengikuti” log sehingga log tersebut terus dialirkan ke terminal Anda.
logs
Kubectl perintah memiliki sintaks yang sama. Berikan nama pod dengan cara yang sama seperti Docker menerima nama container.
Baik Docker dan Kubernetes mengumpulkan log dari keluaran standar dan kesalahan standar (stdout
/stderr
) aliran kontainer yang sedang berjalan. Kubernetes menangani restart container secara berbeda dengan Docker. Sedangkan di Docker, wadah yang dimulai ulang menambahkan lognya ke yang sudah ada, Kubernetes membuat log baru untuk setiap proses. Anda bisa mendapatkan log dari wadah yang diganti dengan menambahkan --previous
tandai ke logs
perintah.
Membuat Kontainer
Kontainer Docker dibuat dengan run
memerintah. Inilah cara Anda memulai nginx
server dengan Docker:
docker run -d --name nginx --restart=always -p 80:80 nginx
Ini membuat wadah menggunakan nginx
gambar dasar dan mengaturnya untuk memulai ulang secara otomatis. Server terikat ke port HTTP default 80.
Kubernetes mengharuskan Anda memikirkan abstraksi tingkat tinggi saat menambahkan container ke cluster Anda. Alih-alih menjalankan penampung, Anda membuat penerapan untuk mewakili beban kerja Anda:
kubectl create deployment --image=nginx nginx
Ini akan membuat nginx
penyebaran. Pod dimulai secara otomatis; di dalam pod, akan ada wadah yang menjalankan server web.
Membuat penerapan tidak akan mengikat wadahnya ke port mana pun. Server yang baru dibuat belum dapat diakses. Port harus terbuka melalui layanan . Pod bersifat sementara dan mungkin berisi beberapa kontainer yang direplikasi. Layanan mendefinisikan kumpulan logis dari pod dan memungkinkan Anda menetapkan sumber daya jaringan seperti alamat IP dan port.
Mengekspos nginx
penyebaran pada port 80 akan memungkinkan server untuk diakses:
kubectl expose deployment nginx --port=80 --name nginx-http
Mencoba mengakses port 80 pada alamat IP default cluster sekarang akan mengarahkan Anda ke nginx
server.
Kubectl tidak secara langsung mendukung docker run
lainnya opsi seperti pembuatan volume dan pengikatan mount. Kontainer yang memerlukan penyimpanan persisten harus memiliki volume yang dikonfigurasi secara manual melalui kubectl
perintah atau manifes volume.
Menghapus Kontainer
Kontainer buruh pelabuhan dihapus menggunakan docker rm
perintah dengan ID wadah.
Kubernetes tidak mengizinkan Anda menghapus container secara langsung. Sebagai gantinya, Anda bekerja dengan penerapan yang menciptakan pod. Gunakan kubectl delete deployment
perintah, meneruskan nama penerapan.
Docker memungkinkan Anda untuk berhenti wadah alih-alih mengeluarkannya. Kubernetes telah menghapus dukungan untuk tindakan ini. Cara yang disarankan untuk menangguhkan penerapan untuk sementara adalah dengan menurunkan jumlah replikanya ke 0. Tanpa pod yang berjalan, beban kerja akan dihentikan secara efektif.
kubectl scale --replicas=0 deployment/my-deployment
Saat Anda siap untuk melanjutkan penerapan, jalankan scale
perintah lagi. Setel jumlah replika baru ke 1
atau lebih tinggi. Menggunakan lebih banyak replika dapat meningkatkan ketersediaan beban kerja Anda.
Kesimpulan
Tidak ada paralel langsung antara CLI Docker dan kubectl
. Sebagian besar perintah Kubernetes memiliki sintaks yang berbeda dengan rekan-rekan Docker mereka. Anda perlu mempelajari istilah dan opsi baru sebelum dapat mentransisikan alur kerja berbasis Docker ke Kubernetes.
Dalam banyak kasus, tidak ada kubectl
alternatif untuk kemampuan Docker CLI. Fungsionalitas Docker difokuskan pada konsep container. Kubernetes mengambilnya dan menempatkannya di pusat ekosistem sumber daya yang sangat berkembang.
Kontainer jarang ditangani secara terpisah. Sebagai gantinya, Anda harus bekerja dengan sumber daya seperti penerapan, layanan, dan set replika. Inilah sebabnya mengapa mempelajari Kubernetes bisa terasa menantang saat mendekatinya dari sudut pandang pengguna Docker.
Jika Anda terbiasa dengan dasar-dasar Docker, transisi ke Kubernetes seharusnya relatif mudah. Perbedaan prinsipnya adalah apa yang dilihat Docker sebagai wadah biasanya diakses sebagai "pod" agregat di Kubernetes. Pod dibuat oleh “deployment” yang mewakili beban kerja di cluster Anda. Jika ragu, lihat kubectl
docs untuk menemukan kecocokan yang sesuai untuk perintah Docker.