前回はmariadbのPod作ったので、続きでDjangoのPod作る。
目標
今回は「*」のついたところのうち、DjangoとhttpsのPod、d1の永続化領域を作ってく。
- *mariadb 3306 ->13306
- *Django 8080 ->38080
- *https 80,443->30080,30443
- *d1 Django用永続化領域 1GiB
- *d2 mariadb用永続化領域 20GiB
内容はこんな感じ。
アプリのPod(Django)
http(8080)で普通に公開するんじゃなく、kubernetesのサービス(38080)を定義してminikubeの親ホスト名でも公開できるようにする。
Djangoのpv/pvc
必要領域は小さくていい。
1GiBもあれば十分。
kind: PersistentVolume apiVersion: v1 metadata: name: gvis-pv-django-uwsgi-nginx # PVの名前 labels: type: local spec: storageClassName: manual # PVCと一致させる必要がある capacity: storage: 1Gi accessModes: - ReadWriteOnce # 一つのノードからread/writeでマウントできるモード hostPath: path: "/data/gvis-pv-django-uwsgi-nginx" --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: gvis-pv-django-uwsgi-nginx-claim # PVCの名前 spec: # storageClassName=manualのPVを探してマウントする storageClassName: manual accessModes: - ReadWriteOnce resources: requests: storage: 1Gi # PVが持っている容量のうち1GiBを使用する
Djangoのdeployment
内容はこんな感じ。
apiVersion: apps/v1 kind: Deployment metadata: name: sv-django labels: app: sv-django spec: replicas: 1 selector: matchLabels: app: sv-django strategy: type: Recreate template: metadata: labels: app: sv-django spec: containers: - image: save-django:gvis-saved name: sv-django ports: - containerPort: 8080 resources: {} volumeMounts: # コンテナ内のどのディレクトリにpersistentVolumeをマウントするか - name: django-persistent-storage mountPath: /code/app hostname: sv-django restartPolicy: Always volumes: - name: django-persistent-storage persistentVolumeClaim: claimName: gvis-pv-django-uwsgi-nginx-claim # name=gvis-pv-django-uwsgi-nginx-claimを使って、マウントできるPVを探す
Djangoのservice
内容はこんな感じ。
Pod間通信やとhttp://sv-django:38080
で参照できるようにする。
apiVersion: v1 kind: Service metadata: labels: app: sv-django name: sv-django spec: type: ClusterIP ports: - name: "38080" port: 38080 targetPort: 8080 selector: app: sv-django
Djangoの動作確認
xrdpのPodから、Djangoのpod名でちゃんと参照できてる。
グラフが表示できてるってことはmatplotlibとか日本語フォントを取り込んだdockerイメージを使ってPodが起動できてる。
マスタテーブルのレコード一覧が表示できてるから、mariadbの読み込みもできてる。
httpsのPod(steveltn/https-portal)
SSL使うようにしてるから、httpsのpodにDjangoの38080ポートを拾わせて30443で他ホストから見えるようにする。
httpsのdeployment
内容はこんな感じ。
このPodは永続化領域使わず、dockerイメージもsteveltn/https-portal
ってのをdockerhubから直接とってくる。
envにさっきのdjangoの動作確認で使ったURLをひっかけるように書いておく。
apiVersion: apps/v1 kind: Deployment metadata: labels: app: sv-https-portal name: sv-https-portal spec: replicas: 1 selector: matchLabels: app: sv-https-portal strategy: type: Recreate template: metadata: labels: app: sv-https-portal spec: containers: - env: - name: DOMAINS value: gvis-mac.intra.gavann-it.com -> http://sv-django:38080 - name: STAGE value: local image: steveltn/https-portal:1 name: sv-https-portal ports: - containerPort: 80 - containerPort: 443 resources: {} volumeMounts: - name: https-portal-persistent-storage mountPath: /var/lib/https-portal restartPolicy: Always volumes: - name: https-portal-persistent-storage persistentVolumeClaim: claimName: gvis-pv-django-sslcerts-claim # name=gvis-pv-django-sslcerts-claimを使って、マウントできるPVを探す
httpsのservice
内容はこんな感じ。
443を30443のポートで公開する。
apiVersion: v1 kind: Service metadata: labels: app: sv-https-portal name: sv-https-portal spec: type: ClusterIP ports: - name: "30080" port: 30080 targetPort: 80 - name: "30443" port: 30443 targetPort: 443 selector: app: sv-https-portal
httpsの動作確認
30443のポートはmacのホスト名で参照できるようにしてある。
SSLはオレオレ証明やから、初回はブラウザの警告出てくれる。
「このWebサイト」のリンクをクリックすると、さっきxrdpのポッドで参照した内容と同じものが見える。
グラフやフォント、テーブル内容もちゃんと表示できてた。