This step is optional and should be followed only if persistent storage for etcd is not disabled using "--etcd-persistent-storage=false" parameter during federation control plane deployment (Refer to step 6).
We intend to create 2 persistent volume (pv) with different "access mode" on the host cluster's Master node (i.e. kubefed-1 here).
#Assuming "enterprise" will be the federation cluster's context name, we pick a relevant name for the pv. #Create a new file ubuntu@kubefed-1:~# cat <<EOF > pv-volume1.yaml kind: PersistentVolume apiVersion: v1 metadata: annotations: volume.alpha.kubernetes.io/storage-class: "yes" name: enterprise-apiserver-etcd-volume1 namespace: federation-system labels: app: federated-cluster type: local spec: capacity: storage: 11Gi accessModes: - ReadWriteMany hostPath: path: "/mnt/data" EOF ubuntu@kubefed-1:~# kubectl create -f pv-volume1.yaml persistentvolume "enterprise-apiserver-etcd-volume1" created ubuntu@kubefed-1:~# #Create a new file ubuntu@kubefed-1:~# cat <<EOF > pv-volume2.yaml kind: PersistentVolume apiVersion: v1 metadata: annotations: volume.alpha.kubernetes.io/storage-class: "yes" name: enterprise-apiserver-etcd-volume2 namespace: federation-system labels: app: federated-cluster type: local spec: capacity: storage: 11Gi accessModes: - ReadWriteOnce hostPath: path: "/mnt/data" EOF ubuntu@kubefed-1:~# kubectl create -f pv-volume2.yaml persistentvolume "enterprise-apiserver-etcd-volume2" created ubuntu@kubefed-1:~# #verify pv status is "Available" ubuntu@kubefed-1:~# kubectl get pv --all-namespaces | grep enterprise NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE enterprise-apiserver-etcd-volume1 11Gi RWX Retain Available 35m enterprise-apiserver-etcd-volume2 11Gi RWO Retain Available 45m ubuntu@kubefed-1:~#