# Exemple de creation de volumes dans kubernetes en utilisant les volumes
# claims.
# Inspire d'ici : https://github.com/kubernetes/kubernetes/tree/master/examples/persistent-volume-provisioning

---

# Secret pour que Kubernetes (controller-manager) puisse creer les
# volumes Ceph. L'utilisateur doit avoir les droits suffisants.
# Pour plus de facilite on peut prendre l'utilisateur admin.

apiVersion: v1
kind: Secret
metadata:
  name: ceph-secret
  namespace: kube-system
type: "kubernetes.io/rbd"
data:
  # key = keyring | base64
  key: QVFCYW42OVdtNXhCTUJBQXNvc1hTMThmbUNveklJaVM5Mm55ZFE9PQ==

---

# Secret pour que Kubernetes (kubelet) puisse monter le volume
# sur l'hote pour qu'un pod puisse y acceder.

apiVersion: v1
kind: Secret
metadata:
  name: ceph-secret-user
type: "kubernetes.io/rbd"
data:
  # key = keyring | base64
  key: QVFBYXJEZFpVUWpES3hBQU9lRnR5WThnQTcxSmk3SlBKdU51Ymc9PQ==


---

# Configure kubernetes pour acceder au stockage Ceph

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast
provisioner: kubernetes.io/rbd
parameters:
  # URLs vers les monitors
  monitors: 10.8.100.12:6789
  # Nom de l'utilisateur qui a les droits de creation
  # de pools sur Ceph
  adminId: admin
  # Nom du secret
  adminSecretName: ceph-secret
  # Namespace dans lequel le secret a ete cree
  adminSecretNamespace: kube-system
  # Nom du pool dans lequel les volumes seront crees
  pool: kubernetes
  # Nom de l'utilisateur qui accede a les droits de R/W sur les volumes
  userId: kubernetes
  # Secret correspondant a l'utilisateur ci-dessus
  userSecretName: ceph-secret-user

---

# Demande de creation de volume persistant
# Verification avec kubectl get pv pour voir le PersistentVolume cree

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi
  storageClassName: fast

---

# Creation d'un pod utilisant le PersistentVolumeClaim

kind: Pod
apiVersion: v1
metadata:
  name: mypod
spec:
  containers:
    - name: myfrontend
      image: nginx
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: mypd
  volumes:
    - name: mypd
      persistentVolumeClaim:
        claimName: myclaim
