すっかり暑くなってしまいましたね(季節の挨拶)
前回ものは試しということで、自分のWindows10Pro上でDocker for Windows をインストールし、k8sを有効化して、apacheのコンテナを起動させてみました。
あれから半年以上の時間が経ち、とりあえずやっつけ部分もありつつもWEBアプリの開発環境を自分のPC内のk8s環境に構築をしたので、それについて今回は書いていこうと思います。
今回、ローカルk8s上に構築した開発環境で作成しているWEBアプリは、以下の機能を持っています。
物理的なサーバで考えると、
というくらいの規模です。
構成は
の単純な構成です。
それぞれのYAMLは大体こんな感じにしています。
WEB
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 1
selector:
matchLabels:
app: app-web
template:
metadata:
labels:
app: app-web
spec:
containers:
- name: apache-container
image: local/apache-php72
imagePullPolicy: Never
volumeMounts:
- mountPath: /var/www/html
name: host-html
- mountPath: /var/log/apache2
name: host-log
- mountPath: /etc/apache2/sites-available
name: host-conf
ports:
- containerPort: 80
env:
- name: TZ
value: Asia/Tokyo
- name: DB_NAME
value: hogehoge
- name: DB_USER
valueFrom:
secretKeyRef:
name: secret-db
key: username
- name: DB_PASS
valueFrom:
secretKeyRef:
name: secret-db
key: password
resources:
limits:
cpu: 200m
memory: 256Mi
volumes:
- name: host-html
hostPath:
path: /C/src
type: Directory
- name: host-log
hostPath:
path: /C/mount/var/log/apache2
type: Directory
- name: host-conf
hostPath:
path: /C/mount/etc/apache2/sites-available
type: Directory
---
apiVersion: v1
kind: Service
metadata:
name: loadbalancer-web
spec:
type: LoadBalancer
ports:
- name: "http-port"
protocol: "TCP"
port: 80
targetPort: 80
selector:
app: app-web
DB
apiVersion: apps/v1
kind: Deployment
metadata:
name: db
spec:
replicas: 1
selector:
matchLabels:
app: app-db
template:
metadata:
labels:
app: app-db
spec:
containers:
- name: db-container
image: local/mysql57-nosqlmode:latest
imagePullPolicy: Never
volumeMounts:
- mountPath: /var/lib/mysql
name: host-db
ports:
- containerPort: 3306
env:
- name: TZ
value: Asia/Tokyo
- name: MYSQL_DATABASE
value: hogehoge
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: secret-db
key: username
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: secret-db
key: password
resources:
limits:
cpu: 200m
memory: 256Mi
volumes:
- name: host-db
hostPath:
path: /C/mount/var/lib/mysql
type: Directory
---
apiVersion: v1
kind: Service
metadata:
name: loadbalancer-database
spec:
type: LoadBalancer
ports:
- name: "mysql-port"
protocol: "TCP"
port: 3306
targetPort: 3306
selector:
app: app-db
FTP
apiVersion: apps/v1
kind: Deployment
metadata:
name: ftp-data
spec:
replicas: 1
selector:
matchLabels:
app: app-ftp-data
template:
metadata:
labels:
app: app-ftp-data
spec:
containers:
- name: ftp-data-container
image: local/ftp:latest
imagePullPolicy: Never
volumeMounts:
- mountPath: /home/ftp_user/
name: hostpass
ports:
- containerPort: 21
resources:
limits:
cpu: 200m
memory: 256Mi
volumes:
- name: hostpass
hostPath:
path: /C/mount/home/ftp_user/data
type: Directory
---
apiVersion: v1
kind: Service
metadata:
name: loadbalancer-ftp
spec:
type: LoadBalancer
ports:
- name: "ftp-port"
protocol: "TCP"
port: 21
targetPort: 21
selector:
app: app-ftp-data
バッチ用のJOB
apiVersion: batch/v1
kind: Job
metadata:
name: job-cast
spec:
backoffLimit: 0
template:
spec:
restartPolicy: Never
containers:
- name: job-cast
image: local/php72
command: ["/usr/local/bin/php", "/var/www/html/src/batch.php", "-v"]
volumeMounts:
- mountPath: /var/www/html
name: host-html
volumes:
- name: host-html
hostPath:
path: /C/src
type: Directory
設定の上でのチェックポイントとしては
といったあたりかなと思います。
今回はとりあえず上記のような構成で設定していますが、今後は以下のような構成にトライしてみたいなぁと考えています。
将来像についてはいつ実施できるのか今の所なにも目処は経っていないのですが、やはり構築環境をコード化しておくと自分のPCの入れ替え時に再構築が早い、といった便利なことも多く、また環境の切り替えも楽なのでミドルウェアアップデートとかの動作確認もやりやすいなぁという印象です。
初期コストはかなり高いですが、慣れるといろいろと楽ができるので余裕がある方は是非チャレンジしてみてほしいなぁと思います。
tel