Switch to github.com/golang/dep for vendoring
Signed-off-by: Mrunal Patel <mrunalp@gmail.com>
This commit is contained in:
parent
d6ab91be27
commit
8e5b17cf13
15431 changed files with 3971413 additions and 8881 deletions
215
vendor/k8s.io/kubernetes/examples/meteor/README.md
generated
vendored
Normal file
215
vendor/k8s.io/kubernetes/examples/meteor/README.md
generated
vendored
Normal file
|
@ -0,0 +1,215 @@
|
|||
Meteor on Kubernetes
|
||||
====================
|
||||
|
||||
This example shows you how to package and run a
|
||||
[Meteor](https://www.meteor.com/) app on Kubernetes.
|
||||
|
||||
Get started on Google Compute Engine
|
||||
------------------------------------
|
||||
|
||||
Meteor uses MongoDB, and we will use the `GCEPersistentDisk` type of
|
||||
volume for persistent storage. Therefore, this example is only
|
||||
applicable to [Google Compute
|
||||
Engine](https://cloud.google.com/compute/). Take a look at the
|
||||
[volumes documentation](../../docs/user-guide/volumes.md) for other options.
|
||||
|
||||
First, if you have not already done so:
|
||||
|
||||
1. [Create](https://cloud.google.com/compute/docs/quickstart) a
|
||||
[Google Cloud Platform](https://cloud.google.com/) project.
|
||||
2. [Enable
|
||||
billing](https://developers.google.com/console/help/new/#billing).
|
||||
3. Install the [gcloud SDK](https://cloud.google.com/sdk/).
|
||||
|
||||
Authenticate with gcloud and set the gcloud default project name to
|
||||
point to the project you want to use for your Kubernetes cluster:
|
||||
|
||||
```sh
|
||||
gcloud auth login
|
||||
gcloud config set project <project-name>
|
||||
```
|
||||
|
||||
Next, start up a Kubernetes cluster:
|
||||
|
||||
```sh
|
||||
wget -q -O - https://get.k8s.io | bash
|
||||
```
|
||||
|
||||
Please see the [Google Compute Engine getting started
|
||||
guide](../../docs/getting-started-guides/gce.md) for full
|
||||
details and other options for starting a cluster.
|
||||
|
||||
Build a container for your Meteor app
|
||||
-------------------------------------
|
||||
|
||||
To be able to run your Meteor app on Kubernetes you need to build a
|
||||
Docker container for it first. To do that you need to install
|
||||
[Docker](https://www.docker.com) Once you have that you need to add 2
|
||||
files to your existing Meteor project `Dockerfile` and
|
||||
`.dockerignore`.
|
||||
|
||||
`Dockerfile` should contain the below lines. You should replace the
|
||||
`ROOT_URL` with the actual hostname of your app.
|
||||
|
||||
```
|
||||
FROM chees/meteor-kubernetes
|
||||
ENV ROOT_URL http://myawesomeapp.com
|
||||
```
|
||||
|
||||
The `.dockerignore` file should contain the below lines. This tells
|
||||
Docker to ignore the files on those directories when it's building
|
||||
your container.
|
||||
|
||||
```
|
||||
.meteor/local
|
||||
packages/*/.build*
|
||||
```
|
||||
|
||||
You can see an example meteor project already set up at:
|
||||
[meteor-gke-example](https://github.com/Q42/meteor-gke-example). Feel
|
||||
free to use this app for this example.
|
||||
|
||||
> Note: The next step will not work if you have added mobile platforms
|
||||
> to your meteor project. Check with `meteor list-platforms`
|
||||
|
||||
Now you can build your container by running this in
|
||||
your Meteor project directory:
|
||||
|
||||
```
|
||||
docker build -t my-meteor .
|
||||
```
|
||||
|
||||
Pushing to a registry
|
||||
---------------------
|
||||
|
||||
For the [Docker Hub](https://hub.docker.com/), tag your app image with
|
||||
your username and push to the Hub with the below commands. Replace
|
||||
`<username>` with your Hub username.
|
||||
|
||||
```
|
||||
docker tag my-meteor <username>/my-meteor
|
||||
docker push <username>/my-meteor
|
||||
```
|
||||
|
||||
For [Google Container
|
||||
Registry](https://cloud.google.com/tools/container-registry/), tag
|
||||
your app image with your project ID, and push to GCR. Replace
|
||||
`<project>` with your project ID.
|
||||
|
||||
```
|
||||
docker tag my-meteor gcr.io/<project>/my-meteor
|
||||
gcloud docker -- push gcr.io/<project>/my-meteor
|
||||
```
|
||||
|
||||
Running
|
||||
-------
|
||||
|
||||
Now that you have containerized your Meteor app it's time to set up
|
||||
your cluster. Edit [`meteor-controller.json`](meteor-controller.json)
|
||||
and make sure the `image:` points to the container you just pushed to
|
||||
the Docker Hub or GCR.
|
||||
|
||||
We will need to provide MongoDB a persistent Kubernetes volume to
|
||||
store its data. See the [volumes documentation](../../docs/user-guide/volumes.md) for
|
||||
options. We're going to use Google Compute Engine persistent
|
||||
disks. Create the MongoDB disk by running:
|
||||
|
||||
```
|
||||
gcloud compute disks create --size=200GB mongo-disk
|
||||
```
|
||||
|
||||
Now you can start Mongo using that disk:
|
||||
|
||||
```
|
||||
kubectl create -f examples/meteor/mongo-pod.json
|
||||
kubectl create -f examples/meteor/mongo-service.json
|
||||
```
|
||||
|
||||
Wait until Mongo is started completely and then start up your Meteor app:
|
||||
|
||||
```
|
||||
kubectl create -f examples/meteor/meteor-service.json
|
||||
kubectl create -f examples/meteor/meteor-controller.json
|
||||
```
|
||||
|
||||
Note that [`meteor-service.json`](meteor-service.json) creates a load balancer, so
|
||||
your app should be available through the IP of that load balancer once
|
||||
the Meteor pods are started. We also created the service before creating the rc to
|
||||
aid the scheduler in placing pods, as the scheduler ranks pod placement according to
|
||||
service anti-affinity (among other things). You can find the IP of your load balancer
|
||||
by running:
|
||||
|
||||
```
|
||||
kubectl get service meteor --template="{{range .status.loadBalancer.ingress}} {{.ip}} {{end}}"
|
||||
```
|
||||
|
||||
You will have to open up port 80 if it's not open yet in your
|
||||
environment. On Google Compute Engine, you may run the below command.
|
||||
|
||||
```
|
||||
gcloud compute firewall-rules create meteor-80 --allow=tcp:80 --target-tags kubernetes-node
|
||||
```
|
||||
|
||||
What is going on?
|
||||
-----------------
|
||||
|
||||
Firstly, the `FROM chees/meteor-kubernetes` line in your `Dockerfile`
|
||||
specifies the base image for your Meteor app. The code for that image
|
||||
is located in the `dockerbase/` subdirectory. Open up the `Dockerfile`
|
||||
to get an insight of what happens during the `docker build` step. The
|
||||
image is based on the Node.js official image. It then installs Meteor
|
||||
and copies in your apps' code. The last line specifies what happens
|
||||
when your app container is run.
|
||||
|
||||
```sh
|
||||
ENTRYPOINT MONGO_URL=mongodb://$MONGO_SERVICE_HOST:$MONGO_SERVICE_PORT /usr/local/bin/node main.js
|
||||
```
|
||||
|
||||
Here we can see the MongoDB host and port information being passed
|
||||
into the Meteor app. The `MONGO_SERVICE...` environment variables are
|
||||
set by Kubernetes, and point to the service named `mongo` specified in
|
||||
[`mongo-service.json`](mongo-service.json). See the [environment
|
||||
documentation](../../docs/user-guide/container-environment.md) for more details.
|
||||
|
||||
As you may know, Meteor uses long lasting connections, and requires
|
||||
_sticky sessions_. With Kubernetes you can scale out your app easily
|
||||
with session affinity. The
|
||||
[`meteor-service.json`](meteor-service.json) file contains
|
||||
`"sessionAffinity": "ClientIP"`, which provides this for us. See the
|
||||
[service
|
||||
documentation](../../docs/user-guide/services.md#virtual-ips-and-service-proxies) for
|
||||
more information.
|
||||
|
||||
As mentioned above, the mongo container uses a volume which is mapped
|
||||
to a persistent disk by Kubernetes. In [`mongo-pod.json`](mongo-pod.json) the container
|
||||
section specifies the volume:
|
||||
|
||||
```json
|
||||
{
|
||||
"volumeMounts": [
|
||||
{
|
||||
"name": "mongo-disk",
|
||||
"mountPath": "/data/db"
|
||||
}
|
||||
```
|
||||
|
||||
The name `mongo-disk` refers to the volume specified outside the
|
||||
container section:
|
||||
|
||||
```json
|
||||
{
|
||||
"volumes": [
|
||||
{
|
||||
"name": "mongo-disk",
|
||||
"gcePersistentDisk": {
|
||||
"pdName": "mongo-disk",
|
||||
"fsType": "ext4"
|
||||
}
|
||||
}
|
||||
],
|
||||
```
|
||||
|
||||
|
||||
<!-- BEGIN MUNGE: GENERATED_ANALYTICS -->
|
||||
[]()
|
||||
<!-- END MUNGE: GENERATED_ANALYTICS -->
|
31
vendor/k8s.io/kubernetes/examples/meteor/dockerbase/Dockerfile
generated
vendored
Normal file
31
vendor/k8s.io/kubernetes/examples/meteor/dockerbase/Dockerfile
generated
vendored
Normal file
|
@ -0,0 +1,31 @@
|
|||
# Copyright 2016 The Kubernetes Authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
FROM node:0.10
|
||||
|
||||
ONBUILD WORKDIR /appsrc
|
||||
ONBUILD COPY . /appsrc
|
||||
|
||||
ONBUILD RUN curl https://install.meteor.com/ | sh && \
|
||||
meteor build ../app --directory --architecture os.linux.x86_64 && \
|
||||
rm -rf /appsrc
|
||||
# TODO rm meteor so it doesn't take space in the image?
|
||||
|
||||
ONBUILD WORKDIR /app/bundle
|
||||
|
||||
ONBUILD RUN (cd programs/server && npm install)
|
||||
EXPOSE 8080
|
||||
CMD []
|
||||
ENV PORT 8080
|
||||
ENTRYPOINT MONGO_URL=mongodb://$MONGO_SERVICE_HOST:$MONGO_SERVICE_PORT /usr/local/bin/node main.js
|
14
vendor/k8s.io/kubernetes/examples/meteor/dockerbase/README.md
generated
vendored
Normal file
14
vendor/k8s.io/kubernetes/examples/meteor/dockerbase/README.md
generated
vendored
Normal file
|
@ -0,0 +1,14 @@
|
|||
Building the meteor-kubernetes base image
|
||||
-----------------------------------------
|
||||
|
||||
As a normal user you don't need to do this since the image is already built and pushed to Docker Hub. You can just use it as a base image. See [this example](https://github.com/Q42/meteor-gke-example/blob/master/Dockerfile).
|
||||
|
||||
To build and push the base meteor-kubernetes image:
|
||||
|
||||
docker build -t chees/meteor-kubernetes .
|
||||
docker push chees/meteor-kubernetes
|
||||
|
||||
|
||||
<!-- BEGIN MUNGE: GENERATED_ANALYTICS -->
|
||||
[]()
|
||||
<!-- END MUNGE: GENERATED_ANALYTICS -->
|
34
vendor/k8s.io/kubernetes/examples/meteor/meteor-controller.json
generated
vendored
Normal file
34
vendor/k8s.io/kubernetes/examples/meteor/meteor-controller.json
generated
vendored
Normal file
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"kind": "ReplicationController",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "meteor-controller",
|
||||
"labels": {
|
||||
"name": "meteor"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"replicas": 2,
|
||||
"template": {
|
||||
"metadata": {
|
||||
"labels": {
|
||||
"name": "meteor"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"containers": [
|
||||
{
|
||||
"name": "meteor",
|
||||
"image": "chees/meteor-gke-example:latest",
|
||||
"ports": [
|
||||
{
|
||||
"name": "http-server",
|
||||
"containerPort": 8080
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
20
vendor/k8s.io/kubernetes/examples/meteor/meteor-service.json
generated
vendored
Normal file
20
vendor/k8s.io/kubernetes/examples/meteor/meteor-service.json
generated
vendored
Normal file
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"kind": "Service",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "meteor"
|
||||
},
|
||||
"spec": {
|
||||
"ports": [
|
||||
{
|
||||
"port": 80,
|
||||
"targetPort": "http-server"
|
||||
}
|
||||
],
|
||||
"selector": {
|
||||
"name": "meteor"
|
||||
},
|
||||
"sessionAffinity": "ClientIP",
|
||||
"type": "LoadBalancer"
|
||||
}
|
||||
}
|
40
vendor/k8s.io/kubernetes/examples/meteor/mongo-pod.json
generated
vendored
Normal file
40
vendor/k8s.io/kubernetes/examples/meteor/mongo-pod.json
generated
vendored
Normal file
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"kind": "Pod",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "mongo",
|
||||
"labels": {
|
||||
"name": "mongo",
|
||||
"role": "mongo"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"volumes": [
|
||||
{
|
||||
"name": "mongo-disk",
|
||||
"gcePersistentDisk": {
|
||||
"pdName": "mongo-disk",
|
||||
"fsType": "ext4"
|
||||
}
|
||||
}
|
||||
],
|
||||
"containers": [
|
||||
{
|
||||
"name": "mongo",
|
||||
"image": "mongo:latest",
|
||||
"ports": [
|
||||
{
|
||||
"name": "mongo",
|
||||
"containerPort": 27017
|
||||
}
|
||||
],
|
||||
"volumeMounts": [
|
||||
{
|
||||
"name": "mongo-disk",
|
||||
"mountPath": "/data/db"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
22
vendor/k8s.io/kubernetes/examples/meteor/mongo-service.json
generated
vendored
Normal file
22
vendor/k8s.io/kubernetes/examples/meteor/mongo-service.json
generated
vendored
Normal file
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"kind": "Service",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "mongo",
|
||||
"labels": {
|
||||
"name": "mongo"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"ports": [
|
||||
{
|
||||
"port": 27017,
|
||||
"targetPort": "mongo"
|
||||
}
|
||||
],
|
||||
"selector": {
|
||||
"name": "mongo",
|
||||
"role": "mongo"
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue