diff --git a/examples/examples_test.go b/examples/examples_test.go index b0b3b4ece03..185cc0014f0 100644 --- a/examples/examples_test.go +++ b/examples/examples_test.go @@ -74,6 +74,11 @@ func validateObject(obj runtime.Object) (errors []error) { t.Namespace = api.NamespaceDefault } errors = validation.ValidatePodTemplate(t) + case *api.Endpoints: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + errors = validation.ValidateEndpoints(t) default: return []error{fmt.Errorf("no validation defined for %#v", obj)} } @@ -161,8 +166,9 @@ func TestExampleObjectSchemas(t *testing.T) { "../examples/iscsi": { "iscsi": &api.Pod{}, }, - "../examples/glusterfs/v1beta3": { - "glusterfs": &api.Pod{}, + "../examples/glusterfs": { + "glusterfs-pod": &api.Pod{}, + "glusterfs-endpoints": &api.Endpoints{}, }, "../examples": { "pod": &api.Pod{}, diff --git a/examples/glusterfs/README.md b/examples/glusterfs/README.md index 541431531a4..f67b467266a 100644 --- a/examples/glusterfs/README.md +++ b/examples/glusterfs/README.md @@ -2,15 +2,45 @@ [Glusterfs](http://www.gluster.org) is an open source scale-out filesystem. These examples provide information about how to allow containers use Glusterfs volumes. -The example assumes that the Glusterfs client package is installed on all nodes. +The example assumes that you have already set up a Glusterfs server cluster and the Glusterfs client package is installed on all Kubernetes nodes. ### Prerequisites -Install Glusterfs client package on the Kubernetes hosts. +Set up Glusterfs server cluster; install Glusterfs client package on the Kubernetes nodes. ([Guide](https://www.howtoforge.com/high-availability-storage-with-glusterfs-3.2.x-on-debian-wheezy-automatic-file-replication-mirror-across-two-storage-servers)) + +### Create endpoints +Here is a snippet of glusterfs-endpoints.json, +``` + "addresses": [ + { + "IP": "10.240.106.152" + } + ], + "ports": [ + { + "port": 1, + "protocol": "TCP" + } + ] + +``` +The "IP" field should be filled with the address of a node in the Glusterfs server cluster. In this example, it is fine to give any valid value (from 1 to 65535) to the "port" field. + +Create the endpoints, +```shell +$ kubectl create -f examples/glusterfs/glusterfs-endpoints.json +``` + +You can verify that the endpoints are successfully created by running +```shell +$ kubect get endpoints +NAME ENDPOINTS +glusterfs-cluster 10.240.106.152:1,10.240.79.157:1 +``` ### Create a POD -The following *volume* spec illustrates a sample configuration. +The following *volume* spec in glusterfs-pod.json illustrates a sample configuration. ```js { @@ -29,19 +59,24 @@ The parameters are explained as the followings. - **path** is the Glusterfs volume name. - **readOnly** is the boolean that sets the mountpoint readOnly or readWrite. -Detailed POD and Gluster cluster endpoints examples can be found at [v1beta3/](v1beta3/) and [endpoints/](endpoints/) - +Create a pod that has a container using Glusterfs volume, ```shell -# create gluster cluster endpoints -$ kubectl create -f examples/glusterfs/endpoints/glusterfs-endpoints.json -# create a container using gluster volume -$ kubectl create -f examples/glusterfs/v1beta3/glusterfs.json +$ kubectl create -f examples/glusterfs/glusterfs-pod.json ``` -Once that's up you can list the pods and endpoint in the cluster, to verify that the master is running: +You can verify that the pod is running: ```shell -$ kubectl get endpoints $ kubectl get pods +POD IP CONTAINER(S) IMAGE(S) HOST LABELS STATUS CREATED MESSAGE +glusterfs 10.244.2.13 kubernetes-minion-151f/23.236.54.97 Running About a minute + glusterfs kubernetes/pause Running About a minute + ``` -If you ssh to that machine, you can run `docker ps` to see the actual pod and `mount` to see if the Glusterfs volume is mounted. +You may ssh to the host and run 'mount' to see if the Glusterfs volume is mounted, +```shell +$ mount | grep kube_vol +10.240.106.152:kube_vol on /var/lib/kubelet/pods/f164a571-fa68-11e4-ad5c-42010af019b7/volumes/kubernetes.io~glusterfs/glusterfsvol type fuse.glusterfs (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072) +``` + +You may also run `docker ps` on the host to see the actual container. diff --git a/examples/glusterfs/endpoints/glusterfs-endpoints.json b/examples/glusterfs/endpoints/glusterfs-endpoints.json deleted file mode 100644 index 886f7a8c875..00000000000 --- a/examples/glusterfs/endpoints/glusterfs-endpoints.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "apiVersion": "v1beta1", - "id": "glusterfs-cluster", - "kind": "Endpoints", - "metadata": { - "name": "glusterfs-cluster" - }, - "Endpoints": [ - "10.16.154.81:0", - "10.16.154.82:0", - "10.16.154.83:0" - ] -} \ No newline at end of file diff --git a/examples/glusterfs/glusterfs-endpoints.json b/examples/glusterfs/glusterfs-endpoints.json new file mode 100644 index 00000000000..4c5d649e14a --- /dev/null +++ b/examples/glusterfs/glusterfs-endpoints.json @@ -0,0 +1,35 @@ +{ + "kind": "Endpoints", + "apiVersion": "v1beta3", + "metadata": { + "name": "glusterfs-cluster" + }, + "subsets": [ + { + "addresses": [ + { + "IP": "10.240.106.152" + } + ], + "ports": [ + { + "port": 1, + "protocol": "TCP" + } + ] + }, + { + "addresses": [ + { + "IP": "10.240.79.157" + } + ], + "ports": [ + { + "port": 1, + "protocol": "TCP" + } + ] + } + ] +} diff --git a/examples/glusterfs/v1beta3/glusterfs.json b/examples/glusterfs/glusterfs-pod.json similarity index 100% rename from examples/glusterfs/v1beta3/glusterfs.json rename to examples/glusterfs/glusterfs-pod.json