CSINode Object
Status
Status | Min K8s Version | Max K8s Version |
---|---|---|
Alpha | 1.12 | 1.13 |
Beta | 1.14 | 1.16 |
GA | 1.17 | - |
What is the CSINode object?
CSI drivers generate node specific information. Instead of storing this in the Kubernetes Node
API Object, a new CSI specific Kubernetes CSINode
object was created.
It serves the following purposes:
- Mapping Kubernetes node name to CSI Node name,
- The CSI
GetNodeInfo
call returns the name by which the storage system refers to a node. Kubernetes must use this name in futureControllerPublishVolume
calls. Therefore, when a new CSI driver is registered, Kubernetes stores the storage system node ID in theCSINode
object for future reference.
- Driver availability
- A way for kubelet to communicate to the kube-controller-manager and kubernetes scheduler whether the driver is available (registered) on the node or not.
- Volume topology
- The CSI
GetNodeInfo
call returns a set of keys/values labels identifying the topology of that node. Kubernetes uses this information to do topology-aware provisioning (see PVC Volume Binding Modes for more details). It stores the key/values as labels on the Kubernetes node object. In order to recall whichNode
label keys belong to a specific CSI driver, the kubelet stores the keys in theCSINode
object for future reference.
What fields does the CSINode object have?
Here is an example of a v1 CSINode
object:
apiVersion: storage.k8s.io/v1
kind: CSINode
metadata:
name: node1
spec:
drivers:
- name: mycsidriver.example.com
nodeID: storageNodeID1
topologyKeys: ['mycsidriver.example.com/regions', "mycsidriver.example.com/zones"]
What the fields mean:
drivers
- list of CSI drivers running on the node and their properties.name
- the CSI driver that this object refers to.nodeID
- the assigned identifier for the node as determined by the driver.topologyKeys
- A list of topology keys assigned to the node as supported by the driver.
What creates the CSINode object?
CSI drivers do not need to create the CSINode
object directly. Kubelet manages the object when a CSI driver registers through the kubelet plugin registration mechanism. The node-driver-registrar sidecar container helps with this registration.
Changes from Alpha to Beta
CRD to Built in Type
The alpha object was called CSINodeInfo
, whereas the beta object is called
CSINode
. The alpha CSINodeInfo
object was also defined as a Custom Resource Definition (CRD). As part of the promotion to beta the object has been moved to the built-in Kubernetes API.
In the move from alpha to beta, the API Group for this object changed from csi.storage.k8s.io/v1alpha1
to storage.k8s.io/v1beta1
.
There is no automatic update of existing CRDs and their CRs during Kubernetes update to the new build-in type.
Enabling CSINodeInfo on Kubernetes
In Kubernetes v1.12 and v1.13, because the feature was alpha, it was disabled by default. To enable the use of CSINodeInfo
on these versions, do the following:
- Ensure the feature gate is enabled with
--feature-gates=CSINodeInfo=true
- Either ensure the
CSIDriver
CRD is automatically installed via the Kubernetes Storage CRD addon OR manually install theCSINodeInfo
CRD on the Kubernetes cluster with the following command:
$> kubectl create -f https://raw.githubusercontent.com/kubernetes/csi-api/master/pkg/crd/manifests/csinodeinfo.yaml
Kubernetes v1.14+, uses the same Kubernetes feature flag, but because the feature is beta, it is enabled by default. And since the API type (as of beta) is built in to the Kubernetes API, installation of the CRD is no longer required.