k3s/examples/iscsi/README.md

103 lines
5.5 KiB
Markdown
Raw Normal View History

2015-07-14 00:13:09 +00:00
<!-- BEGIN MUNGE: UNVERSIONED_WARNING -->
<!-- END MUNGE: UNVERSIONED_WARNING -->
2015-07-17 22:35:41 +00:00
## Introduction
2015-07-17 22:35:41 +00:00
The Kubernetes iSCSI implementation can connect to iSCSI devices via open-iscsi and multipathd on Linux.
Currently supported features are
* Connecting to one portal
* Mounting a device directly or via multipathd
* Formatting and partitioning any new device connected
2015-05-13 17:36:06 +00:00
## Prerequisites
This example expects there to be a working iSCSI target to connect to.
If there isn't one in place then it is possible to setup a software version on Linux by following these guides
2015-07-24 21:52:18 +00:00
* [Setup a iSCSI target on Fedora](http://www.server-world.info/en/note?os=Fedora_21&p=iscsi)
* [Install the iSCSI initiator on Fedora](http://www.server-world.info/en/note?os=Fedora_21&p=iscsi&f=2)
* [Install multipathd for mpio support if required](http://www.linuxstories.eu/2014/07/how-to-setup-dm-multipath-on-rhel.html)
## Creating the pod with iSCSI persistent storage
2015-05-13 17:36:06 +00:00
Once you have configured the iSCSI initiator, you can create a pod based on the example *iscsi.yaml*. In the pod YAML, you need to provide *targetPortal* (the iSCSI target's **IP** address and *port* if not the default port 3260), target's *iqn*, *lun*, and the type of the filesystem that has been created on the lun, and *readOnly* boolean. No initiator information is required.
If you want to use an iSCSI offload card or other open-iscsi transports besides tcp, setup an iSCSI interface and provide *iscsiInterface* in the pod YAML. The default name for an iscsi iface (open-iscsi parameter iface.iscsi\_ifacename) is in the format transport\_name.hwaddress when generated by iscsiadm. See [open-iscsi](http://www.open-iscsi.org/docs/README) or [openstack](http://docs.openstack.org/kilo/config-reference/content/iscsi-iface-config.html) for detailed configuration information.
**Note:** If you have followed the instructions in the links above you
may have partitioned the device, the iSCSI volume plugin does not
currently support partitions so format the device as one partition or leave the device raw and Kubernetes will partition and format it one first mount.
Once the pod config is created, run it on the Kubernetes master:
```console
kubectl create -f ./your_new_pod.yaml
```
Here is the example pod created and expected output:
```console
# kubectl create -f examples/iscsi/iscsi.yaml
# kubectl get pods
NAME READY STATUS RESTARTS AGE
iscsipd 2/2 RUNNING 0 2m
```
Fix extraneous entries in iscsi path format Code comments currently claim the default iscsi mount path as kubernetes.io/pod/iscsi/<portal>-iqn-<iqn>-lun-<id>, however actual path being used is kubernetes.io/iscsi/iscsi/<portal>-iqn-<iqn>-lun-<id> This leads to ultimate path being similar to this : kubernetes.io/iscsi/iscsi/...iqn-iqn...-lun-N Both iscsi and iqn are repated twice for no reason, since "iqn" is required by spec to be part of an iqn. This is also wrong on multiple leves as actual allowed naming formats are : iqn.2001-04.com.example:storage:diskarrays-sn-a8675309 eui.02004567A425678D (RFC 3720 3.2.6.3) and in the second case "iqn-eui" in the path would be misleading. Change this to a more reasonable path of kubernetes.io/iscsi/<portal>-<iqn>-lun-<id> which also aligns up with how the /dev/by-path and sysfs entries are created for iscsi devices on linux * -- * Update iSCSI README and sample json file There seems to have been quite a skew in recent updates to these files adding in wrong info or info that no longer lines up the sample config with the README. Fixed the following issues : * Fix discrepancy in samples json using initiator iqn from previous linked example as target iqn (which was just wrong) * Generate sample output and README from the same json config provided. * Remove recommendation to edit initiator name, this is not required (open-iscsi warns against editing this manually and provides a utility for the same) * Update docker inspect command to one that works. * Use separate LUNs for separate mount points instead of re-using.
2015-10-08 08:21:17 +00:00
On the Kubernetes node, verify the mount output
For a non mpio device the output should look like the following
```console
# mount |grep kub
Fix extraneous entries in iscsi path format Code comments currently claim the default iscsi mount path as kubernetes.io/pod/iscsi/<portal>-iqn-<iqn>-lun-<id>, however actual path being used is kubernetes.io/iscsi/iscsi/<portal>-iqn-<iqn>-lun-<id> This leads to ultimate path being similar to this : kubernetes.io/iscsi/iscsi/...iqn-iqn...-lun-N Both iscsi and iqn are repated twice for no reason, since "iqn" is required by spec to be part of an iqn. This is also wrong on multiple leves as actual allowed naming formats are : iqn.2001-04.com.example:storage:diskarrays-sn-a8675309 eui.02004567A425678D (RFC 3720 3.2.6.3) and in the second case "iqn-eui" in the path would be misleading. Change this to a more reasonable path of kubernetes.io/iscsi/<portal>-<iqn>-lun-<id> which also aligns up with how the /dev/by-path and sysfs entries are created for iscsi devices on linux * -- * Update iSCSI README and sample json file There seems to have been quite a skew in recent updates to these files adding in wrong info or info that no longer lines up the sample config with the README. Fixed the following issues : * Fix discrepancy in samples json using initiator iqn from previous linked example as target iqn (which was just wrong) * Generate sample output and README from the same json config provided. * Remove recommendation to edit initiator name, this is not required (open-iscsi warns against editing this manually and provides a utility for the same) * Update docker inspect command to one that works. * Use separate LUNs for separate mount points instead of re-using.
2015-10-08 08:21:17 +00:00
/dev/sdb on /var/lib/kubelet/plugins/kubernetes.io/iscsi/10.0.2.15:3260-iqn.2001-04.com.example:storage.kube.sys1.xyz-lun-0 type ext4 (ro,relatime,data=ordered)
/dev/sdb on /var/lib/kubelet/pods/f527ca5b-6d87-11e5-aa7e-080027ff6387/volumes/kubernetes.io~iscsi/iscsipd-ro type ext4 (ro,relatime,data=ordered)
/dev/sdc on /var/lib/kubelet/plugins/kubernetes.io/iscsi/10.0.2.15:3260-iqn.2001-04.com.example:storage.kube.sys1.xyz-lun-1 type ext4 (rw,relatime,data=ordered)
/dev/sdc on /var/lib/kubelet/pods/f527ca5b-6d87-11e5-aa7e-080027ff6387/volumes/kubernetes.io~iscsi/iscsipd-rw type ext4 (rw,relatime,data=ordered)
```
And for a node with mpio enabled the expected output would be similar to the following
```console
# mount |grep kub
/dev/mapper/mpatha on /var/lib/kubelet/plugins/kubernetes.io/iscsi/10.0.2.15:3260-iqn.2001-04.com.example:storage.kube.sys1.xyz-lun-0 type ext4 (ro,relatime,data=ordered)
/dev/mapper/mpatha on /var/lib/kubelet/pods/f527ca5b-6d87-11e5-aa7e-080027ff6387/volumes/kubernetes.io~iscsi/iscsipd-ro type ext4 (ro,relatime,data=ordered)
/dev/mapper/mpathb on /var/lib/kubelet/plugins/kubernetes.io/iscsi/10.0.2.15:3260-iqn.2001-04.com.example:storage.kube.sys1.xyz-lun-1 type ext4 (rw,relatime,data=ordered)
/dev/mapper/mpathb on /var/lib/kubelet/pods/f527ca5b-6d87-11e5-aa7e-080027ff6387/volumes/kubernetes.io~iscsi/iscsipd-rw type ext4 (rw,relatime,data=ordered)
```
If you ssh to that machine, you can run `docker ps` to see the actual pod.
2015-07-17 02:01:02 +00:00
```console
# docker ps
Fix extraneous entries in iscsi path format Code comments currently claim the default iscsi mount path as kubernetes.io/pod/iscsi/<portal>-iqn-<iqn>-lun-<id>, however actual path being used is kubernetes.io/iscsi/iscsi/<portal>-iqn-<iqn>-lun-<id> This leads to ultimate path being similar to this : kubernetes.io/iscsi/iscsi/...iqn-iqn...-lun-N Both iscsi and iqn are repated twice for no reason, since "iqn" is required by spec to be part of an iqn. This is also wrong on multiple leves as actual allowed naming formats are : iqn.2001-04.com.example:storage:diskarrays-sn-a8675309 eui.02004567A425678D (RFC 3720 3.2.6.3) and in the second case "iqn-eui" in the path would be misleading. Change this to a more reasonable path of kubernetes.io/iscsi/<portal>-<iqn>-lun-<id> which also aligns up with how the /dev/by-path and sysfs entries are created for iscsi devices on linux * -- * Update iSCSI README and sample json file There seems to have been quite a skew in recent updates to these files adding in wrong info or info that no longer lines up the sample config with the README. Fixed the following issues : * Fix discrepancy in samples json using initiator iqn from previous linked example as target iqn (which was just wrong) * Generate sample output and README from the same json config provided. * Remove recommendation to edit initiator name, this is not required (open-iscsi warns against editing this manually and provides a utility for the same) * Update docker inspect command to one that works. * Use separate LUNs for separate mount points instead of re-using.
2015-10-08 08:21:17 +00:00
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f855336407f4 kubernetes/pause "/pause" 6 minutes ago Up 6 minutes k8s_iscsipd-ro.d130ec3e_iscsipd_default_f527ca5b-6d87-11e5-aa7e-080027ff6387_5409a4cb
3b8a772515d2 kubernetes/pause "/pause" 6 minutes ago Up 6 minutes k8s_iscsipd-rw.ed58ec4e_iscsipd_default_f527ca5b-6d87-11e5-aa7e-080027ff6387_d25592c5
```
Fix extraneous entries in iscsi path format Code comments currently claim the default iscsi mount path as kubernetes.io/pod/iscsi/<portal>-iqn-<iqn>-lun-<id>, however actual path being used is kubernetes.io/iscsi/iscsi/<portal>-iqn-<iqn>-lun-<id> This leads to ultimate path being similar to this : kubernetes.io/iscsi/iscsi/...iqn-iqn...-lun-N Both iscsi and iqn are repated twice for no reason, since "iqn" is required by spec to be part of an iqn. This is also wrong on multiple leves as actual allowed naming formats are : iqn.2001-04.com.example:storage:diskarrays-sn-a8675309 eui.02004567A425678D (RFC 3720 3.2.6.3) and in the second case "iqn-eui" in the path would be misleading. Change this to a more reasonable path of kubernetes.io/iscsi/<portal>-<iqn>-lun-<id> which also aligns up with how the /dev/by-path and sysfs entries are created for iscsi devices on linux * -- * Update iSCSI README and sample json file There seems to have been quite a skew in recent updates to these files adding in wrong info or info that no longer lines up the sample config with the README. Fixed the following issues : * Fix discrepancy in samples json using initiator iqn from previous linked example as target iqn (which was just wrong) * Generate sample output and README from the same json config provided. * Remove recommendation to edit initiator name, this is not required (open-iscsi warns against editing this manually and provides a utility for the same) * Update docker inspect command to one that works. * Use separate LUNs for separate mount points instead of re-using.
2015-10-08 08:21:17 +00:00
Run *docker inspect* and verify the container mounted the host directory into the their */mnt/iscsipd* directory.
2015-07-17 02:01:02 +00:00
```console
Fix extraneous entries in iscsi path format Code comments currently claim the default iscsi mount path as kubernetes.io/pod/iscsi/<portal>-iqn-<iqn>-lun-<id>, however actual path being used is kubernetes.io/iscsi/iscsi/<portal>-iqn-<iqn>-lun-<id> This leads to ultimate path being similar to this : kubernetes.io/iscsi/iscsi/...iqn-iqn...-lun-N Both iscsi and iqn are repated twice for no reason, since "iqn" is required by spec to be part of an iqn. This is also wrong on multiple leves as actual allowed naming formats are : iqn.2001-04.com.example:storage:diskarrays-sn-a8675309 eui.02004567A425678D (RFC 3720 3.2.6.3) and in the second case "iqn-eui" in the path would be misleading. Change this to a more reasonable path of kubernetes.io/iscsi/<portal>-<iqn>-lun-<id> which also aligns up with how the /dev/by-path and sysfs entries are created for iscsi devices on linux * -- * Update iSCSI README and sample json file There seems to have been quite a skew in recent updates to these files adding in wrong info or info that no longer lines up the sample config with the README. Fixed the following issues : * Fix discrepancy in samples json using initiator iqn from previous linked example as target iqn (which was just wrong) * Generate sample output and README from the same json config provided. * Remove recommendation to edit initiator name, this is not required (open-iscsi warns against editing this manually and provides a utility for the same) * Update docker inspect command to one that works. * Use separate LUNs for separate mount points instead of re-using.
2015-10-08 08:21:17 +00:00
# docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/mnt/iscsipd" }}{{ .Source }}{{ end }}{{ end }}' f855336407f4
/var/lib/kubelet/pods/f527ca5b-6d87-11e5-aa7e-080027ff6387/volumes/kubernetes.io~iscsi/iscsipd-ro
# docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/mnt/iscsipd" }}{{ .Source }}{{ end }}{{ end }}' 3b8a772515d2
/var/lib/kubelet/pods/f527ca5b-6d87-11e5-aa7e-080027ff6387/volumes/kubernetes.io~iscsi/iscsipd-rw
```
<!-- BEGIN MUNGE: IS_VERSIONED -->
<!-- TAG IS_VERSIONED -->
<!-- END MUNGE: IS_VERSIONED -->
2015-07-14 00:13:09 +00:00
<!-- BEGIN MUNGE: GENERATED_ANALYTICS -->
[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/examples/iscsi/README.md?pixel)]()
2015-07-14 00:13:09 +00:00
<!-- END MUNGE: GENERATED_ANALYTICS -->