はじめに
Gaiax Group Advent Calendar 2018の10日目の記事です。
インターン生ながらナチュラルにアドベントカレンダーに参加させてもらえて嬉しい限りです。
今回は、頭の中を整理することも兼ねて、ローカルにDjangoアプリをKubernetes上に構築する方法をまとめました。
目次
- 前提
- プロジェクトの作成
- Dockerfileの作成とビルド
- 作成
- ビルド
- Kubernetesへデプロイ
- Kubernetes yamlファイルの作成
- デプロイ
- ブラウザで確認
- あとがき
- 参考
前提
- pipenvとpyenvを導入済み
- dockerを導入済み
- minikubeを導入済み
プロジェクトの作成
pipenvでDjangoプロジェクトを作成します。Djangoのチュートリアルをご参考ください。
$ touch Pipfile
$ pipenv --python=3.7.1
$ pipenv install django
$ pipenv run django-admin startproject config .
実際はALLOWED_HOSTSを動的に設定する必要がありますが、今回の例ではALLOWED_HOSTSを全許可しておきます。
# ALLOWED_HOSTS = []
ALLOWED_HOSTS = ['*']
Dockerfileの作成とビルド
作成
FROM python:3.7.1
RUN mkdir /code/
COPY ./ /code/
WORKDIR /code/
RUN pip install --upgrade pip && \
pip install pipenv && \
pipenv --python /usr/local/bin/python
RUN pipenv install
CMD pipenv run python manage.py runserver 0:8000
ビルド
ビルドの前に、ホストマシンではなくminikubeのDockerを使用するように設定を変更します。
$ eval $(minikube docker-env)
この状態で、 latest
以外のタグを付けてビルドを行います。
$ docker build -t sample/django:v1 .
Kubernetesへデプロイ
Kubernetes yamlファイルの作成
下記の内容を k8s-django.yaml
などのファイル名で保存します。
kind: Deployment
apiVersion: apps/v1
metadata:
name: django
spec:
replicas: 1
selector:
matchLabels:
app: django
template:
metadata:
labels:
app: django
spec:
containers:
- name: django
image: "sample/django:v1"
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8000
name: django
---
kind: Service
apiVersion: v1
metadata:
name: django-svc
spec:
selector:
app: django
ports:
- protocol: TCP
port: 8000
name: django
type: NodePort
デプロイ
$ kubectl create -f k8s-django.yaml
ブラウザで確認
サーバーが起動したことをブラウザで確認します。
$ minikube service django-svc
あとがき
今回はminikubeでDjangoアプリのデプロイをしてみました。
ホストマシンからminikube内のアプリにアクセスするのが思ったより難しいですね。
k8s-django.yaml
にDjangoアプリを作成しましたが、同様にDBのyamlを定義してやることで、簡単にDBと接続させることが可能です。
yamlファイルをそのままGKEなどに使いまわしてデプロイできるので、開発ではdocker-compose、本番はk8sみたいな環境に比べると利便性高いですね!