{"id":2679,"date":"2022-04-11T13:11:48","date_gmt":"2022-04-11T21:11:48","guid":{"rendered":"https:\/\/tungle.ca\/?p=2679"},"modified":"2022-12-04T19:10:12","modified_gmt":"2022-12-05T03:10:12","slug":"deploying-wordpress-and-mysql-with-kubernetes","status":"publish","type":"post","link":"https:\/\/tungle.ca\/?p=2679","title":{"rendered":"Deploying WordPress and MySQL\u00a0with Kubernetes"},"content":{"rendered":"\n<p>I have used this link below to deploy WordPress and MySQL with Kubernetes.<\/p>\n\n\n\n<p><a href=\"https:\/\/kubernetes.io\/docs\/tutorials\/stateful-application\/mysql-wordpress-persistent-volume\/\">https:\/\/kubernetes.io\/docs\/tutorials\/stateful-application\/mysql-wordpress-persistent-volume\/<\/a><\/p>\n\n\n\n<p>+ mysql-deployment.yaml<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"yaml\" class=\"language-yaml\">apiVersion: v1\nkind: Service\nmetadata:\n  name: wordpress-mysql\n  labels:\n    app: wordpress\nspec:\n  ports:\n    - port: 3306\n  selector:\n    app: wordpress\n    tier: mysql\n  clusterIP: None\n---\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: mysql-pv-claim\n  labels:\n    app: wordpress\nspec:\n  accessModes:\n    - ReadWriteOnce\n  resources:\n    requests:\n      storage: 20Gi\n---\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: wordpress-mysql\n  labels:\n    app: wordpress\nspec:\n  selector:\n    matchLabels:\n      app: wordpress\n      tier: mysql\n  strategy:\n    type: Recreate\n  template:\n    metadata:\n      labels:\n        app: wordpress\n        tier: mysql\n    spec:\n      containers:\n      - image: mysql:5.6\n        name: mysql\n        env:\n        - name: MYSQL_ROOT_PASSWORD\n          valueFrom:\n            secretKeyRef:\n              name: mysql-pass\n              key: password\n        ports:\n        - containerPort: 3306\n          name: mysql\n        volumeMounts:\n        - name: mysql-persistent-storage\n          mountPath: \/var\/lib\/mysql\n      volumes:\n      - name: mysql-persistent-storage\n        persistentVolumeClaim:\n          claimName: mysql-pv-claim<\/code><\/pre>\n\n\n\n<p>+ wordpress-deployment.yaml<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"yaml\" class=\"language-yaml\">apiVersion: v1\nkind: Service\nmetadata:\n  name: wordpress\n  labels:\n    app: wordpress\nspec:\n  ports:\n    - port: 80\n  selector:\n    app: wordpress\n    tier: frontend\n  type: LoadBalancer\n---\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: wp-pv-claim\n  labels:\n    app: wordpress\nspec:\n  accessModes:\n    - ReadWriteOnce\n  resources:\n    requests:\n      storage: 20Gi\n---\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: wordpress\n  labels:\n    app: wordpress\nspec:\n  selector:\n    matchLabels:\n      app: wordpress\n      tier: frontend\n  strategy:\n    type: Recreate\n  template:\n    metadata:\n      labels:\n        app: wordpress\n        tier: frontend\n    spec:\n      containers:\n      - image: wordpress:4.8-apache\n        name: wordpress\n        env:\n        - name: WORDPRESS_DB_HOST\n          value: wordpress-mysql\n        - name: WORDPRESS_DB_PASSWORD\n          valueFrom:\n            secretKeyRef:\n              name: mysql-pass\n              key: password\n        ports:\n        - containerPort: 80\n          name: wordpress\n        volumeMounts:\n        - name: wordpress-persistent-storage\n          mountPath: \/var\/www\/html\n      volumes:\n      - name: wordpress-persistent-storage\n        persistentVolumeClaim:\n          claimName: wp-pv-claim<\/code><\/pre>\n\n\n\n<p>+ Download the MySQL deployment configuration file.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">curl -LO https:\/\/k8s.io\/examples\/application\/wordpress\/mysql-deployment.yaml<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"751\" height=\"139\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-203.png\" alt=\"\" class=\"wp-image-2680\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-203.png 751w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-203-300x56.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-203-200x37.png 200w\" sizes=\"auto, (max-width: 751px) 100vw, 751px\" \/><\/figure>\n\n\n\n<p>+ Download the WordPress configuration file.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">curl -LO https:\/\/k8s.io\/examples\/application\/wordpress\/wordpress-deployment.yaml<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"815\" height=\"102\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-204.png\" alt=\"\" class=\"wp-image-2681\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-204.png 815w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-204-300x38.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-204-768x96.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-204-200x25.png 200w\" sizes=\"auto, (max-width: 815px) 100vw, 815px\" \/><\/figure>\n\n\n\n<p>+ Create a kustomization.yaml.<\/p>\n\n\n\n<p>#Add a Secret generator in&nbsp;<code>kustomization.yaml<\/code>&nbsp;from the following command.&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"yaml\" class=\"language-yaml\">tung@node1:~$ cat kustomization.yaml \nsecretGenerator:\n- name: mysql-pass\n  literals:\n  - password=YOUR_PASSWORD\nresources:\n  - mysql-deployment.yaml\n  - wordpress-deployment.yaml<\/code><\/pre>\n\n\n\n<p>+ Apply and Verify<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">microk8s kubectl apply -k .\/<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"795\" height=\"139\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-205.png\" alt=\"\" class=\"wp-image-2682\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-205.png 795w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-205-300x52.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-205-768x134.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-205-200x35.png 200w\" sizes=\"auto, (max-width: 795px) 100vw, 795px\" \/><\/figure>\n\n\n\n<p>+ Verify all objects exist.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">microk8s kubectl get secrets<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"966\" height=\"75\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-206.png\" alt=\"\" class=\"wp-image-2683\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-206.png 966w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-206-300x23.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-206-768x60.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-206-200x16.png 200w\" sizes=\"auto, (max-width: 966px) 100vw, 966px\" \/><\/figure>\n\n\n\n<p>+ Verify a PersistentVolumeClaims (PVC) got dynamically provisioned.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">microk8s kubectl get pvc<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1002\" height=\"72\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-207.png\" alt=\"\" class=\"wp-image-2684\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-207.png 1002w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-207-300x22.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-207-768x55.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-207-200x14.png 200w\" sizes=\"auto, (max-width: 1002px) 100vw, 1002px\" \/><\/figure>\n\n\n\n<p>+ Verify the Pod is running.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">microk8s kubectl get pods<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"680\" height=\"123\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-208.png\" alt=\"\" class=\"wp-image-2685\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-208.png 680w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-208-300x54.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-208-200x36.png 200w\" sizes=\"auto, (max-width: 680px) 100vw, 680px\" \/><\/figure>\n\n\n\n<p>+ Verify the Service is running.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">microk8s kubectl get service wordpress<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"745\" height=\"56\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-209.png\" alt=\"\" class=\"wp-image-2686\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-209.png 745w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-209-300x23.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-209-200x15.png 200w\" sizes=\"auto, (max-width: 745px) 100vw, 745px\" \/><\/figure>\n\n\n\n<p>+ Access the WordPress site.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"843\" height=\"616\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-210.png\" alt=\"\" class=\"wp-image-2687\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-210.png 843w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-210-300x219.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-210-768x561.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-210-200x146.png 200w\" sizes=\"auto, (max-width: 843px) 100vw, 843px\" \/><\/figure>\n\n\n\n<p>+ Check Kubernetes is running.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">microk8s kubectl get all --all-namespaces<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"654\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-211-1024x654.png\" alt=\"\" class=\"wp-image-2688\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-211-1024x654.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-211-300x192.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-211-768x491.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-211-200x128.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-211.png 1036w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>I have used this link below to deploy WordPress and MySQL with Kubernetes. https:\/\/kubernetes.io\/docs\/tutorials\/stateful-application\/mysql-wordpress-persistent-volume\/ + mysql-deployment.yaml + wordpress-deployment.yaml + Download the MySQL deployment configuration file. + Download the WordPress configuration file. + Create a kustomization.yaml. #Add a Secret generator in&nbsp;kustomization.yaml&nbsp;from the following command.&nbsp; + Apply and Verify + Verify all objects exist. + Verify a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,30],"tags":[20,31],"class_list":["post-2679","post","type-post","status-publish","format-standard","hentry","category-cloud","category-kubernetes","tag-cloud","tag-kubernestes"],"_links":{"self":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts\/2679","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2679"}],"version-history":[{"count":3,"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts\/2679\/revisions"}],"predecessor-version":[{"id":4435,"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts\/2679\/revisions\/4435"}],"wp:attachment":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2679"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2679"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2679"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}