GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Dari Docker Compose ke Kubernetes dengan Podman

Alat Tulis Docker sangat berharga bagi banyak orang yang telah bekerja dengan kontainer. Menurut dokumentasi, Docker Compose menggambarkan dirinya sebagai:

... alat untuk mendefinisikan dan menjalankan aplikasi multi-kontainer. Dengan Compose, Anda menggunakan file YAML untuk mengonfigurasi layanan aplikasi Anda. Kemudian, dengan satu perintah, Anda membuat dan memulai semua layanan dari konfigurasi Anda.

Satu tantangan dengan Docker Compose adalah bahwa format file YAML hanya berfungsi dengan mesin Docker. Meskipun Anda dapat memberikannya kepada pengguna Docker lain untuk replikasi lokal, mereka tidak dapat menggunakannya dengan runtime container lainnya. Artinya, sampai sekarang.

[ Tutorial terkait:Menggunakan Podman dan Docker Compose ]

Dengan Podman 3.0, Docker Compose bekerja dengan backend Podman

Kekuatan Podman yang sebenarnya terlihat dengan dengan mudahnya mengonversi container berdasarkan Docker Compose ke file YAML Kubernetes. Seperti Docker Compose, Podman dapat menggunakan file YAML Kubernetes untuk mereplikasi container secara lokal. Lebih penting lagi, ini memungkinkan Podman untuk memiliki pod dan layanan yang diatur yang dapat dijalankan di banyak platform, termasuk Kubernetes/OpenShift atau minikube.

Artikel ini menjelaskan proses memulai dengan file Compose sederhana yang menjalankan WordPress menggunakan dua wadah. Sumber untuk file Compose ini diterbitkan di GitHub di repositori mengagumkan-compose Docker. Keberhasilan penggunaan file ini dengan Podman menghasilkan layar penyiapan awal WordPress yang muncul di browser.

Catatan :Pada saat penulisan ini, kami hanya mendukung docker-compose perintah berjalan secara root.

Mulai layanan sistem Podman

Untuk menggunakan Compose, langkah pertama adalah memastikan bahwa semua paket yang diperlukan telah terinstal dan kemudian mengatur layanan sistem Podman (3.0 atau lebih tinggi) menggunakan systemd . Setelah menginstal paket, aktifkan dan mulai Podman systemd layanan yang diaktifkan soket menggunakan perintah berikut:

$ sudo systemctl aktifkan --now podman.socket 

Verifikasi layanan berjalan dengan menekan titik akhir ping. Langkah ini harus berhasil sebelum melangkah lebih jauh.

$ sudo curl -H "Content-Type:application/json" --unix-socket /var/run/docker.sock http://localhost/_pingOK 

Anda sekarang dapat menjalankan Compose dengan percaya diri karena RESTful API berfungsi.

Jalankan Tulis

Seperti disebutkan sebelumnya, contoh akan menjalankan file Compose yang terdiri dari dua wadah untuk membuka sesi WordPress. Satu wadah menjalankan layanan web Apache, dan wadah lainnya menyimpan data dalam database MySQL. Kedua kontainer berkomunikasi melalui TCP/IP melalui jaringan yang didedikasikan untuk instance Compose ini. Untuk membuka container, jalankan docker-compose up .

$ sudo docker-compose up -dMembuat jaringan "wordpress-mysql_default" dengan driver defaultMembuat volume "wordpress-mysql_db_data" dengan driver defaultMenarik db (mysql:8.0.19)...0c27e8e5fcfab7805cfed996b55e5e98f43fd7ee)1395c156a2996b55e5e98f43fd7ee)1395c dari docker.io/library/mysql:8.0.19  Menarik wordpress (wordpress:latest)...0d35c2300ec845fda141ba012f7c6dccde8f0ae106b8f4bb0fcfced69380f851:menarik gambar () dari docker.io/library/wordpress:latest  mysql_selesai wordpress_1... .. selesai 

Gunakan podman ps perintah untuk memverifikasi bahwa dua wadah telah dibuat dan sekarang sedang berjalan. Tidak diperlukan daemon Docker.

$ sudo podman pscontainer id gambar perintah dibuat port status namessa089a40bb9ae docker.io/library/mysql:8.0.19 ---default-authent ... 15 detik yang lalu 15 detik yang lalu Kind_hermann510c0c028c273fer.io/oibreBry/ detik.oBRREBRE/ wordpress:latest  apache2-foregroun...  15 detik yang lalu  Naik 15 detik yang lalu  0.0.0.0:80->80/tcp  competent_kilby$

Verifikasi WordPress berjalan secara lokal

Petunjuk untuk menjalankan WordPress menunjukkan bahwa WordPress berfungsi dengan benar dan dapat diakses menggunakan localhost dan port 80.

Buat YAML Kubernetes

Dengan instance WordPress yang berfungsi di mesin lokal, mulailah proses mereplikasi container ini di platform Kubernetes. Podman dapat menghasilkan YAML berbasis Kubernetes dari menjalankan container.

[ Anda mungkin juga ingin membaca: Mulai mempelajari Kubernetes dari komputer lokal Anda ]

Satu pod atau beberapa pod?

Ada dua pendekatan untuk membuat YAML yang akan Anda gunakan di lingkungan Kubernetes:Tempatkan dua kontainer dalam satu pod dengan layanan, atau buat dua pod, dengan masing-masing satu kontainer, dan layanan untuk mengekspos front end Apache. Menentukan pendekatan mana yang terbaik mungkin memerlukan beberapa percobaan dan kesalahan.

Salah satu pertimbangan yang mungkin menentukan pendekatan mana yang akan digunakan adalah bagaimana container atau pod akan berkomunikasi. Saat Compose membuat container ini, ia menjalani serangkaian langkah untuk memastikan bahwa kedua container dapat berkomunikasi satu sama lain menggunakan nama DNS. Faktanya, Compose menyiapkan alias pada container yang dikenali sebagai nama DNS saat menyelesaikan container berdasarkan nama. Dengan meletakkan container di dalam pod yang sama, tidak perlu ada resolusi nama di antara mereka karena mereka berbagi namespace jaringan. Oleh karena itu, mereka cukup menggunakan localhost untuk berkomunikasi satu sama lain.

Menempatkan container di pod Kubernetes yang berbeda memberikan fleksibilitas yang lebih baik, tetapi container perlu berkomunikasi satu sama lain menggunakan beberapa mekanisme lain.

Buat YAML

Anda harus mengetahui nama atau ID container untuk mulai membuat YAML Kubernetes. Putuskan apakah Podman harus membuat deskripsi layanan untuk Kubernetes. Dalam hal ini, ekspos front end Apache sehingga dapat berinteraksi dengan WordPress menggunakan browser. Gunakan podman generate kube perintah untuk membuat file YAML.

$ sudo podman generate kube -s -f wordpress.yaml a089a40bb9ae 510c028c273f 

-s pada perintah sebelumnya menandakan bahwa Podman akan menghasilkan layanan untuk pod ini. -f opsi memungkinkan kita untuk menyimpan YAML yang dihasilkan ke dalam file. Jika tidak, output akan dikirim ke stdout , di mana itu dapat diarahkan ke file.

$ cat wordpress.yaml# Simpan output dari file ini dan gunakan kubectl create -f untuk mengimpor# ke dalam Kubernetes.## Dibuat dengan podman-3.0.0-devapiVersion:v1kind:Podmetadata:  creationTimestamp:" 2020-12-03T22:30:07Z"  labels:    app:kindhermann  name:kindhermannspec:  containers:  - command:    - docker-entrypoint.sh    - --default-authentication-plugin=mysql_native_password    env:    - name:PATH    nilai:/us /local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin   ...    workingDir:/  - command:    - docker-entrypoint.sh    - apache2-foreground    env:    - name :PATH      nilai:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin  ...    - name:WORDPRESS_DB_HOST      nilai:kindhermann    - name:WORDPRESS_DB_PASSWORD   - name:APACHE_ENVVARS      nilai:/etc/apache2/envvars ...    image:docker.io/library/wordpress:latest    name:kompetenkilby    ports:    - containerPort:80      hostPort:80      protokol:TCP    sumber daya:{} rityContext:      allowPrivilegeEscalation:true      kemampuan:        drop:        - CAP_MKNOD        - CAP_NET_RAW      privileged:false      readOnlyRootFilesystem:false  {}www seLinsion creation:03T22:30:07Z"  labels:    app:kindhermann  name:kindhermannspec:  ports:  - name:"80"    nodePort:30579    port:80    protocol:TCP    targetPort:0  selector:    app:kindhermann  type:NodePortstatus:  loadBalancer:{} 

Agar container Apache dapat berkomunikasi dengan container MySQL, pembuat file Compose telah memilih untuk menggunakan variabel lingkungan bernama WORDPRESS_DB_HOST untuk menandakan nama host dari wadah MySQL. Sebelum menjalankan ini di lingkungan Kubernetes, ubah nilai WORDPRESS_DB_HOST ke nama wadah MySQL (kindhermann dalam contoh ini) atau 127.0.0.1 (kontainer dalam pod yang sama dapat berkomunikasi satu sama lain melalui localhost).

...    - nama:WORDPRESS_DB_HOST      nilai:kindhermann OR 127.0.0.1--- 

Bilah Sisi:

Saat Compose melakukan build

Dalam banyak contoh Compose, penulis memilih untuk membangun image container mereka. Ini biasanya karena mereka memerlukan paket tambahan atau ingin melakukan beberapa tingkat penyesuaian pada gambar. Ketika ini terjadi, akan ada gambar baru tambahan di toko gambar Podman. Memilih untuk menjalankan keluaran Kubernetes YAML mungkin gagal karena mengacu pada gambar container yang hanya ada di toko lokal.

Untuk mengatasinya, gunakan podman push untuk memindahkan gambar-gambar baru ini ke registri global seperti quay.io atau registri khusus Kubernetes sehingga Kubernetes dapat menarik gambar-gambar ini. Pastikan nama gambar dalam file YAML yang dihasilkan sama dengan gambar yang didorong.

Kubernetes

Langkah selanjutnya dalam meneruskan contoh ini dan menerapkannya ke lingkungan Kubernetes akan menunjukkan cara menjalankan contoh ini di minikube dan OpenShift. Tidak ada sesuatu yang spesifik dalam YAML yang mencegah pod berjalan di lingkungan Kubernetes lain, jadi secara teoritis ia harus bekerja dengan rasa Kubernetes lainnya.

Artikel ini mengasumsikan adanya lingkungan minikube dan/atau OpenShift. Artikel ini di luar cakupan untuk mendokumentasikan penyiapan lingkungan minikube atau OpenShift Kubernetes.

minikube

Langkah pertama untuk men-deploy di minikube adalah dengan membuat pod.

$ minikube kubectl -- buat -f wordpress.yamlpod/kindhermann Createdservice/kindhermann Created 

Setelah menunggu beberapa detik, periksa status pod dan containernya. Tergantung pada kecepatan dan bandwidth jaringan, pod mungkin sudah tersedia. Periksa status pod menggunakan kubectl get pods .

$ minikube kubectl -- get podsNAME          READY   STATUS    RESTARTS   AGEkindhermann   2/2     Running   0          28 

Sekarang kedua wadah sudah siap, uji ketersediaan sesi WordPress. Pertama, dapatkan alamat IP pod di Kubernetes menggunakan kubectl .

$ minikube kubectl -- deskripsikan  pod | grep Node:Node:        minikube/192.168.39.7 

Arahkan browser pilihan Anda ke alamat IP pod dan lihat layar penyiapan WordPress.

OpenShift

Untuk artikel ini, cluster OpenShift berjalan di GCP.

Gunakan wordpress.yaml yang dihasilkan untuk membuat pod dan layanan. Jika menggunakan lingkungan vanilla Kubernetes, ganti oc dengan kubectl dalam perintah berikut.

$ oc create -f wordpress.yaml  pod/kindhermann Createdservice/kindhermann Created 

Tunggu beberapa detik hingga pod dan layanan muncul. anak sanak keluarga pod sedang Berjalan status dengan kedua wadah aktif dan berjalan. anak sanak keluarga layanan juga tersedia dengan IP cluster yang ditetapkan untuknya.

$ oc dapatkan status siap podsname restart restarts agekindhermann 2/2 berjalan 0 39s $ oc get servicesname jenis cluster-ip port eksternal-ip (s) agekindhermann nodeport 172.30.103.100 80:30579/tcp 45skubernetes 172.30.0.1                                        443/TCP        44mopenshift     ExternalName             Kubernetes.

Lihat pod dan layanan di konsol.

Untuk mengakses layanan dari luar cluster, ekspos, yang akan membuat rute.

$ oc Expose svc/kindhermannroute.route.openshift.io/kindhermann terpapar $ oc/Kubectl dapatkan routesname host/port jalur layanan port terminasi wildcardkindhermann kindhermann-default.apps.ci-ln-d3gw292-f76d1.originmann-default.apps.ci-ln-d3gw292-f76d1.ord1 -ci-int-gce.dev.openshift.com          kindhermann   80                   Tidak ada

Mengekspos layanan membuat rute Host/port yang ditunjukkan di atas dan mengakses titik akhir itu. Lihat halaman penyiapan aplikasi WordPress yang berjalan di cluster OpenShift atau Kubernetes.

Periksa rute di konsol dan langsung akses titik akhir dari sana juga.

[ Dapatkan ebook gratis ini:Mengelola kluster Kubernetes Anda untuk boneka. ]

Menutup

Seperti yang Anda lihat, memindahkan konfigurasi beban kerja dari lingkungan Docker Compose ke Kubernetes sangatlah mudah dengan Podman 3.0. Podman tidak hanya memberikan fleksibilitas Docker Compose saat mengembangkan aplikasi, tetapi juga memudahkan perpindahan ke Kubernetes saat aplikasi siap untuk liga besar. Ia melakukan semua ini dengan menggunakan podman generate kube memerintah. Cobalah sendiri dalam tiga langkah sederhana.


Docker
  1. Cara Menggunakan Tulis Docker

  2. Panduan Cepat untuk Menggunakan Docker Compose

  3. Instal WordPress dengan Docker Compose, Nginx, Apache dengan SSL

  1. Cara Mengamankan Data Sensitif Dengan Rahasia Penulisan Docker

  2. Apa yang Baru di Docker Compose v2?

  3. Apa itu Podman dan Apa Bedanya dengan Docker?

  1. Apa itu Docker Compose?

  2. Docker vs. Kubernetes

  3. Cara Menginstal Jenkins dengan Docker