🎉
【Azure Kubernetes Service】- StreamlitをACR経由でAKSにデプロイするまでの流れ
執筆日
2024/11/5
やること
Localで開発したStreamlitのアプリケーションをAzure Container Registry(ACR)経由でAzure Kubernetes Service(AKS)にデプロイしてみます。
流れ
- Streamlitでアプリを作成する
- Dockerイメージを作成してローカルでテストする
- DockerイメージをACRにプッシュする
- AKSにデプロイする
前提
- Windows OS
- Python 3.9.2
1. Streamlitのアプリを作成する
- Python仮想環境を作成し、Streamlitをインストールします。
python -m venv .venv
.venv\Scripts\activate
pip install streamlit
- VSCodeを開き、
app.py
ファイルを作成し、以下のコードを記述します。
import streamlit as st
st.title("AKS TEST")
- 以下のコマンドを実行し、アプリが立ち上がることを確認します。
streamlit run app.py
2. Dockerイメージを作成してローカルでテストする
-
requirements.txt
とDockerfile
を作成します。
# requirements.txt
streamlit
# Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["streamlit", "run", "app.py", "--server.port=80", "--server.enableCORS=false"]
- Dockerイメージをビルドし、ローカルでテストします。
docker build -t aks-test .
docker run -p 8501:80 aks-test
- ブラウザで http://localhost:8501/ にアクセスし、アプリが立ち上がったことを確認します。
3. DockerイメージをACRにプッシュする
-
Azure Container Registry(ACR)を構築します。
SKUは何でもOKです。今回はBasicで作成します。 -
Dockerイメージをビルドし、ACRにプッシュします。
docker build -t <acrのリソース名>.azurecr.io/aks-test .
az acr login --name <acrのリソース名>
docker push <acrのリソース名>.azurecr.io/aks-test
-
ACRにプッシュされたことを確認します。
-
AKSにACR Pullの権限を付与する
4. AKSへデプロイする
- Azure CLIを使ってAKSクラスターに接続します。
# Azure のテナントにログインする
az login -t "tenant ID"
# クラスター資格情報をダウンロードする
az aks get-credentials --resource-group "リソースグループ名" --name "クラスター名" --overwrite-existing
- デプロイメントとサービスのYAMLファイルを作成します。
streamlit-deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: streamlit-deployment
namespace: web
spec:
replicas: 2
selector:
matchLabels:
app: streamlit
template:
metadata:
labels:
app: streamlit
spec:
containers:
- name: streamlit
image: <acrのリソース名>.azurecr.io/aks-test
ports:
- containerPort: 80
streamlit-service.yaml:
apiVersion: v1
kind: Service
metadata:
name: streamlit-service
namespace: web
spec:
type: LoadBalancer
selector:
app: streamlit
ports:
- protocol: TCP
port: 80
targetPort: 80
- デプロイメントとサービスを適用します。
# 名前空間を作成
kubectl create namespace web
# デプロイメントを適用
kubectl apply -f streamlit-deployment.yaml
# サービスを適用
kubectl apply -f streamlit-service.yaml
- サービスのステータスを確認し、外部IPが割り当てられていることを確認します。
kubectl get services -n web
- ブラウザで外部IPにアクセスし、Streamlitアプリケーションが表示されることを確認します。
クリーンアップ
作業が終わったら、リソースをクリーンアップします。
# サービスの削除
kubectl delete -f streamlit-service.yaml
# デプロイメントの削除
kubectl delete -f streamlit-deployment.yaml
# 名前空間の削除(必要に応じて)
kubectl delete namespace web
まとめ
Localで開発したStreamlitのアプリケーションをACR経由でAKSにデプロイする手順についてまとめました。
AKSの雰囲気は分かってきた気がする。ただ、ムズカシイ。。
Discussion