前回まで
wordpressだけでは足りなかった
mysqlも必要
今回
ingressの追加
mysqlも必要なので追加していく
実装
まずはingressを作る。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wp-pod-ingress
namespace: wp
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: "nginx"
rules:
- host: test-wordpress.local
http:
paths:
- path: /testwordpress
pathType: Prefix
backend:
service:
name: test-wordpress-service
port:
number: 80
確認。
$ kubectl get ingress -n wp
NAME CLASS HOSTS ADDRESS PORTS AGE
wp-pod-ingress nginx test-wordpress.local 10.96.150.131 80 53m
だけど、まだwordpressのpodはCrashLoopBackOffを繰り返している。
$ kubectl get pod -n wp
NAME READY STATUS RESTARTS AGE
test-wordpress-f49f7d58c-zq6xn 0/1 CrashLoopBackOff 6 (3m47s ago) 12m
wordpressのログを見てみると…
$ kubectl logs test-wordpress-f49f7d58c-zq6xn -n wp --container wordpress-container
MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known
Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 22
Warning: mysqli::mysqli(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 22
MySQLにつなげようとして失敗している。
ここで、MySQLも必要になると知る(今更だけど)
MySQLを立てるところまで
とりあえず、次はMySQLを構築しないと
色々、エラーで変更はしていったのですが、ここでは完成版を載せておきます。
MySQLもHelmによる構築をしています。
ディレクトリ構成は以下。
.
├── Chart.yaml
├── charts
├── templates
│ ├── deployment.yaml
│ ├── pv.yaml
│ ├── pvc.yaml
│ └── service.yaml
└── values.yaml
✅deployment.yaml(wordpressの時と同様パスワードはシークレットを使っていないので、本当ならシークレットを使いましょう。)
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: test-wp-mysql
labels:
app: test-wordpress
namespace: wp
spec:
selector:
matchLabels:
app: test-wordpress
strategy:
type: Recreate
template:
metadata:
labels:
app: test-wordpress
spec:
containers:
- image: 'mysql:8'
name: test-wp-mysql
args:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
env:
- name: MYSQL_ROOT_PASSWORD
value: root
- name: MYSQL_PASSWORD
value: testpassword
- name: MYSQL_USER
value: testuser
- name: TZ
value: Asia/Tokyo
- name: MYSQL_DATABASE
value: wordpress
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: test-mysql-pvc
✅pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: test-mysql-pv
namespace: wp
spec:
capacity:
storage: 1Gi # PVC のサイズに合わせる
accessModes:
- ReadWriteOnce # PVC のアクセスモードに合わせる
persistentVolumeReclaimPolicy: Retain
storageClassName: local-mysql-storage
local:
path: /mnt/mysql_data # 実際のパスに変更
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- k8s-worker2 # PV を使用するノードを指定
✅pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-mysql-pvc
namespace: wp
labels:
app: test-wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: local-mysql-storage
✅service.yaml
apiVersion: v1
kind: Service
metadata:
name: test-wp-mysql
namespace: wp
labels:
app: test-wordpress
creationTimestamp: null
spec:
selector:
app: test-wordpress
ports:
- port: 3306
targetPort: 3306
払い出す
helm install testmysql ./testmysql
確認する
$ kubectl get pod -n wp | grep -E "NAME|test-wp-mysql"
NAME READY STATUS RESTARTS AGE
test-wp-mysql-6db5987c8-6pk9g 1/1 Running 0 13h