mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-09 05:01:46 +00:00
add rados block device(rbd) volume plugin
Signed-off-by: Huamin Chen <hchen@redhat.com>
This commit is contained in:
@@ -178,6 +178,10 @@ func TestExampleObjectSchemas(t *testing.T) {
|
||||
"pod": &api.Pod{},
|
||||
"replication": &api.ReplicationController{},
|
||||
},
|
||||
"../examples/rbd/v1beta3": {
|
||||
"rbd": &api.Pod{},
|
||||
"rbd-with-secret": &api.Pod{},
|
||||
},
|
||||
}
|
||||
|
||||
for path, expected := range cases {
|
||||
|
48
examples/rbd/README.md
Normal file
48
examples/rbd/README.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# How to Use it?
|
||||
Install Ceph on the Kubernetes host. For example, on Fedora 21
|
||||
|
||||
# yum -y install ceph
|
||||
|
||||
If you don't have a Ceph cluster, you can set up a [containerized Ceph cluster](https://github.com/rootfs/docker-ceph)
|
||||
|
||||
Then get the keyring from the Ceph cluster and copy it to */etc/ceph/keyring*.
|
||||
|
||||
Once you have installed Ceph and new Kubernetes, you can create a pod based on my examples [rbd.json](v1beta3/rbd.json) [rbd-with-secret.json](v1beta3/rbd-with-secret.json). In the pod JSON, you need to provide the following information.
|
||||
|
||||
- *monitors*: Ceph monitors.
|
||||
- *pool*: The name of the RADOS pool, if not provided, default *rbd* pool is used.
|
||||
- *image*: The image name that rbd has created.
|
||||
- *user*: The RADOS user name. If not provided, default *admin* is used.
|
||||
- *keyring*: The path to the keyring file. If not provided, default */etc/ceph/keyring* is used.
|
||||
- *secretName*: The name of the authentication secrets. If provided, *secretName* overrides *keyring*. Note, see below about how to create a secret.
|
||||
- *fsType*: The filesystem type (ext4, xfs, etc) that formatted on the device.
|
||||
- *readOnly*: Whether the filesystem is used as readOnly.
|
||||
|
||||
# Use Ceph Authentication Secret
|
||||
|
||||
If Ceph authentication secret is provided, the secret should be first be base64 encoded, then encoded string is placed in a secret yaml. An example yaml is provided [here](secret/ceph-secret.yaml). Then post the secret through ```kubectl``` in the following command.
|
||||
|
||||
```console
|
||||
# cluster/kubectl.sh create -f examples/rbd/secret/ceph-secret.yaml
|
||||
```
|
||||
|
||||
# Get started
|
||||
|
||||
Here are my commands:
|
||||
|
||||
```console
|
||||
# cluster/kubectl.sh create -f examples/rbd/v1beta3/rbd.json
|
||||
# cluster/kubectl.sh get pods
|
||||
```
|
||||
|
||||
On the Kubernetes host, I got these in mount output
|
||||
|
||||
```console
|
||||
#mount |grep kub
|
||||
/dev/rbd0 on /var/lib/kubelet/plugins/kubernetes.io/rbd/rbd/kube-image-foo type ext4 (ro,relatime,stripe=4096,data=ordered)
|
||||
/dev/rbd0 on /var/lib/kubelet/pods/ec2166b4-de07-11e4-aaf5-d4bed9b39058/volumes/kubernetes.io~rbd/rbdpd type ext4 (ro,relatime,stripe=4096,data=ordered)
|
||||
```
|
||||
|
||||
If you ssh to that machine, you can run `docker ps` to see the actual pod and `docker inspect` to see the volumes used by the container.
|
||||
|
||||
[]()
|
6
examples/rbd/secret/ceph-secret.yaml
Normal file
6
examples/rbd/secret/ceph-secret.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
apiVersion: v1beta3
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: ceph-secret
|
||||
data:
|
||||
key: QVFCMTZWMVZvRjVtRXhBQTVrQ1FzN2JCajhWVUxSdzI2Qzg0SEE9PQ==
|
42
examples/rbd/v1beta3/rbd-with-secret.json
Normal file
42
examples/rbd/v1beta3/rbd-with-secret.json
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"apiVersion": "v1beta3",
|
||||
"id": "rbdpd2",
|
||||
"kind": "Pod",
|
||||
"metadata": {
|
||||
"name": "rbd2"
|
||||
},
|
||||
"spec": {
|
||||
"containers": [
|
||||
{
|
||||
"name": "rbd-rw",
|
||||
"image": "kubernetes/pause",
|
||||
"volumeMounts": [
|
||||
{
|
||||
"mountPath": "/mnt/rbd",
|
||||
"name": "rbdpd"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"volumes": [
|
||||
{
|
||||
"name": "rbdpd",
|
||||
"rbd": {
|
||||
"monitors": [
|
||||
"10.16.154.78:6789",
|
||||
"10.16.154.82:6789",
|
||||
"10.16.154.83:6789"
|
||||
],
|
||||
"pool": "kube",
|
||||
"image": "foo",
|
||||
"user": "admin",
|
||||
"secretRef": {
|
||||
"name": "ceph-secret"
|
||||
},
|
||||
"fsType": "ext4",
|
||||
"readOnly": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
40
examples/rbd/v1beta3/rbd.json
Normal file
40
examples/rbd/v1beta3/rbd.json
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"apiVersion": "v1beta3",
|
||||
"id": "rbdpd",
|
||||
"kind": "Pod",
|
||||
"metadata": {
|
||||
"name": "rbd"
|
||||
},
|
||||
"spec": {
|
||||
"containers": [
|
||||
{
|
||||
"name": "rbd-rw",
|
||||
"image": "kubernetes/pause",
|
||||
"volumeMounts": [
|
||||
{
|
||||
"mountPath": "/mnt/rbd",
|
||||
"name": "rbdpd"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"volumes": [
|
||||
{
|
||||
"name": "rbdpd",
|
||||
"rbd": {
|
||||
"monitors": [
|
||||
"10.16.154.78:6789",
|
||||
"10.16.154.82:6789",
|
||||
"10.16.154.83:6789"
|
||||
],
|
||||
"pool": "kube",
|
||||
"image": "foo",
|
||||
"user": "admin",
|
||||
"keyring": "/etc/ceph/keyring",
|
||||
"fsType": "ext4",
|
||||
"readOnly": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user