Skip to content

Instantly share code, notes, and snippets.

@grohiro
Created September 30, 2019 02:31
Show Gist options
  • Select an option

  • Save grohiro/c13ef09c4f6dc16bd68c1cf15e10997e to your computer and use it in GitHub Desktop.

Select an option

Save grohiro/c13ef09c4f6dc16bd68c1cf15e10997e to your computer and use it in GitHub Desktop.
Wordpress on GKE
# 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