Skip to content

Instantly share code, notes, and snippets.

@jsilberm
Last active August 2, 2017 13:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save jsilberm/6748f7b81243ff674df34617b0dd256e to your computer and use it in GitHub Desktop.
Save jsilberm/6748f7b81243ff674df34617b0dd256e to your computer and use it in GitHub Desktop.
mysql / 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 mysql-pass --from-file=password.txt

Create MySQL/Wordpress stack


---
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: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: mysql
    spec:
      containers:
      - image: mysql:5.6
        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"
---
apiVersion: v1
kind: Service
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  ports:
    - port: 80
      nodePort: 30303
  selector:
    app: wordpress
    tier: frontend
  type: NodePort
---
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
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: frontend
    spec:
      containers:
      - image: wordpress:4.8-apache
        name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: wordpress-mysql
        - name: WORDPRESS_DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password.txt
        ports:
        - containerPort: 80
          name: wordpress
        volumeMounts:
        - name: wordpress-persistent-storage
          mountPath: /var/www/html
      volumes:
      - name: wordpress-persistent-storage
        persistentVolumeClaim:
          claimName: wp-pv-claim

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: wordpress-mysql
labels:
app: wordpress
spec:
ports:
- port: 3306
selector:
app: wordpress
tier: mysql
clusterIP: None
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
containers:
- image: mysql:5.6
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"
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
ports:
- port: 80
nodePort: 30303
selector:
app: wordpress
tier: frontend
type: NodePort
---
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
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: frontend
spec:
containers:
- image: wordpress:4.8-apache
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: wordpress-mysql
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password.txt
ports:
- containerPort: 80
name: wordpress
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