mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Add GKE Sandbox to Kubernetes section
This commit is contained in:
committed by
Ian Lewis
parent
b9b719dcb6
commit
0261626482
@@ -0,0 +1,4 @@
|
||||
+++
|
||||
title = "Tutorials"
|
||||
weight = 0
|
||||
+++
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 69 KiB |
@@ -0,0 +1,73 @@
|
||||
+++
|
||||
title = "WordPress with Docker"
|
||||
weight = 10
|
||||
+++
|
||||
|
||||
## Deploy a WordPress site with Docker
|
||||
|
||||
This page shows you how to deploy a sample [WordPress][wordpress] site using
|
||||
[Docker][docker].
|
||||
|
||||
### Before you begin
|
||||
|
||||
[Follow these instructions][docker-install] to install runsc with Docker.
|
||||
This document assumes that the runtime name chosen is `runsc`.
|
||||
|
||||
### Running WordPress
|
||||
|
||||
Now, let's deploy a WordPress site using Docker. WordPress site requires
|
||||
two containers: web server in the frontend, MySQL database in the backend.
|
||||
|
||||
First, let's define a few environment variables that are shared between both
|
||||
containers:
|
||||
|
||||
```bash
|
||||
export MYSQL_PASSWORD=${YOUR_SECRET_PASSWORD_HERE?}
|
||||
export MYSQL_DB=wordpress
|
||||
export MYSQL_USER=wordpress
|
||||
```
|
||||
|
||||
Next, let's start the database container running MySQL and wait until the
|
||||
database is initialized:
|
||||
|
||||
```bash
|
||||
docker run --runtime=runsc --name mysql -d \
|
||||
-e MYSQL_RANDOM_ROOT_PASSWORD=1 \
|
||||
-e MYSQL_PASSWORD="${MYSQL_PASSWORD}" \
|
||||
-e MYSQL_DATABASE="${MYSQL_DB}" \
|
||||
-e MYSQL_USER="${MYSQL_USER}" \
|
||||
mysql:5.7
|
||||
|
||||
# Wait until this message appears in the log.
|
||||
docker logs mysql |& grep 'port: 3306 MySQL Community Server (GPL)'
|
||||
```
|
||||
|
||||
Once the database is running, you can start the WordPress frontend. We use the
|
||||
`--link` option to connect the frontend to the database, and expose the
|
||||
WordPress to port 8080 on the localhost.
|
||||
|
||||
```bash
|
||||
docker run --runtime=runsc --name wordpress -d \
|
||||
--link mysql:mysql \
|
||||
-p 8080:80 \
|
||||
-e WORDPRESS_DB_HOST=mysql \
|
||||
-e WORDPRESS_DB_USER="${MYSQL_USER}" \
|
||||
-e WORDPRESS_DB_PASSWORD="${MYSQL_PASSWORD}" \
|
||||
-e WORDPRESS_DB_NAME="${MYSQL_DB}" \
|
||||
-e WORDPRESS_TABLE_PREFIX=wp_ \
|
||||
wordpress
|
||||
```
|
||||
|
||||
Now, you can access the WordPress website pointing your favorite browser to
|
||||
http://localhost:8080.
|
||||
|
||||
Congratulations! You have just deployed a WordPress site using Docker.
|
||||
|
||||
### What's next
|
||||
|
||||
[Learn how to deploy WordPress with Kubernetes][wordpress-k8s].
|
||||
|
||||
[docker]: https://www.docker.com/
|
||||
[docker-install]: /docs/user_guide/docker/
|
||||
[wordpress]: https://wordpress.com/
|
||||
[wordpress-k8s]: /docs/tutorials/kubernetes/
|
||||
@@ -0,0 +1,238 @@
|
||||
+++
|
||||
title = "WordPress with Kubernetes"
|
||||
+++
|
||||
|
||||
## Deploy a WordPress site using GKE Sandbox
|
||||
|
||||
This page shows you how to deploy a sample [WordPress][wordpress] site using
|
||||
[GKE Sandbox][gke-sandbox].
|
||||
|
||||
### Before you begin
|
||||
|
||||
Take the following steps to enable the Kubernetes Engine API:
|
||||
|
||||
1. Visit the [Kubernetes Engine page][project-selector] in the Google Cloud
|
||||
Platform Console.
|
||||
1. Create or select a project.
|
||||
|
||||
### Creating a node pool with gVisor enabled
|
||||
|
||||
Create a node pool inside your cluster with option `--sandbox type=gvisor` added
|
||||
to the command, like below:
|
||||
|
||||
```bash
|
||||
gcloud beta container node-pools create sandbox-pool --cluster=${CLUSTER_NAME} --image-type=cos_containerd --sandbox type=gvisor
|
||||
```
|
||||
|
||||
If you prefer to use the console, select your cluster and select the **ADD NODE
|
||||
POOL** button:
|
||||
|
||||

|
||||
|
||||
Then select the **Image type** with **Containerd** and select **Enable sandbox
|
||||
with gVisor** option. Select other options as you like:
|
||||
|
||||

|
||||
|
||||
### Check that gVisor is enabled
|
||||
|
||||
The gvisor RuntimeClass is instantiated during node creation. You can check for
|
||||
the existence of the gvisor RuntimeClass using the following command:
|
||||
|
||||
```bash
|
||||
kubectl get runtimeclasses
|
||||
```
|
||||
|
||||
### Wordpress deployment
|
||||
|
||||
Now, let's deploy a WordPress site using GKE Sandbox. WordPress site requires
|
||||
two pods: web server in the frontend, MySQL database in the backend. Both
|
||||
applications use PersistentVolumes to store the site data data.
|
||||
In addition, they use secret store to share MySQL password between them.
|
||||
|
||||
First, let's download the deployment configuration files to add the runtime
|
||||
class annotation to them:
|
||||
|
||||
```bash
|
||||
curl -LO https://k8s.io/examples/application/wordpress/wordpress-deployment.yaml
|
||||
curl -LO https://k8s.io/examples/application/wordpress/mysql-deployment.yaml
|
||||
```
|
||||
|
||||
Add a **spec.template.spec.runtimeClassName** set to **gvisor** to both files,
|
||||
as shown below:
|
||||
|
||||
**wordpress-deployment.yaml:**
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: wordpress
|
||||
labels:
|
||||
app: wordpress
|
||||
spec:
|
||||
ports:
|
||||
- port: 80
|
||||
selector:
|
||||
app: wordpress
|
||||
tier: frontend
|
||||
type: LoadBalancer
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: wp-pv-claim
|
||||
labels:
|
||||
app: wordpress
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 20Gi
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: wordpress
|
||||
labels:
|
||||
app: wordpress
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: wordpress
|
||||
tier: frontend
|
||||
strategy:
|
||||
type: Recreate
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: wordpress
|
||||
tier: frontend
|
||||
spec:
|
||||
runtimeClassName: gvisor # ADD THIS LINE
|
||||
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
|
||||
ports:
|
||||
- containerPort: 80
|
||||
name: wordpress
|
||||
volumeMounts:
|
||||
- name: wordpress-persistent-storage
|
||||
mountPath: /var/www/html
|
||||
volumes:
|
||||
- name: wordpress-persistent-storage
|
||||
persistentVolumeClaim:
|
||||
claimName: wp-pv-claim
|
||||
```
|
||||
|
||||
**mysql-deployment.yaml:**
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: wordpress-mysql
|
||||
labels:
|
||||
app: wordpress
|
||||
spec:
|
||||
ports:
|
||||
- port: 3306
|
||||
selector:
|
||||
app: wordpress
|
||||
tier: mysql
|
||||
clusterIP: None
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: mysql-pv-claim
|
||||
labels:
|
||||
app: wordpress
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 20Gi
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: wordpress-mysql
|
||||
labels:
|
||||
app: wordpress
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: wordpress
|
||||
tier: mysql
|
||||
strategy:
|
||||
type: Recreate
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: wordpress
|
||||
tier: mysql
|
||||
spec:
|
||||
runtimeClassName: gvisor # ADD THIS LINE
|
||||
containers:
|
||||
- image: mysql:5.6
|
||||
name: mysql
|
||||
env:
|
||||
- name: MYSQL_ROOT_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: mysql-pass
|
||||
key: password
|
||||
ports:
|
||||
- containerPort: 3306
|
||||
name: mysql
|
||||
volumeMounts:
|
||||
- name: mysql-persistent-storage
|
||||
mountPath: /var/lib/mysql
|
||||
volumes:
|
||||
- name: mysql-persistent-storage
|
||||
persistentVolumeClaim:
|
||||
claimName: mysql-pv-claim
|
||||
```
|
||||
|
||||
Note that apart from `runtimeClassName: gvisor`, nothing else about the
|
||||
Deployment has is changed.
|
||||
|
||||
You are now ready to deploy the entire application. Just create a secret to
|
||||
store MySQL's password and *apply* both deployments:
|
||||
|
||||
```bash
|
||||
kubectl create secret generic mysql-pass --from-literal=password=${YOUR_SECRET_PASSWORD_HERE?}
|
||||
kubectl apply -f mysql-deployment.yaml
|
||||
kubectl apply -f wordpress-deployment.yaml
|
||||
```
|
||||
|
||||
Wait for the deployments to be ready and an external IP to be assigned to the
|
||||
Wordpress service:
|
||||
|
||||
```bash
|
||||
watch kubectl get service wordpress
|
||||
```
|
||||
|
||||
Now, copy the service `EXTERNAL-IP` from above to your favorite browser to view
|
||||
and configure your new WordPress site.
|
||||
|
||||
Congratulations! You have just deployed a WordPress site using GKE Sandbox.
|
||||
|
||||
### What's next
|
||||
|
||||
To learn more about GKE Sandbox and how to run your deployment securely, take
|
||||
a look at the [documentation][gke-sandbox-docs].
|
||||
|
||||
[gke-sandbox-docs]: https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods
|
||||
[gke-sandbox]: https://cloud.google.com/kubernetes-engine/sandbox/
|
||||
[project-selector]: https://console.cloud.google.com/projectselector/kubernetes
|
||||
[wordpress]: https://wordpress.com/
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
@@ -20,7 +20,19 @@ use either the `io.kubernetes.cri.untrusted-workload` annotation or
|
||||
[RuntimeClass][runtimeclass] to run Pods with `runsc`. You can find
|
||||
instructions [here][gvisor-containerd-shim].
|
||||
|
||||
## Using GKE Sandbox
|
||||
|
||||
[GKE Sandbox][gke-sandbox] is available in [Google Kubernetes Engine][gke]. You
|
||||
just need to deploy a node pool with gVisor enabled in your cluster, and it will
|
||||
run pods annotated with `runtimeClassName: gvisor` inside a gVisor sandbox for
|
||||
you. [Here][wordpress-quick] is a quick example showing how to deploy a
|
||||
WordPress site. You can view the full documentation [here][gke-sandbox-docs].
|
||||
|
||||
[containerd]: https://containerd.io/
|
||||
[minikube]: https://github.com/kubernetes/minikube/blob/master/deploy/addons/gvisor/README.md
|
||||
[gke]: https://cloud.google.com/kubernetes-engine/
|
||||
[gke-sandbox]: https://cloud.google.com/kubernetes-engine/sandbox/
|
||||
[gke-sandbox-docs]: https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods
|
||||
[gvisor-containerd-shim]: https://github.com/google/gvisor-containerd-shim
|
||||
[runtimeclass]: https://kubernetes.io/docs/concepts/containers/runtime-class/
|
||||
[wordpress-quick]: /docs/tutorials/kubernetes/
|
||||
Reference in New Issue
Block a user