導入
Oktetoは、Kubernetesアプリケーションの開発プロセスを簡素化する開発プラットフォームです。開発者は、複雑なローカル開発環境を構築することなく、Kubernetesクラスタ上で直接アプリケーションを構築・テストできます。Oktetoは、Kubernetesクラスタ上で実行されるアプリケーションのライブアップデートを可能にするため、開発者はアプリケーションを再構築したり再デプロイしたりすることなく、コードの変更をリアルタイムで確認できます。.
このチュートリアルでは、Python アプリケーションを作成し、Okteto を使用して Kubernetes にデプロイします。.
前提条件
- Kubernetes 1.28 クラスター
- kubectl がインストールされ、クラスターと通信するように構成されています。.
- Docker Hubアカウント
- Docker はローカル マシン上で実行されています。.
- Okteto を使用するにはライセンスが必要です。ライセンスキーを取得するには、Okteto の 30 日間無料トライアルにご登録ください。.
- Helm パッケージ マネージャーがローカル マシンにインストールされています。.
- Nginx Ingress が使用するロードバランサーを指す、完全に登録されたドメイン名。* という名前とロードバランサーの IP アドレスを持つ A レコードを作成する必要があります。.
ステップ1 – Pythonプログラムを作成する
まず、UbuntuシステムにPythonがインストールされていることを確認する必要があります。ターミナルを開いて次のコマンドを入力することで確認できます。
python3 --versionPythonがインストールされている場合は、このコマンドでPythonのバージョンが表示されます。インストールされていない場合は、次のコマンドでインストールできます。
sudo apt install python3 python3-venv python3-pip -y次に、アプリケーション コードやその他の設定を保存するディレクトリを作成します。.
mkdir my-app次に、アプリケーション ディレクトリに移動し、プロジェクトの依存関係を分離するための仮想環境を作成します。.
cd my-app
python3 -m venv python-env次に、次のコマンドを使用して仮想環境をアクティブ化します。.
source python-env/bin/activate次に、アプリケーション用の新しいPythonファイルを作成します。例えば、シンプルなapp.pyファイルを作成します。
nano app.py次のコードを追加します。
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')次に、Flask Web フレームワークをインストールします。.
pip install flask次のコマンドを使用して Python プログラムを実行します。.
python3 app.py
次の出力が表示されます。.
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-468Flask アプリケーションがローカルで実行されるようになったので、curl を使用して検証できます。
curl -X GET -H "Content-Type: application/json" http://localhost:5000Flask アプリケーションから次の応答が返されるはずです。.
OutputHello, This is a simple Python App!プロジェクトの作業が完了したら、次のコマンドを実行して仮想環境を非アクティブ化できます。
deactivateこの時点で、Python プログラムが作成され、ローカルでテストされました。.
ステップ2 – PythonアプリケーションをDockerizeする
Python アプリケーションを Docker 化するには、アプリケーションの実行に必要な Python 環境と依存関係を含む Docker イメージを作成する必要があります。.
まず、Python アプリケーションのルート ディレクトリに Dockerfile というファイルを作成します。.
nano Dockerfile次のコンテンツを追加します。
# 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"]この Dockerfile では次のようになります。
- FROM python:3.8-slim: 使用するベースイメージを指定します。Python 3.8がインストールされた公式Pythonイメージを使用しています。.
- WORKDIR /app: コンテナ内の作業ディレクトリを /app に設定します。.
- ./app を追加: 現在のディレクトリの内容をコンテナの /app フォルダにコピーします。.
- RUN pip install flask: Flask フレームワークをインストールします。.
- EXPOSE 5000: ポート 5000 を公開して、着信接続を許可します。.
- CMD [“python3″, “app.py”]: コンテナの起動時に実行するコマンドを指定します。この場合は、app.pyアプリケーションを実行します。.
次に、次のコマンドを実行して、Dockerfile の指示に基づいてイメージをビルドします。.
docker build -t my-app .Docker イメージをビルドしたら、ビルドしたイメージを使用してコンテナ内でアプリケーションを実行できます。
docker run -dit -p 5000:5000 my-app:latestこのコマンドは、my-app イメージからコンテナを実行し、コンテナ ポートをホスト ポート 5000 にマッピングします。.
docker ps コマンドを使用して、実行中のアプリケーション コンテナーを確認できます。.
docker ps出力は次のようになります。
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ウェブブラウザを開くか、curl を使用して http://your-server-ip:5000 という URL でアプリケーションにアクセスします。「Hello, This is a simple Python App!」というメッセージが表示され、Python アプリケーションが Docker コンテナ内で実行されていることがわかります。.
これで、Python アプリケーションの Docker 化が正常に完了しました。.
ステップ3 – Python DockerイメージをDockerHubレジストリにプッシュする
まず、DockerHubアカウントが必要です。お持ちでない場合は、DockerHubのウェブサイトで作成できます。.
Docker Hubにログインするには、docker loginコマンドを使用します。Docker Hubのユーザー名とパスワードの入力を求められます。.
docker loginこのコマンドの出力は次のようになります。
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イメージを Docker Hub にプッシュする前に、Docker Hub のユーザー名と目的のリポジトリの名前でタグ付けする必要もあります。.
docker tag my-app yourusername/my-app:latestdocker push コマンドを使用して、Docker イメージを Docker Hub にプッシュできるようになりました。.
docker push yourusername/my-app:latestイメージをプッシュした後、Docker Hub CLI を使用して検索することで、Docker Hub 上でイメージが利用可能であることを確認できます。.
docker search yourusername/my-appPython アプリケーションの Docker イメージが Docker Hub で利用できるようになりました。他のユーザーがプルしたり、別の環境にデプロイしたりすることができます。.
ステップ4 – PythonアプリケーションをデプロイするためのKubernetesマニフェストを作成する
ここで、Okteto を使用して Kubernetes マニフェスト ファイルを作成し、my-app というアプリケーションのデプロイメント、サービス、および入力リソースを定義する必要があります。.
nano k8s.yamlファイルに次の設定を追加します。.
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上記のファイルは、Oktetoを使用してmy-appというアプリケーションを実装し、ポート5000のClusterIPサービスを介して内部的に公開し、HTTPトラフィックをアプリケーションに誘導するためのIngressリソースを設定します。Okteto固有のアノテーションは、ホスト名の自動生成など、Oktetoが提供する一部の機能を有効にするために使用されます。.
ステップ5 – Helmを使ってOktetoをインストールする
まず、Okteto Helm リポジトリを Helm クライアントに追加する必要があります。.
helm repo add okteto https://charts.okteto.comOkteto Helm リポジトリを追加したら、利用可能なチャートの最新情報を確実に取得するために、Helm リポジトリを更新する必要があります。
helm repo update次に、Okteto 用の config.yaml を作成します。.
nano config.yaml以下に示すように、Okteto ライセンス キー、サブドメイン、およびその他の設定を追加します。
license: FT7YCAYBAEDUY2LDMVXHGZIB76BAAAIDAECEIYLUMEAQUAABAFJAD74EAAAQCUYB76CAAAAABL7YGBIBAL7YMAAAAD77N74CAH7YU6ZCOZSXE43JN5XCEORSFQRGK3LBNFWCEORCNBUXIZLTNBVGK5DIOZQUA3DJNZ2XQYTVPIXGG33NEIWCEY3PNVYGC3TZEI5CE3DJNZ2XQYTVPIRCYITTMVQXI4ZCHIZTALBCORUWK4RCHIRHGY3BNRSSELBCORZGSYLMEI5HI4TVMUWCEZLOMQRDUIRSGAZDILJQGQWTCMCUGA2TUMJUHI2DQWRCPUATCAWDZA5DGNLGYAT25X6NRCJVJNWBQMG2LD7DWY36ZYXOZ7X5B37HZOBHXYV7OSCZ5HKH4G4EOIHJ7XOACMICRENEMSP5CHENLAE2XHXY44AMKKMHR5LB6IEWXNF56KJE6RGDVSGM2JW63F7DNP5ZS6REKK55RYIBMAA=
subdomain: okteto.example.com
buildkit:
persistence:
enabled: true
registry:
storage:
filesystem:
persistence:
enabled: true次に、config.yaml 構成ファイルを使用して、Okteto の最新バージョンをインストールします。.
helm install okteto okteto/okteto -f config.yaml --namespace okteto --create-namespaceOkteto をインストールすると、次の出力が得られます。.
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`しばらく待ってから、DigitalOcean が動的に割り当てた IP アドレスを、Okteto の一部としてインストールして構成した NGINX Ingress に割り当てます。
kubectl get service -l=app.kubernetes.io/name=ingress-nginx,app.kubernetes.io/component=controller --namespace=okteto次の出力が表示されます。.
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選択したドメインのDNSに、外部IPアドレスを追加する必要があります。これは、*という名前のAレコードを作成することで行います。.
次に、Web ブラウザを開き、https://okteto.okteto.example.com/login#token=88f8cc11 で Okteto インスタンスにアクセスします。.

ステップ6 – Okteto CLIのインストールと設定
Okteto CLI は、Kubernetes 上で直接アプリケーションを開発できるオープンソースのコマンドライン ツールです。.
LinuxとmacOSでは、curlを使ってOkteto CLIをインストールできます。ターミナルを開き、以下のコマンドを実行してください。
sudo curl https://get.okteto.com -sSfL | shインストールが完了したら、次のコマンドを実行して、Okteto CLI が正しくインストールされていることを確認できます。
okteto versionこのコマンドは、システムにインストールされている Okteto CLI のバージョンを表示します。.
Outputokteto version 2.25.2次に、個人アクセス コードを使用して Okteto CLI で認証する必要があります。.
/* okteto context use https://okteto.okteto.example.com --token 88f8cc11 --insecure-skip-tls-verifycode... */出力は次のようになります。
Output ✓ Using okteto-admin @ okteto.okteto.example.com次に、次のコマンドを実行して、Okteto CLI が設定されていることを確認します。.
okteto context list出力は次のようになります。
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 – Oktetoマニフェストを作成する
Python アプリケーションの開発を開始するには、Okteto マニフェスト ファイルを作成し、開発環境の構成を定義する必要があります。.
簡単な Python アプリケーション用の okteto.yaml ファイルを作成しましょう。.
nano okteto.yaml次の設定を追加します。.
deploy:
- kubectl apply -f k8s.yaml
dev:
my-app:
command: bash
environment:
- FLASK_ENV=development
sync:
- .:/app
reverse:
- 9000:9000
volumes:
- /root/.cache/pip上記のファイルでは:
- deploy: このセクションではデプロイメント設定を定義します。okteto up または okteto deploy を実行すると、Okteto は kubectl application -f k8s.yaml コマンドを実行し、k8s.yaml ファイルで定義された Kubernetes リソースをデプロイします。これにより、開発環境の設定とは別にデプロイメント設定を指定できます。.
- command: bash: 開発環境の起動時に実行するコマンドを指定します。.
- Environment: 開発環境に設定する環境変数を指定します。この場合は、FLASK_ENV を development に設定します。.
- SYNC: ローカルマシンと開発環境間で同期するフォルダを指定します。開発環境内の現在のディレクトリ (.) と /app を同期します。.
- リバース: 開発環境からローカルマシンにポートを公開するためのポート転送ルールを指定します。この場合、開発環境のポート9000をローカルマシンのポート9000に転送します。.
- volumes: 開発環境にインストールする追加のボリュームを指定します。この場合、開発環境にpipパッケージをキャッシュするために使用できる/root/.cache/pipディレクトリをインストールします。.
次のコマンドを使用して、Python アプリケーションを Kubernetes クラスターにデプロイします。.
okteto deployデプロイが成功すると、次の出力が表示されます。.
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その後、ウェブブラウザに戻り、Oktetoダッシュボードを更新します。デプロイされたアプリケーションが表示されます。
https://my-app-okteto-admin.okteto.example.com という URL を使用して Python アプリケーションにアクセスすることもできます。.

ステップ8 – Kubernetesで直接Pythonアプリケーションを開発する
このセクションでは、okteto up コマンドを使用して、Python アプリケーションを Kubernetes に直接デプロイします。このコマンドは、ローカルコードを開発環境と同期します。ローカルマシンでお気に入りの IDE やテキストエディタを使用してコードを変更すると、変更内容が Kubernetes の開発環境に自動的に同期されます。.
Okteto を使用して開発環境を開始しましょう。
okteto upこのコマンドは、okteto.yaml ファイルで指定された設定に基づいて開発環境を作成します。.
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#次に、Python プログラムを実行します。
python3 app.py次の出力が表示されます。.
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次に、app.py アプリケーション ファイルを編集します。
nano app.py次の行を変更します。
return "Hello, This is a simple Python App Deployed on Kubernetes"ファイルを保存して閉じます。Okteto はコードの変更を自動的に検出し、Kubernetes にすぐに適用します。.
ウェブブラウザに戻り、Pythonプログラムのページをリロードしてください。以下のページに変更したプログラムが表示されます。.

結果
このチュートリアルでは、基本的なPythonアプリケーションを作成し、Oktetoを使用してKubernetesクラスターにデプロイしました。Oktetoはローカルコードの変更を開発環境とリアルタイムで同期できるため、迅速な開発イテレーションとコード変更の即時フィードバックを実現します。Oktetoを利用することで、開発者はKubernetesインフラストラクチャの複雑さを気にすることなく、高品質なPythonアプリケーションの構築に集中できます。.













