Memulai dengan Kubernetes tidak selalu mudah. Tidak semua orang memiliki infrastruktur yang diperlukan untuk menggunakan cluster Kubernetes lengkap. Kubernetes menawarkan utilitas Minikube untuk operasi lokal. Minikube adalah alat yang cukup sederhana dan nyaman, dan ada beberapa kursus pelatihan bekerja dengan Minikube. Tetapi, bagaimanapun, tidak dapat dikatakan tentang Minikube bahwa menggunakan utilitas ini Anda dapat menggunakan lingkungan Kubernetes dalam beberapa menit.
Hari ini saya ingin berbicara tentang paket
MicroK8s , yang, tanpa berlebihan, memungkinkan Anda untuk menggunakan Kubernet secara lokal dalam beberapa menit, dan memulai pengembangan. Docker dan Kubernetes yang belum diinstal tidak diperlukan semua termasuk. Dalam pelajaran ini, Anda akan mempertimbangkan menggunakan aplikasi Django di lingkungan Kubernetes lokal.
Sebagai sumber, saya mengikuti serangkaian artikel
Mark Gituma yang menggambarkan karya serupa, tetapi hanya dengan Minikube, bukan MicroK8s.
Meski demikian, ada satu syarat yang harus dipenuhi sebelum mulai bekerja. Anda harus menginstal
Snap , yang pada gilirannya berarti Anda harus menginstal Linux.
Instalasi MicroK8s dijelaskan dalam
manual di situs . Namun, ini hanya satu baris:
sudo snap install microk8s --classic
Selanjutnya, mungkin perlu untuk memulai lingkungan:
sudo microk8s.start
Selanjutnya, Anda perlu mengaktifkan ekstensi. Daftar lengkap ekstensi dapat diperoleh dengan perintah
microk8s.enable --help
: dashboard, dns, gpu, ingress, istio, metrics-server, registry, storage. Anda dapat segera mengaktifkan semuanya kecuali gpu dan istio, karena yang pertama membutuhkan driver yang sudah diinstal, dan yang kedua pada dasarnya meningkatkan lingkungan dan (secara pribadi, di desktop saya yang lemah) memuat sistem dengan berat.
microk8s.enable dashboard dns ingress metrics-server registry storage
Karena sekarang Anda dapat menyimpulkan dari daftar ekstensi, Anda akan memiliki akses ke banyak layanan, termasuk dasbor dan metrik.
Buat Dockerfile untuk membuat gambar:
FROM python:3-slim LABEL maintainer="mark.gituma@gmail.com" WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt RUN django-admin startproject mysite /app EXPOSE 8000 STOPSIGNAL SIGINT ENTRYPOINT ["python", "manage.py"] CMD ["runserver", "0.0.0.0:8000"]
dan file dengan dependensi requirement.txt yang diperlukan:
celery==4.1.0 Django==2.0 kombu==4.1.0
Ayo kumpulkan gambarnya. Untuk ini, Anda tidak perlu Docker yang sudah diinstal, karena Muncul dengan MicroK8s:
microk8s.docker build django -t apapacy/tut-django:1.0.0
Jika Anda mengumpulkan gambar dengan buruh pelabuhan yang diinstal sebelumnya, mungkin tidak cukup bagi Anda untuk hanya mengumpulkan gambar dan mengirimkannya ke registri lokal, yang juga dilengkapi dengan MicroK8s, dan bekerja pada port 32000:
microk8s.docker tag apapacy/tut-django:1.0.0 localhost:32000/apapacy/tut-django:1.0.0 microk8s.docker push localhost:32000/apapacy/tut-django:1.0.0
Kemungkinan besar, langkah ini tidak akan diperlukan, tetapi untuk kelengkapan, saya menunjuk ke sana, dan pada saat yang sama menarik perhatian Anda bahwa Anda memiliki registri buruh pelabuhan lokal.
Blok bangunan dasar Kubernetes adalah Pod (Pod), tempat wadah bekerja (paling sering satu tetapi mungkin ada beberapa). Pod dapat dibuat dengan berbagai cara. Namun hari ini kami tertarik dengan Penyebaran (Deployment). Penyebaran menjelaskan templat dengan mana Pods dibuat. Penempatan didefinisikan menggunakan file konfigurasi yml. Dalam konfigurasi Penempatan, Anda menentukan jumlah replika Pod dan gambar dari mana Pod ini dan replika akan dikumpulkan, serta port (port 8000 tempat Django dari Dockerfile berfungsi - tanpa sihir):
apiVersion: apps/v1beta2 kind: Deployment metadata: name: django labels: app: django spec: replicas: 2 selector: matchLabels: pod: django-container template: metadata: labels: pod: django-container spec: containers: - name: django-web image: localhost:32000/apapacy/tut-django:1.0.0 ports: - containerPort: 8000
Setoran dimuat pada hari Rabu oleh tim:
microk8s.kubectl apply -f config/deployment.yml
Secara paralel, Anda dapat menjalankan perintah yang akan memantau tindakan yang terjadi selama penerapan:
watch microk8s.kubectl get all
Sekarang Anda memiliki beberapa Pods dengan aplikasi Django yang tidak dapat Anda akses. Agar Pods dapat berkomunikasi satu sama lain dan dengan dunia luar, ada abstraksi lain - ini adalah Layanan. Layanan, seperti Penempatan, ditentukan oleh file konfigurasi:
kind: Service apiVersion: v1 metadata: name: django-service spec: selector: pod: django-container ports: - protocol: TCP port: 8000 # targetPort: 8001 type: ClusterIP # type: NodePort
pod: django-container
pemilih
pod: django-container
menentukan Deployment mana yang akan dilayani oleh Layanan (nama pemilih pod tidak ditentukan sebelumnya - itu hanya label yang harus cocok). Layanan dimuat mirip dengan Penempatan:
microk8s.kubectl apply -f config/service.yml
Setelah mengunduh, Layanan dapat diakses di alamat jaringan internal. Jika Anda menjalankan perintah
microk8s.kubectl get all
, Anda dapat melihat alamat ini:
service/django-service ClusterIP 10.152.183.156 none 8000/TCP 3h33m
Dengan menjalankan perintah curl (atau dengan membuka browser), kami mendapatkan halaman sambutan Django:
curl 10.152.183.156:8000
Ada dua baris yang dikomentari dalam konfigurasi Layanan. Jika Anda membatalkan komentar mereka, layanan ini akan tersedia tambahan dari jaringan eksternal melalui port acak di kisaran 32000 dan lebih tinggi.
Untuk mendapatkan alamat permanen untuk Layanan, yang memungkinkan untuk dihubungi dari jaringan eksternal, MicroK8s menawarkan dua opsi: 1) masuk dan 2) istio. Cara termudah untuk melakukan ini adalah dengan masuknya. Jika belum diaktifkan, maka Anda perlu mengaktifkan komponen masuknya:
microk8s.enable ingress
Setelah itu, Anda dapat memverifikasi bahwa komponen ini diinstal dan berfungsi dengan menjalankan perintah
microk8s.kubectl get all
. Beberapa entri akan muncul dalam daftar aplikasi dan layanan dengan nama
default-http-backend
. Secara khusus, layanan yang berjalan pada port 80 akan muncul:
service/default-http-backend ClusterIP 10.152.183.42 none 80/TCP 179m
Nama default-http-backend adalah nama yang telah ditentukan di MicroK8s. Dengan nama inilah Anda harus merujuk ke layanan ini dalam konfigurasi masuknya.
Konfigurasi masuknya menyerupai konfigurasi server web atau server proxy, dan di suatu tempat di dalam sistem, mereka. Oleh karena itu, host, jalur, dan port ada di dalamnya - semua atribut yang akrab:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: tut-django annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: backend: serviceName: default-http-backend servicePort: 80 rules: - host: localhost http: paths: - path: /django backend: serviceName: django-service servicePort: 8000
Konfigurasi masuknya dimuat dengan perintah:
microk8s.kubectl apply -f config/ingress.yml
Setelah itu, halaman selamat datang Django akan tersedia di
localhost / DjangoItu saja untuk hari ini.
Tautan yang bermanfaat:
1.
github.com/apapacy/microk8s-tut2.
medium.com/@markgituma/kubernetes-local-to-production-with-django-2-docker-and-minikube-ba843d858817apapacy@gmail.com
10 Februari 2019