自作Helm Chartのwordpressにingressとmysqlの設定を追加(案の定k8sが上手くいかない #6)

スポンサーリンク
個人開発
スポンサーリンク

前回まで

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

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