Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
veilletechno:kubernetes:iscsi:targetd [2019/02/03 15:30] – créée madko | veilletechno:kubernetes:iscsi:targetd [2019/02/03 15:56] (Version actuelle) – [Changer la classe de stockage par défaut] madko | ||
---|---|---|---|
Ligne 2: | Ligne 2: | ||
Il existe un contrôleur capable de piloter à distance un serveur iSCSI targetd. Cela permet de créer une classe de stockage de type iSCSI targetd, afin d' | Il existe un contrôleur capable de piloter à distance un serveur iSCSI targetd. Cela permet de créer une classe de stockage de type iSCSI targetd, afin d' | ||
+ | |||
+ | ===== Classe de stockage ===== | ||
+ | |||
+ | Création d'une storage class avec les info de notre serveur targetd : | ||
+ | |||
+ | < | ||
+ | kind: StorageClass | ||
+ | apiVersion: storage.k8s.io/ | ||
+ | metadata: | ||
+ | name: iscsi-targetd-vg-targetd | ||
+ | provisioner: | ||
+ | parameters: | ||
+ | # this id where the iscsi server is running | ||
+ | targetPortal: | ||
+ | |||
+ | # if you are using multipath, you can specify additional IPs here, default empty | ||
+ | # portals: 192.168.99.101: | ||
+ | |||
+ | # this is the iscsi server iqn | ||
+ | iqn: iqn.2019-02.org.linux-iscsi.k8s: | ||
+ | |||
+ | # this is the iscsi interface to be used, the default is default | ||
+ | # iscsiInterface: | ||
+ | |||
+ | # this must be on eof the volume groups condifgured in targed.yaml, | ||
+ | volumeGroup: | ||
+ | |||
+ | # this is a comma separated list of initiators that will be give access to the created volumes, they must correspond to what you have configured in your nodes. | ||
+ | initiators: iqn.2019-02.org.linux-iscsi.k8s: | ||
+ | |||
+ | # whether or not to use chap authentication for discovery operations | ||
+ | chapAuthDiscovery: | ||
+ | |||
+ | # whether or not to use chap authentication for session operations | ||
+ | chapAuthSession: | ||
+ | |||
+ | # This is the filesystem you want your volume to be formatted with, default xfs | ||
+ | # fsType: xfs | ||
+ | |||
+ | # Whether the volume should be mounted in readonly mode, default false | ||
+ | # readonly: false | ||
+ | </ | ||
+ | |||
+ | Puis pour l' | ||
+ | |||
+ | < | ||
+ | kubectl apply -f iscsi-provisioner-class.yaml | ||
+ | </ | ||
+ | |||
+ | ===== Création d'un secret pour les info de connexion à targetd ===== | ||
+ | |||
+ | Pour se connecter au serveur targetd, le pod controleur doit connaitre le login et mot de passe. Nous allons stocker ces informations dans un secret de kubernetes : | ||
+ | |||
+ | < | ||
+ | kubectl create secret generic targetd-account --from-literal=username=admin --from-literal=password=secret -n kube-system | ||
+ | </ | ||
+ | |||
+ | Le login est **admin**. | ||
+ | |||
+ | Le mot de passe est **secret**. | ||
+ | ===== Contrôleur ===== | ||
+ | |||
+ | Le contrôleur a besoin de quelques autorisations pour surveiller les demandes de volumes persistents, | ||
+ | |||
+ | Sa définition yaml est la suivante : | ||
+ | |||
+ | < | ||
+ | kind: ClusterRole | ||
+ | apiVersion: rbac.authorization.k8s.io/ | ||
+ | metadata: | ||
+ | name: iscsi-provisioner-runner | ||
+ | rules: | ||
+ | - apiGroups: ["" | ||
+ | resources: [" | ||
+ | verbs: [" | ||
+ | - apiGroups: ["" | ||
+ | resources: [" | ||
+ | verbs: [" | ||
+ | - apiGroups: [" | ||
+ | resources: [" | ||
+ | verbs: [" | ||
+ | - apiGroups: ["" | ||
+ | resources: [" | ||
+ | verbs: [" | ||
+ | --- | ||
+ | kind: ClusterRoleBinding | ||
+ | apiVersion: rbac.authorization.k8s.io/ | ||
+ | metadata: | ||
+ | name: run-iscsi-provisioner | ||
+ | subjects: | ||
+ | - kind: ServiceAccount | ||
+ | name: iscsi-provisioner | ||
+ | namespace: kube-system | ||
+ | roleRef: | ||
+ | kind: ClusterRole | ||
+ | name: iscsi-provisioner-runner | ||
+ | apiGroup: rbac.authorization.k8s.io | ||
+ | --- | ||
+ | apiVersion: v1 | ||
+ | kind: ServiceAccount | ||
+ | metadata: | ||
+ | name: iscsi-provisioner | ||
+ | --- | ||
+ | kind: Deployment | ||
+ | apiVersion: extensions/ | ||
+ | metadata: | ||
+ | name: iscsi-provisioner | ||
+ | spec: | ||
+ | replicas: 1 | ||
+ | template: | ||
+ | metadata: | ||
+ | labels: | ||
+ | app: iscsi-provisioner | ||
+ | spec: | ||
+ | containers: | ||
+ | - name: iscsi-provisioner | ||
+ | imagePullPolicy: | ||
+ | image: quay.io/ | ||
+ | args: | ||
+ | - " | ||
+ | env: | ||
+ | - name: PROVISIONER_NAME | ||
+ | value: iscsi-targetd | ||
+ | - name: LOG_LEVEL | ||
+ | value: debug | ||
+ | - name: TARGETD_USERNAME | ||
+ | valueFrom: | ||
+ | secretKeyRef: | ||
+ | name: targetd-account | ||
+ | key: username | ||
+ | - name: TARGETD_PASSWORD | ||
+ | valueFrom: | ||
+ | secretKeyRef: | ||
+ | name: targetd-account | ||
+ | key: password | ||
+ | - name: TARGETD_ADDRESS | ||
+ | value: 192.168.2.107 | ||
+ | serviceAccount: | ||
+ | </ | ||
+ | |||
+ | Ce contrôleur a pour but de fournir des volumes, des LUNs ISCSI aux pods demandeurs. Il répond donc aux pvc via des pv créer en tant que LUNs sur le serveur targetd. | ||
+ | |||
+ | Pour appliquer le yaml : | ||
+ | |||
+ | < | ||
+ | kubectl apply -f iscsi-provisioner-d.yaml -n kube-system | ||
+ | </ | ||
+ | |||
+ | On peut ensuite créer une PVC et un pod utilisateur pour valider l' | ||
+ | |||
+ | ===== Création d'une demande de volume de test ===== | ||
+ | |||
+ | Le but est de valider le travail du contrôleur avec une demande de volume persistent. Définition yaml : | ||
+ | |||
+ | < | ||
+ | kind: PersistentVolumeClaim | ||
+ | apiVersion: v1 | ||
+ | metadata: | ||
+ | name: myclaim | ||
+ | annotations: | ||
+ | volume.beta.kubernetes.io/ | ||
+ | spec: | ||
+ | accessModes: | ||
+ | - ReadWriteOnce | ||
+ | resources: | ||
+ | requests: | ||
+ | storage: 100Mi | ||
+ | </ | ||
+ | |||
+ | Pour l' | ||
+ | |||
+ | < | ||
+ | kubectl apply -f iscsi-provisioner-pvc.yaml | ||
+ | </ | ||
+ | |||
+ | Pour voir l' | ||
+ | |||
+ | < | ||
+ | kubectl get pvc | ||
+ | </ | ||
+ | |||
+ | Si tout se passe bien : | ||
+ | |||
+ | < | ||
+ | NAME STATUS | ||
+ | myclaim | ||
+ | </ | ||
+ | |||
+ | Sur le serveur targetd, on doit voir une nouvelle LUN (via targetcli) et un nouvel LV qui l' | ||
+ | |||
+ | ===== Changer la classe de stockage par défaut ===== | ||
+ | |||
+ | Nous avons vu que notre test de PVC explicite clairement sa classe de stockage. Si nous voulons que par défaut les pods qui ne précise rien à ce niveau parte sur notre classe de stockage iSCSI, il suffit de définir cette dernière comme classe par défaut. | ||
+ | |||
+ | Pour afficher les classes de stockage : | ||
+ | |||
+ | < | ||
+ | [root@node1 ~]# kubectl get sc | ||
+ | NAME | ||
+ | iscsi-targetd-vg-targetd | ||
+ | </ | ||
+ | |||
+ | Pour définir une classe comme classe par défaut : | ||
+ | |||
+ | < | ||
+ | kubectl patch storageclass iscsi-targetd-vg-targetd -p ' | ||
+ | </ | ||
+ | |||
+ | Résultat : | ||
+ | |||
+ | < | ||
+ | [root@node1 ~]# kubectl get sc | ||
+ | NAME | ||
+ | iscsi-targetd-vg-targetd (default) | ||
+ | </ | ||