Lucrul cu volume în Microk8s

  • 2 minute de citit
  • 12 exemple de cod în YAML și Shell
  • 2 imagini

Disponibil și în English

Pe această pagină

Introducere

Salut 👋,

În acest tutorial rapid 💻 vom explora cum se folosesc Volumes și PersistentVolumes cu stocare hostpath în Microk8s.

Vom lansa o instanță simplă de nginx și vom monta în ea un volum care indică spre directorul ~/Downloads.

Să începem!

Notă: Imaginea următoare a fost generată cu Stable Diffusion

hero

Ghid pas cu pas

Poți urma pașii dacă vrei să configurezi rapid un deployment cu un volum de tip host path.

Persistent Volume

Să începem prin a crea o resursă Persistent Volume:

k apply -f persistent-volume.yaml
apiVersion: v1kind: PersistentVolumemetadata:  name: nuculabs-persistent-volume  labels:    app: nginx    owner: dnutiu    name: tutorial-volumespec:  storageClassName: microk8s-hostpath  # Exclusiv pentru PVC  claimRef:    name: nuculabs-persistent-volume-claim    namespace: default  capacity:    storage: 1Gi  accessModes:    - ReadWriteMany  hostPath:    path: "/home/denis/Downloads"

După aplicarea fișierului ar trebui să vezi:

➜  Downloads k apply -f persistent_volume.yml persistentvolume/nuculabs-persistent-volume created➜  Downloads k get pvNAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                                      STORAGECLASS        REASON   AGEnuculabs-persistent-volume                 1Gi        RWX            Retain           Available   default/nuculabs-persistent-volume-claim   microk8s-hostpath            5s

Persistent volume creat este exclusiv pentru PersistentVolumeClaim pe care îl vom crea în continuare.

Persistent Volume Claim

Pentru a rezerva Persistent Volume-ul nuculabs-persistent-volume trebuie să creăm un claim:

k apply -f persistent-volume-claim.yaml
apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: nuculabs-persistent-volume-claim  namespace: default  labels:    app: nginx    owner: dnutiu    name: tutorial-volumespec:  storageClassName: "microk8s-hostpath"  volumeName: nuculabs-persistent-volume  accessModes:    - ReadWriteMany  resources:    requests:      storage: 500Gi

Putem să ne asigurăm că claim-ul este legat de PV-ul nostru făcând referire la volumeName:

spec:  storageClassName: "microk8s-hostpath"  volumeName: nuculabs-persistent-volume

sau folosind selectorul matchLabels:

spec:  storageClassName: "microk8s-hostpath"  selector:    matchLabels:      app: nginx      owner: dnutiu      name: tutorial-volume

Pentru a verifica dacă volumul este legat, rulează:

k get pvNAME  STATUS   CLAIM  nuculabs-persistent-volume ...        Bound    default/nuculabs-persistent-volume-claim 

Ar trebui să vezi numele volumului împreună cu statusul Bound.

Dacă urmărești pas cu pas, felicitări că ai ajuns până aici! 😁

hero

Deployment

În final, să creăm deployment-ul nginx care conține volumul montat.

k apply -f nginx-deployment.yaml
apiVersion: apps/v1kind: Deploymentmetadata:  name: nginx-deployment  labels:    app: nginxspec:  replicas: 1  selector:    matchLabels:      app: nginx  template:    metadata:      labels:        app: nginx    spec:      containers:      - name: nginx        image: nginx:1.14.2        ports:        - containerPort: 80        volumeMounts:          - mountPath: "/data"            name: data-volume      volumes:        - name: "data-volume"          persistentVolumeClaim:            claimName: nuculabs-persistent-volume-claim

Montăm volumul în containerul nginx cu:

        volumeMounts:          - mountPath: "/data"            name: data-volume

Apoi adăugăm volumele în spec și mapăm „data-volume” la PVC-ul nostru:

      volumes:        - name: "data-volume"          persistentVolumeClaim:            claimName: nuculabs-persistent-volume-claim

Gata! 🎉

Dacă vrei să verifici că volumul este montat corect, poți să te conectezi prin SSH la pod-ul nginx și să navighezi în directorul /data.

Mulțumesc că ai citit! 📚