Created
September 30, 2019 02:31
-
-
Save grohiro/c13ef09c4f6dc16bd68c1cf15e10997e to your computer and use it in GitHub Desktop.
Wordpress on GKE
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Wordpress on GKE | |
| # https://cloud.google.com/kubernetes-engine/docs/tutorials/persistent-disk?hl=ja | |
| # Terraform: Variables {{{ | |
| locals { | |
| project_name = "website" | |
| cluster_name = "wordpress" | |
| zone = "asia-northeast1-a" | |
| mysql_storage_name = "mysql-persistent-storage" | |
| mysql_disk_name = "mysql-disk" | |
| wordpress_storage_name = "wordpress-persistent-storage" | |
| wordpress_disk_name = "wordpress-disk" | |
| } | |
| # }}} | |
| # Terraform: Providers {{{ | |
| provider "google" { | |
| credentials = "${file(".secret/account.json")}" | |
| project = "${local.project_name}" | |
| } | |
| # GKE | |
| # https://www.terraform.io/docs/providers/kubernetes/index.html | |
| provider "kubernetes" { | |
| config_context = "gke_${local.project_name}_${local.zone}_${local.cluster_name}" | |
| } | |
| # }}} | |
| # GCP {{{ | |
| # https://www.terraform.io/docs/providers/google/r/compute_disk.html | |
| resource "google_compute_disk" "mysql" { | |
| name = "${local.mysql_disk_name}" | |
| zone = "${local.zone}" | |
| size = 200 | |
| } | |
| resource "google_compute_disk" "wordpress" { | |
| name = "${local.wordpress_disk_name}" | |
| zone = "${local.zone}" | |
| size = 200 | |
| } | |
| # }}} | |
| # GKE: Secret {{{ | |
| resource "kubernetes_secret" "mysql" { | |
| metadata { | |
| name = "mysql" | |
| } | |
| data = { | |
| username = "password" | |
| password = "!!!!!! PASSWORD !!!!!!" | |
| } | |
| } | |
| # }}} | |
| # GKE: Cluster {{{ | |
| # https://www.terraform.io/docs/providers/google/r/container_cluster.html | |
| resource "google_container_cluster" "wordpress" { | |
| name = "${local.cluster_name}" | |
| location = "${local.zone}" | |
| initial_node_count = 3 | |
| } | |
| # }}} | |
| # GKE: MySQL {{{ | |
| # https://www.terraform.io/docs/providers/kubernetes/r/deployment.html | |
| resource "kubernetes_deployment" "mysql" { | |
| metadata { | |
| name = "mysql" | |
| labels = { | |
| app = "mysql" | |
| } | |
| } | |
| spec { | |
| replicas = 1 | |
| selector { | |
| match_labels = { | |
| app = "mysql" | |
| } | |
| } | |
| template { | |
| metadata { | |
| labels = { | |
| app = "mysql" | |
| } | |
| } | |
| spec { | |
| container { | |
| image = "mysql:8" | |
| name = "mysql" | |
| args = [ | |
| "--default-authentication-plugin=mysql_native_password", | |
| ] | |
| env { | |
| name = "MYSQL_ROOT_PASSWORD" | |
| value_from { | |
| secret_key_ref { | |
| name = "mysql" | |
| key = "password" | |
| } | |
| } | |
| } | |
| port { | |
| container_port = 3306 | |
| name = "mysql" | |
| } | |
| volume_mount { | |
| name = "${local.mysql_storage_name}" | |
| mount_path = "/var/lib/mysql" | |
| } | |
| } | |
| volume { | |
| name = "${local.mysql_storage_name}" | |
| gce_persistent_disk { | |
| pd_name = "${local.mysql_disk_name}" | |
| fs_type = "ext4" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| # https://www.terraform.io/docs/providers/kubernetes/r/service.html | |
| resource "kubernetes_service" "kservice_mysql" { | |
| metadata { | |
| name = "mysql" | |
| labels { | |
| app = "mysql" | |
| } | |
| } | |
| spec { | |
| selector = { | |
| app = "${kubernetes_deployment.mysql.metadata.0.labels.app}" | |
| } | |
| type = "ClusterIP" | |
| port { | |
| port = 3306 | |
| } | |
| } | |
| } | |
| # }}} | |
| # GKE: Wordpress {{{ | |
| resource "kubernetes_deployment" "wordpress" { | |
| metadata { | |
| name = "wordpress" | |
| labels = { | |
| app = "wordpress" | |
| } | |
| } | |
| spec { | |
| replicas = 1 | |
| selector { | |
| match_labels = { | |
| app = "wordpress" | |
| } | |
| } | |
| template { | |
| metadata { | |
| labels = { | |
| app = "wordpress" | |
| } | |
| } | |
| spec { | |
| container { | |
| image = "wordpress" | |
| name = "wordpress" | |
| env { | |
| name = "WORDPRESS_DB_HOST" | |
| value = "mysql:3306" | |
| } | |
| env { | |
| name = "WORDPRESS_DB_PASSWORD" | |
| value_from { | |
| secret_key_ref { | |
| name = "mysql" | |
| key = "password" | |
| } | |
| } | |
| } | |
| port { | |
| container_port = 80 | |
| name = "wordpress" | |
| } | |
| volume_mount { | |
| name = "${local.wordpress_storage_name}" | |
| mount_path = "/var/www/html" | |
| } | |
| } | |
| volume { | |
| name = "${local.wordpress_storage_name}" | |
| gce_persistent_disk { | |
| pd_name = "${local.wordpress_disk_name}" | |
| fs_type = "ext4" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| # https://www.terraform.io/docs/providers/kubernetes/r/service.html | |
| resource "kubernetes_service" "wordpress" { | |
| metadata { | |
| name = "wordpress" | |
| labels { | |
| app = "wordpress" | |
| } | |
| } | |
| spec { | |
| selector = { | |
| app = "${kubernetes_deployment.wordpress.metadata.0.labels.app}" | |
| } | |
| type = "LoadBalancer" | |
| port { | |
| port = 80 | |
| target_port = 80 | |
| protocol = "TCP" | |
| } | |
| } | |
| } | |
| # }}} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment