Skip to content

Instantly share code, notes, and snippets.

@bswatson
Forked from jsilberm/liquidweb.md
Last active July 28, 2017 20:06
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bswatson/2eab2bb5c0ae74db18eda549949b272f to your computer and use it in GitHub Desktop.
Save bswatson/2eab2bb5c0ae74db18eda549949b272f to your computer and use it in GitHub Desktop.
mariadb / fpm / wordpress stack on Portworx

Deploys a complete "Portworx-ready" Kubernetes cluster in GCP. Configurable elements:

  • Kubernetes version (default 1.7)
  • number of Minions (default 3)
  • volume size per minion (default 10GB)
  • machine type (default n1-standard-2 )
  • region (default us-central1)
  • region-zone (default us-central1-f)

[ Caveat Kubernetes 1.7.0 bug: If terraporx doesn't work (and loops on startup), log on to master and run this on this: kubernetes/kubeadm#335 (comment) ]

This shell script installs a complete Portworx Stack on Kubernetes including:

  • 'etcd' cluster
  • portworx deployed as Kubernetes daemonset
  • influxdb (time series database for monitoring on persistent storage)
  • Lighthouse cluster monitor/mgmt framework

Create firewall rules for Portworx Lighthouse and WordPress

gcloud compute firewall-rules create wordpress --allow tcp:30303 --target-tags=wordpress
gcloud compute firewall-rules create lighthouse --allow tcp:30062 --target-tags=lighthouse
gcloud compute instances add-tags k8s-master --tags wordpress,lighthouse   

Create password secret

WP/MYSQL example based on https://github.com/kubernetes/examples/blob/master/mysql-wordpress-pd/README.md

Create password.txt with password to use.

tr --delete '\n' <password.txt >.strippedpassword.txt && mv .strippedpassword.txt password.txt
kubectl create secret generic mariadb-pass --from-file=password.txt

Configuration

See #wp-mysql.yml for configuration file.

Access System

Portworx Lighthouse will be accessible on the k8s-master node, port 30062
WordPress instance will be accessible on the k8s-master node, port 30303

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc-1
annotations:
volume.beta.kubernetes.io/storage-class: portworx-lw-sc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
---
apiVersion: v1
kind: Service
metadata:
name: mysql
labels:
app: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
tier: db
clusterIP: None
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mysql
labels:
app: mysql
spec:
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
tier: db
spec:
containers:
- image: mariadb:10.2.7
name: mysql
env:
# $ kubectl create secret generic mysql-pass --from-file=password.txt
# make sure password.txt does not have a trailing newline
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password.txt
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pvc-1
---
apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
name: portworx-lw-sc
provisioner: kubernetes.io/portworx-volume
parameters:
repl: "3"
shared: "true"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wp-pv-claim
labels:
app: wordpress
annotations:
volume.beta.kubernetes.io/storage-class: portworx-lw-sc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
selector:
matchLabels:
app: wordpress
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
ports:
- port: 9000
targetPort: 9000
protocol: TCP
name: wordpress
selector:
app: wordpress
tier: frontend
type: ClusterIP
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
tier: frontend
spec:
strategy:
type: Recreate
template:
metadata:
labels:
name: wp-nginx
app: wordpress
tier: frontend
spec:
containers:
- image: wordpress:4.8-php7.1-fpm
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: mysql
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password.txt
ports:
- containerPort: 9000
name: wordpress
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: wp-pv-claim
---
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
nodePort: 30303
protocol: TCP
name: http
selector:
app: nginx
tier: frontend
type: NodePort
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
tier: frontend
spec:
strategy:
type: Recreate
template:
metadata:
labels:
name: nginx
app: nginx
tier: frontend
spec:
containers:
- image: raulr/nginx-wordpress
name: nginx
ports:
- containerPort: 80
name: http
env:
- name: POST_MAX_SIZE
value: 128m
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: wp-pv-claim
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment