Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
veilletechno:kubernetes:iscsi:targetd [2019/02/03 15:33] – madko | veilletechno:kubernetes:iscsi:targetd [2019/02/03 15:56] (Version actuelle) – [Changer la classe de stockage par défaut] madko | ||
---|---|---|---|
Ligne 27: | Ligne 27: | ||
# this must be on eof the volume groups condifgured in targed.yaml, | # 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. | # 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.2017-04.com.example:node1 | + | initiators: iqn.2019-02.org.linux-iscsi.k8s: |
# whether or not to use chap authentication for discovery operations | # whether or not to use chap authentication for discovery operations | ||
- | chapAuthDiscovery: | + | chapAuthDiscovery: |
# whether or not to use chap authentication for session operations | # whether or not to use chap authentication for session operations | ||
- | chapAuthSession: | + | chapAuthSession: |
# This is the filesystem you want your volume to be formatted with, default xfs | # This is the filesystem you want your volume to be formatted with, default xfs | ||
Ligne 44: | Ligne 44: | ||
# readonly: 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) | ||
+ | </ | ||