Solution:
After testing different images for Mysql and WordPress and reading useful links on hub.docker.com mysql & wordpress i got the web application stack working.
The configuration:
MySQL:
apiVersion: v1 kind: Service metadata: name: wordpress-mysql labels: app: wordpress spec: ports: - port: 3306 selector: app: wordpress tier: mysql clusterIP: None
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim labels: app: wordpress spec: accessModes: - ReadWriteOnce storageClassName: local-storage resources: requests: storage: 1Gi
apiVersion: apps/v1 kind: Deployment metadata: name: wordpress-mysql labels: app: wordpress spec: selector: matchLabels: app: wordpress tier: mysql replicas: 1 strategy: type: Recreate template: metadata: labels: app: wordpress tier: mysql spec: containers: - image: mysql:5.7 imagePullPolicy: IfNotPresent name: mysql env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: root-pass key: password - name: MYSQL_DATABASE value: mysql - name: MYSQL_USER value: mysql - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql nodeSelector: storage: local volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pv-claim
WordPress:
apiVersion: v1 kind: Service metadata: name: wordpress labels: app: wordpress spec: ports: - port: 80 selector: app: wordpress tier: frontend type: LoadBalancer externalIPs: - 192.168.1.83
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: wp-pv-claim labels: app: wordpress spec: accessModes: - ReadWriteOnce storageClassName: local-storage resources: requests: storage: 1Gi
apiVersion: apps/v1 kind: Deployment metadata: name: wordpress labels: app: wordpress spec: selector: matchLabels: app: wordpress tier: frontend replicas: 1 strategy: type: Recreate template: metadata: labels: app: wordpress tier: frontend spec: containers: - image: wordpress name: wordpress imagePullPolicy: IfNotPresent env: - name: WORDPRESS_DB_HOST value: wordpress-mysql - name: WORDPRESS_DB_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password - name: WORDPRESS_DB_USER value: mysql - name: WORDPRESS_DB_NAME value: mysql ports: - containerPort: 80 name: wordpress volumeMounts: - name: wordpress-persistent-storage mountPath: /var/www/html nodeSelector: storage: local volumes: - name: wordpress-persistent-storage persistentVolumeClaim: claimName: wp-pv-claim
Output PersitentVolume:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS mysql-pv-claim Bound persistent-volume-mysql 4Gi RWO local-storage wp-pv-claim Bound persistent-volume-wordpress 2Gi RWO local-storage
Secrets:
apiVersion: v1 kind: Secret metadata: name: root-pass namespace: default data: password: cGFzc3dvcmQ= type: Opaque
apiVersion: v1 kind: Secret metadata: name: mysql-pass namespace: default data: password: cGFzc3dvcmQ= type: Opaque
Notes for my example configuration:
- on node1 created directory /mysql/data & /wordpress/data (mount point for mysql and wordpress containers).
- image used for mysql -> mysql:5.7
- image used for wordpress -> wordpress
- added environment variables according to the documentation of mysql and wordpress.