前回
はmariadbのPod作ったので、続きでDjangoのPod作る。
今回は「*」のついたところのうち、DjangoとhttpsのPodを作ってく。
- *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もあれば十分。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
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#
内容はこんな感じ。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
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で参照できるようにする。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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をひっかけるように書いておく。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
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のポートで公開する。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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のポッドで参照した内容と同じものが見える。

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