minikubeを利用3-DjangoのPod作る

前回はmariadbのPod作ったので、続きでDjangoのPod作る。

目標

今回は「*」のついたところのうち、DjangoとhttpsのPod、d1の永続化領域を作ってく。

  1. *mariadb 3306 ->13306
  2. *Django 8080 ->38080
  3. *https 80,443->30080,30443
  4. *d1 Django用永続化領域 1GiB
  5. *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名でちゃんと参照できてる。

gvis-minikubeAPL

グラフが表示できてるってことはmatplotlibとか日本語フォントを取り込んだdockerイメージを使ってPodが起動できてる。

gvis-minikubeAPL

マスタテーブルのレコード一覧が表示できてるから、mariadbの読み込みもできてる。

gvis-minikubeAPL

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はオレオレ証明やから、初回はブラウザの警告出てくれる。

gvis-minikubeAPL

「このWebサイト」のリンクをクリックすると、さっきxrdpのポッドで参照した内容と同じものが見える。

gvis-minikubeAPL

グラフやフォント、テーブル内容もちゃんと表示できてた。

タイトルとURLをコピーしました