Python uygulaması Okteto ile Kubernetes'e nasıl dağıtılır?

0 Hisse senetleri
0
0
0
0

giriiş

Okteto, Kubernetes uygulamaları geliştirme sürecini basitleştirmek için kullanılan bir geliştirme platformudur. Geliştiricilerin, karmaşık yerel geliştirme ortamları kurmadan uygulamalarını doğrudan Kubernetes kümeleri üzerinde oluşturup test etmelerine olanak tanır. Okteto, Kubernetes kümelerinde çalışan uygulamaların canlı güncellemelerini sağlayarak, geliştiricilerin uygulamalarını yeniden derlemek veya yeniden dağıtmak zorunda kalmadan kodlarındaki değişiklikleri gerçek zamanlı olarak görmelerini sağlar.

Bu eğitimde, Okteto kullanarak bir Python uygulaması oluşturup Kubernetes'e dağıtacaksınız.

Ön koşullar
  • Bir Kubernetes 1.28 kümesi
  • kubectl kümenizle iletişim kuracak şekilde kuruldu ve yapılandırıldı.
  • Bir Docker Hub hesabı
  • Docker yerel makinenizde çalışıyor.
  • Okteto'yu kullanmak için lisans gereklidir. Lisans anahtarı almak için Okteto'nun 30 günlük ücretsiz deneme sürümüne kaydolun.
  • Helm paket yöneticisi yerel makinenize kuruludur.
  • Nginx Ingress tarafından kullanılan Yük Dengeleyici'ye işaret eden tam kayıtlı bir alan adı. * adında bir A kaydı ve Yük Dengeleyici IP'si oluşturmanız gerekir.

Adım 1 – Bir Python programı oluşturun

Öncelikle, Ubuntu sisteminizde Python'un yüklü olduğundan emin olmanız gerekir. Bunu bir terminal açıp şunu yazarak kontrol edebilirsiniz:

python3 --version

Python yüklüyse, bu komut Python sürümünü görüntüler. Değilse, aşağıdaki komutu kullanarak yükleyebilirsiniz:

sudo apt install python3 python3-venv python3-pip -y

Daha sonra uygulama kodunu ve diğer ayarları depolamak için bir dizin oluşturun.

mkdir my-app

Daha sonra uygulama dizininize gidin ve projenizin bağımlılıklarını izole etmek için sanal bir ortam oluşturun.

cd my-app
python3 -m venv python-env

Daha sonra aşağıdaki komutu kullanarak sanal ortamı aktif hale getirin.

source python-env/bin/activate

Ardından, uygulamanız için yeni bir Python dosyası oluşturun. Örneğin, basit bir app.py dosyası oluşturun:

nano app.py

Aşağıdaki kodu ekleyin:

from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, This is a simple Python App!"
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')

Daha sonra Flask web framework’ünü kurun.

pip install flask

Şimdi Python programınızı aşağıdaki komutu kullanarak çalıştırın.

python3 app.py

Aşağıdaki çıktıyı göreceksiniz.

Output * Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:5000
* Running on http://172.20.10.2:5000
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: 311-959-468

Flask uygulaması artık yerel olarak çalıştığına göre, curl kullanarak bunu doğrulayabilirsiniz:

curl -X GET -H "Content-Type: application/json" http://localhost:5000

Flask uygulamasından aşağıdaki yanıtı almanız gerekir.

OutputHello, This is a simple Python App!

Projeniz üzerinde çalışmayı bitirdiğinizde, aşağıdakileri çalıştırarak sanal ortamı devre dışı bırakabilirsiniz:

deactivate

Bu noktada bir Python programı oluşturmuş ve bunu yerel olarak test etmiş olursunuz.

Adım 2 – Python uygulamasını Dockerize edin

Bir Python uygulamasını Docker'a dönüştürmek, uygulamayı çalıştırmak için gereken Python ortamını ve bağımlılıkları içeren bir Docker görüntüsü oluşturmayı içerir.

Öncelikle Python uygulamanızın kök dizininde Dockerfile adında bir dosya oluşturun.

nano Dockerfile

Aşağıdaki içeriği ekleyin:

# Use an official Python runtime as a parent image
FROM python:3.8-slim
# Set the working directory in the container
WORKDIR /app
# Copy the current directory contents into the container at /app
ADD . /app
# Install any needed dependencies specified in requirements.txt
RUN pip install flask
# Make port 5000 available to the world outside this container
EXPOSE 5000
# Define environment variable
ENV NAME DockerizedPythonApp
# Run app.py when the container launches
CMD ["python3", "./app.py"]
Bu Dockerfile'da:
  • FROM python:3.8-slim: Kullanılacak temel görüntüyü belirtir. Python 3.8 yüklü resmi bir Python görüntüsü kullanıyorsunuz.
  • WORKDIR /app: Konteynerin içindeki çalışma dizinini /app olarak ayarlar.
  • . /app ekle: Geçerli dizinin içeriğini konteynerin /app klasörüne kopyalar.
  • RUN pip install flask: Flask framework'ünü kurar.
  • EXPOSE 5000: Gelen bağlantılara izin vermek için 5000 numaralı portu açığa çıkarır.
  • CMD [“python3″, “app.py”]: Konteyner başlatıldığında çalıştırılacak bir komut belirtir. Bu durumda, app.py uygulamasını çalıştırır.

Şimdi Dockerfile'ınızdaki talimatlara göre imajı oluşturmak için aşağıdaki komutu çalıştırın.

docker build -t my-app .

Docker imajını oluşturduktan sonra, oluşturulan imajı kullanarak uygulamanızı bir kapsayıcıda çalıştırabilirsiniz:

docker run -dit -p 5000:5000 my-app:latest

Bu komut my-app görüntüsünden bir konteyner çalıştırır ve konteyner portunu ana bilgisayar portu 5000'e eşler.

Çalışan uygulama konteynerinizi docker ps komutunu kullanarak doğrulayabilirsiniz.

docker ps

Çıktı şu şekilde olacaktır:

Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
761c54c77411 my-app:latest "python3 ./app.py" 3 seconds ago Up 3 seconds 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp pedantic_wescoff

Bir web tarayıcısı açın veya curl komutunu kullanarak http://your-server-ip:5000 URL'sini kullanarak uygulamaya erişin. Python uygulamanızın bir Docker konteynerinde çalıştığını belirten Merhaba, Bu basit bir Python Uygulamasıdır! mesajını görmelisiniz.

Artık Python uygulamanızı başarıyla Dockerize ettiniz.

Adım 3 – Python Docker görüntüsünü DockerHub kayıt defterine gönderin

Öncelikle bir DockerHub hesabınızın olması gerekiyor. Eğer hesabınız yoksa, DockerHub web sitesinden bir hesap oluşturabilirsiniz.

Docker Hub'a giriş yapmak için docker login komutunu kullanın. Docker Hub kullanıcı adınızı ve parolanızı girmeniz istenecektir.

docker login

Bu komutun çıktısı aşağıdaki gibi olacaktır:

OutputLogin with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: [email protected]
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded

Görüntüyü Docker Hub'a göndermeden önce, onu Docker Hub kullanıcı adınız ve istediğiniz deponun adıyla etiketlemeniz gerekir.

docker tag my-app yourusername/my-app:latest

Artık docker push komutunu kullanarak Docker imajınızı Docker Hub'a gönderebilirsiniz.

docker push yourusername/my-app:latest

Görüntüyü gönderdikten sonra, Docker Hub CLI'yi kullanarak arama yaparak Docker Hub'da kullanılabilir olduğunu doğrulayabilirsiniz.

docker search yourusername/my-app

Python uygulamanızın Docker imajı artık Docker Hub'da mevcut ve başkaları tarafından çekilebilir veya farklı ortamlara dağıtılabilir.

Adım 4 – Python uygulamasını dağıtmak için Kubernetes bildirimleri oluşturun

Şimdi my-app adlı bir uygulama için dağıtımı, hizmeti ve giriş kaynaklarını tanımlamak üzere Okteto kullanarak bir Kubernetes manifest dosyası oluşturmanız gerekiyor.

nano k8s.yaml

Aşağıdaki ayarları dosyaya ekleyin.

apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- image: yourusername/my-app
name: my-app
---
apiVersion: v1
kind: Service
metadata:
name: my-app
spec:
type: ClusterIP
ports:
- name: "my-app"
port: 5000
selector:
app: my-app
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app
annotations:
dev.okteto.com/generate-host: my-app
spec:
rules:
- http:
paths:
- backend:
service:
name: my-app
port:
number: 5000
path: /
pathType: ImplementationSpecific

Yukarıdaki dosya, Okteto kullanarak my-app adlı bir uygulamayı uygular, 5000 numaralı bağlantı noktasındaki bir ClusterIP hizmeti aracılığıyla dahili olarak kullanıma sunar ve HTTP trafiğini uygulamaya yönlendirmek için bir Ingress kaynağı oluşturur. Okteto'ya özgü açıklamalar, otomatik ana bilgisayar adı oluşturma gibi Okteto tarafından sağlanan bazı özellikleri etkinleştirmek için kullanılır.

Adım 5 – Helm kullanarak Okteto'yu yükleyin

Öncelikle Okteto Helm deposunu Helm istemcinize eklemeniz gerekiyor.

helm repo add okteto https://charts.okteto.com

Okteto Helm deposunu ekledikten sonra, mevcut grafikler hakkında en son bilgilere sahip olduğunuzdan emin olmak için Helm depolarınızı güncellemeniz gerekir:

helm repo update

Daha sonra Okteto için bir config.yaml dosyası oluşturun.

nano config.yaml

Aşağıda gösterildiği gibi Okteto lisans anahtarını, alt alan adını ve diğer ayarları ekleyin:

license: FT7YCAYBAEDUY2LDMVXHGZIB76BAAAIDAECEIYLUMEAQUAABAFJAD74EAAAQCUYB76CAAAAABL7YGBIBAL7YMAAAAD77N74CAH7YU6ZCOZSXE43JN5XCEORSFQRGK3LBNFWCEORCNBUXIZLTNBVGK5DIOZQUA3DJNZ2XQYTVPIXGG33NEIWCEY3PNVYGC3TZEI5CE3DJNZ2XQYTVPIRCYITTMVQXI4ZCHIZTALBCORUWK4RCHIRHGY3BNRSSELBCORZGSYLMEI5HI4TVMUWCEZLOMQRDUIRSGAZDILJQGQWTCMCUGA2TUMJUHI2DQWRCPUATCAWDZA5DGNLGYAT25X6NRCJVJNWBQMG2LD7DWY36ZYXOZ7X5B37HZOBHXYV7OSCZ5HKH4G4EOIHJ7XOACMICRENEMSP5CHENLAE2XHXY44AMKKMHR5LB6IEWXNF56KJE6RGDVSGM2JW63F7DNP5ZS6REKK55RYIBMAA=
subdomain: okteto.example.com
buildkit:
persistence:
enabled: true
registry:
storage:
filesystem:
persistence:
enabled: true

Şimdi config.yaml yapılandırma dosyasını kullanarak Okteto'nun en son sürümünü yükleyin.

helm install okteto okteto/okteto -f config.yaml --namespace okteto --create-namespace

Okteto'yu kurduktan sonra aşağıdaki çıktıyı alacaksınız.

OutputNAME: okteto
LAST DEPLOYED: Tue Mar 12 20:27:21 2024
NAMESPACE: okteto
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Congratulations! Okteto is successfully installed!
Follow these steps to complete your domain configuration:
1. Create a wildcard A record "*.okteto.example.com", pointing it to the Okteto NGINX ingress controller External-IP:
$ kubectl get service -l=app.kubernetes.io/name=ingress-nginx,app.kubernetes.io/component=controller --namespace=okteto
2. Access your Okteto instance at `https://okteto.okteto.example.com/login#token=88f8cc11`

Bir süre bekleyin ve ardından DigitalOcean'ın dinamik olarak atadığı IP adresini, Okteto'nun bir parçası olarak yeni kurduğunuz ve yapılandırdığınız NGINX Ingress'e atayın:

kubectl get service -l=app.kubernetes.io/name=ingress-nginx,app.kubernetes.io/component=controller --namespace=okteto

Aşağıdaki çıktıyı göreceksiniz.

OutputNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
okteto-ingress-nginx-controller LoadBalancer 10.101.31.239 45.76.14.191 80:31150/TCP,443:31793/TCP 3m21s

Seçtiğiniz alan adı için HARİCİ IP adresini alıp DNS'inize eklemeniz gerekiyor. Bu, *.adında bir A kaydı oluşturarak yapılır.

Şimdi web tarayıcınızı açın ve https://okteto.okteto.example.com/login#token=88f8cc11 adresinden Okteto örneğinize erişin.


Adım 6 – Okteto CLI'yi Kurun ve Yapılandırın

Okteto CLI, uygulamalarınızı doğrudan Kubernetes üzerinde geliştirmenize olanak tanıyan açık kaynaklı bir komut satırı aracıdır.

Okteto CLI'yi Linux ve macOS'a curl kullanarak kurabilirsiniz. Terminalinizi açın ve aşağıdaki komutu çalıştırın:

sudo curl https://get.okteto.com -sSfL | sh

Kurulum tamamlandıktan sonra, aşağıdaki komutu çalıştırarak Okteto CLI'nin doğru şekilde kurulduğunu doğrulayabilirsiniz:

okteto version

Bu komut sisteminizde yüklü olan Okteto CLI versiyonunu görüntüler.

Outputokteto version 2.25.2

Daha sonra Okteto CLI ile kimlik doğrulaması yapmak için kişisel erişim kodlarınızı kullanmanız gerekiyor.

/* okteto context use https://okteto.okteto.example.com --token 88f8cc11 --insecure-skip-tls-verifycode... */

Çıktı şu şekilde olacaktır:

Output ✓ Using okteto-admin @ okteto.okteto.example.com

Daha sonra Okteto CLI'nizin yapılandırıldığından emin olmak için aşağıdaki komutu çalıştırın.

okteto context list

Bu aşağıdaki çıktıyı verir:

OutputName Namespace Builder Registry
https://okteto.okteto.example.com * okteto-admin tcp://buildkit.okteto.example.com:443 registry.okteto.example.com
vke-4b7aaaa6-78fa-4a19-9fb3-cf7b8c1ec678 default docker -

7. Adım – Okteto Manifest'inizi Oluşturun

Bir Python uygulaması geliştirmeye başlamak için bir Okteto manifest dosyası oluşturmanız ve geliştirme ortamınız için yapılandırmayı tanımlamanız gerekir.

Basit bir Python uygulaması için okteto.yaml dosyası oluşturalım.

nano okteto.yaml

Aşağıdaki yapılandırmayı ekleyin.

deploy:
- kubectl apply -f k8s.yaml
dev:
my-app:
command: bash
environment:
- FLASK_ENV=development
sync:
- .:/app
reverse:
- 9000:9000
volumes:
- /root/.cache/pip
Yukarıdaki dosyada:
  • Dağıtım: Bu bölüm dağıtım yapılandırmasını tanımlar. okteto up veya okteto deploy komutunu çalıştırdığınızda, Okteto, k8s.yaml dosyasında tanımlanan Kubernetes kaynaklarını dağıtmak için kubectl application -f k8s.yaml komutunu çalıştırır. Bu, dağıtım yapılandırmanızı geliştirme ortamı yapılandırmanızdan ayrı olarak belirtmenize olanak tanır.
  • komut: bash: Geliştirme ortamı başlatıldığında yürütülecek komutu belirtir.
  • Ortam: Geliştirme ortamında ayarlanacak ortam değişkenlerini belirtir. Bu durumda, FLASK_ENV değişkenini geliştirme olarak ayarlar.
  • SYNC: Yerel makineniz ile geliştirme ortamı arasında senkronize edilecek klasörleri belirtir. Geliştirme ortamının içindeki geçerli dizini (.) /app ile senkronize eder.
  • Ters: Geliştirme ortamındaki bağlantı noktalarını yerel makinenize açmak için bağlantı noktası yönlendirme kurallarını belirtir. Bu durumda, geliştirme ortamındaki 9000 numaralı bağlantı noktasını yerel makinenizdeki 9000 numaralı bağlantı noktasına yönlendirir.
  • Birimler: Geliştirme ortamına yüklenecek ek birimleri belirtir. Bu durumda, geliştirme ortamında pip paketlerini önbelleğe almak için kullanılabilecek /root/.cache/pip dizinini yükler.

Şimdi aşağıdaki komutu kullanarak Python uygulamanızı Kubernetes kümesine dağıtın.

okteto deploy

Başarılı dağıtımın ardından aşağıdaki çıktıyı göreceksiniz.

Outputdeployment.apps/my-app created
service/my-app created
ingress.networking.k8s.io/my-app created
i There are no available endpoints for 'Okteto'.
Follow this link to know more about how to create public endpoints for your application:
https://www.okteto.com/docs/cloud/ssl/
✓ Development environment 'Okteto' successfully deployed
i Run 'okteto up' to activate your development container

Ardından web tarayıcınıza geri dönün ve Okteto kontrol panelini yenileyin. Dağıtılan uygulamanızı göreceksiniz:


Python uygulamanıza https://my-app-okteto-admin.okteto.example.com URL'sini kullanarak da erişebilirsiniz.


Adım 8 – Python uygulamasını doğrudan Kubernetes'te geliştirin

Bu bölümde, bir Python uygulamasını doğrudan Kubernetes'e dağıtmak için okteto up komutunu kullanacaksınız. Bu komut, yerel kodunuzu geliştirme ortamıyla senkronize edecektir. Kodu, yerel makinenizdeki favori IDE'nizi veya metin düzenleyicinizi kullanarak değiştirebilirsiniz; değişiklikler otomatik olarak Kubernetes'teki geliştirme ortamıyla senkronize edilecektir.

Okteto kullanarak geliştirme ortamını başlatalım:

okteto up

Bu komut okteto.yaml dosyasında belirtilen ayarlara dayalı bir geliştirme ortamı oluşturur.

Output i Using okteto-admin @ okteto.okteto.example.com as context
i 'Okteto' was already deployed. To redeploy run 'okteto deploy' or 'okteto up --deploy'
i Build section is not defined in your okteto manifest
✓ Persistent volume successfully attached
✓ Images successfully pulled
✓ Files synchronized
Context: okteto.okteto.example.com
Namespace: okteto-admin
Name: my-app
Reverse: 9000 <- 9000
root@my-app-okteto-7767588c8d-ndzj7:/app#

Daha sonra Python programınızı çalıştırın:

python3 app.py

Aşağıdaki çıktıyı göreceksiniz.

Output * Serving Flask app 'app'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:5000
* Running on http://10.244.97.92:5000
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: 126-620-675

Şimdi app.py uygulama dosyanızı düzenleyin:

nano app.py

Aşağıdaki satırı değiştirin:

return "Hello, This is a simple Python App Deployed on Kubernetes"

Dosyayı kaydedip kapatın. Okteto, kod değişikliklerini otomatik olarak algılayacak ve bunları hemen Kubernetes'e uygulayacaktır.

Web tarayıcınıza geri dönün ve Python programınızın sayfasını yeniden yükleyin. Değiştirilmiş programınızı aşağıdaki sayfada göreceksiniz.


Sonuç

Bu eğitimde, Okteto kullanarak temel bir Python uygulaması oluşturdunuz ve bir Kubernetes kümesine dağıttınız. Okteto'nun yerel kod değişikliklerini geliştirme ortamıyla gerçek zamanlı olarak senkronize etme yeteneği, hızlı geliştirme yinelemeleri ve kod değişiklikleri hakkında anında geri bildirim sağlar. Genel olarak Okteto, geliştiricilerin Kubernetes altyapısının karmaşıklıkları hakkında endişelenmeden yüksek kaliteli Python uygulamaları oluşturmaya odaklanmalarını sağlar.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Ayrıca Şunları da Beğenebilirsiniz