One place for hosting & domains

      Volumes

      Comment supprimer les images, les conteneurs et les volumes de Docker


      Un aide-mémoire pour Docker

      Introduction

      Docker vous permet d’empaqueter facilement vos applications et services dans des conteneurs afin de pouvoir les utiliser partout. Cependant, lorsque vous travaillez avec Docker, il est également facile d’accumuler un nombre excessif d’images, de conteneurs et de volumes de données inutilisés qui alourdissent la sortie et consomment de l’espace disque.

      Docker vous donne tous les outils dont vous avez besoin pour nettoyer votre système de la ligne de commande. Ce guide de type aide-mémoire fournit une référence rapide aux commandes qui sont utiles pour libérer de l’espace disque et garder votre système organisé en supprimant les images, conteneurs et volumes inutilisés de Docker.

      Comment utiliser ce guide :

      • Ce guide est au format aide-mémoire avec des extraits de lignes de commande autonomes
      • Sautez à la section qui correspond à la tâche que vous essayez d’accomplir.

      La syntaxe de substitution des commandes, commandant $( command), utilisée dans les commandes est disponible dans de nombreux shell populaires tels que bash, zsh et Windows Powershell.

      Élimination de toutes les images, conteneurs, volumes et réseaux inutilisés ou en suspens

      Docker fournit une commande unique qui nettoiera toutes les ressources – images, conteneurs, volumes et réseaux – qui sont en suspens (non associées à un conteneur) :

      Pour supprimer en plus tous les conteneurs arrêtés et toutes les images non utilisées (pas seulement les images en suspens), ajoutez l’indicateur -a à la commande :

      Suppression des images de Docker

      Supprimer une ou plusieurs images spécifiques

      Utilisez la commande docker images avec le drapeau -a pour localiser l’ID des images que vous voulez supprimer. Cela vous montrera toutes les images, y compris les couches d’images intermédiaires. Lorsque vous avez localisé les images que vous voulez supprimer, vous pouvez passer leur ID ou leur étiquette à docker rmi :

      Lister :

      Supprimer :

      Supprimer les images en suspens

      Les images de Docker sont constituées de plusieurs couches. Les images en suspens sont des couches qui n’ont aucune relation avec les images marquées. Elles n’ont plus d’utilité et consomment de l’espace disque. Elles peuvent être localisées en ajoutant le drapeau filtre, -f avec une valeur de dangling=true à la commande docker images. Lorsque vous êtes sûr de vouloir les supprimer, vous pouvez utiliser la commande docker images purge :

      Remarque : Si vous construisez une image sans la tagger, l’image apparaîtra dans la liste des images en suspens car elle n’a pas d’association avec une image taguée. Vous pouvez éviter cette situation en fournissant une balise lors de la construction, et vous pouvez tagger rétroactivement une image avec la commande docker tag.’

      Lister :

      • docker images -f dangling=true

      Supprimer :

      Suppression d’images selon un modèle

      Vous pouvez trouver toutes les images qui correspondent à un modèle en utilisant une combinaison de docker images et grep. Une fois que vous êtes satisfait, vous pouvez les supprimer en utilisant awk pour passer les identifiants à docker rmi. Notez que ces utilitaires ne sont pas fournis par Docker et ne sont pas nécessairement disponibles sur tous les systèmes :

      Lister :

      • docker images -a | grep "pattern"

      Supprimer :

      • docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi

      Supprimer toutes les images

      Toutes les images de Docker sur un système peuvent être listées en ajoutant -a à la commande docker images. Une fois que vous êtes sûr de vouloir toutes les supprimer, vous pouvez ajouter le drapeau -q pour passer l’ID de l’image au docker rmi :

      Lister :

      Supprimer :

      • docker rmi $(docker images -a -q)

      Suppression de conteneurs

      Supprimer un ou plusieurs conteneurs spécifiques

      Utilisez la commande docker ps avec le drapeau -a pour localiser le nom ou l’ID des conteneurs que vous voulez supprimer.

      Lister :

      Supprimer :

      • docker rm ID_or_Name ID_or_Name

      Supprimer un conteneur à la sortie

      Si vous savez, lorsque vous créez un conteneur, que vous ne voudrez pas le conserver une fois que vous aurez terminé, vous pouvez lancer le programme docker run --rm pour le supprimer automatiquement à sa sortie.

      Exécuter et supprimer :

      • docker run --rm image_name

      Supprimer tous les conteneurs quittés

      Vous pouvez localiser les conteneurs en utilisant le docker ps -a et les filtrer selon leur statut : créé, redémarré, en cours d’exécution, en pause ou quitté. Pour consulter la liste des conteneurs quittés, utilisez le drapeau -f pour filtrer en fonction de leur statut. Lorsque vous avez vérifié que vous voulez supprimer ces conteneurs, utilisez -q pour transmettre les ID à la commande docker rm.

      Lister :

      • docker ps -a -f status=exited

      Supprimer :

      • docker rm $(docker ps -a -f status=exited -q)

      Supprimer les conteneurs en utilisant plusieurs filtre

      Les filtres de Docker peuvent être combinés en répétant le drapeau filter avec une valeur supplémentaire. Il en résulte une liste de conteneurs qui remplissent l’une ou l’autre de ces conditions. Par exemple, si vous voulez supprimer tous les conteneurs marqués comme étant soit Créé (un état qui peut survenir lorsque vous exécutez un conteneur avec une commande non valide) soit Quitté, vous pouvez utiliser deux filtres :

      Lister :

      • docker ps -a -f status=exited -f status=created

      Supprimer :

      • docker rm $(docker ps -a -f status=exited -f status=created -q)

      Supprimer des conteneurs selon un modèle

      Vous pouvez trouver tous les containers qui correspondent à un modèle en utilisant une combinaison de docker ps et grep. Lorsque vous êtes satisfait de la liste que vous souhaitez supprimer, vous pouvez utiliser awk et xargs pour fournir l’ID à docker rmi. Notez que ces utilitaires ne sont pas fournis par Docker et ne sont pas nécessairement disponibles sur tous les systèmes :

      Lister :

      • docker ps -a | grep "pattern

      Supprimer :

      • docker ps -a | grep "pattern" | awk '{print $3}' | xargs docker rmi

      Arrêter et supprimer tous les conteneurs

      Vous pouvez consulter les conteneurs sur votre système avec docker ps. L’ajout du drapeau -a affichera tous les conteneurs. Lorsque vous êtes sûr de vouloir les supprimer, vous pouvez ajouter le drapeau -q pour fournir les identifiants aux commandes docker start et docker rm :

      Lister :

      Supprimer :

      • docker stop $(docker ps -a -q)
      • docker rm $(docker ps -a -q)

      Suppression de volumes

      Supprimer un ou plusieurs volumes spécifiques – Docker 1.9 et suivants

      Utilisez la commande docker volume ls pour localiser le ou les noms de volume que vous souhaitez supprimer. Ensuite, vous pouvez supprimer un ou plusieurs volumes avec la commande docker volume rm :

      Lister :

      Supprimer :

      • docker volume rm volume_name volume_name

      Supprimer des volumes en suspens – Docker 1.9 et suivants

      Étant donné que le principe des volumes est d’exister indépendamment des conteneurs, lorsqu’un conteneur est retiré, un volume n’est pas automatiquement retiré en même temps. Lorsqu’un volume existe et n’est plus connecté à aucun conteneur, on l’appelle un volume en suspens. Pour les localiser afin de confirmer que vous voulez les retirer, vous pouvez utiliser la commande docker volume ls avec un filtre pour limiter les résultats aux volumes en suspens. Lorsque vous êtes satisfait de la liste, vous pouvez tous les supprimer avec docker volume prune :

      Lister :

      • docker volume ls -f dangling=true

      Supprimer :

      Supprimer un conteneur et son volume

      Si vous avez créé un volume sans nom, il peut être supprimé en même temps que le conteneur avec le drapeau -v. Notez que cela ne fonctionne qu’avec les volumes non nommés. Lorsque le conteneur est supprimé avec succès, son ID est affiché. Notez qu’aucune référence n’est faite à la suppression du volume. S’il n’est pas nommé, il est supprimé silencieusement du système. S’il est nommé, il reste silencieusement présent.

      Supprimer :

      • docker rm -v container_name

      Conclusion

      Ce guide couvre certaines des commandes courantes utilisées pour supprimer les images, les conteneurs et les volumes avec Docker. Il existe de nombreuses autres combinaisons et drapeaux qui peuvent être utilisés avec chacun d’entre eux. Pour un guide complet sur ce qui est disponible, consultez la documentation Docker pour docker system prune, docker rmi, docker rm et docker volume rm. S’il existe des tâches courantes de nettoyage que vous souhaitez voir dans le guide, veuillez demander ou faire des suggestions dans les commentaires.



      Source link

      Como Remover Imagens Docker, Contêineres e Volumes


      Um Guia de Consulta Rápida do Docker

      Introdução

      O Docker facilita o agrupamento de suas aplicações e serviços em contêineres de forma que você possa executá-los em qualquer lugar. Ao trabalhar com o Docker, no entanto, também é fácil acumular um número excessivo de imagens, contêineres e volumes de dados não utilizados que atrapalham a saída e consomem espaço em disco.

      O Docker lhe fornece todas as ferramentas que você precisa para limpar seu sistema a partir da linha de comando. Este guia no estilo cheat sheet fornece uma referência rápida para comandos que são úteis para liberar espaço em disco e manter seu sistema organizado, removendo imagens Docker não utilizadas, contêineres e volumes.

      Como Usar Este Guia:

      • Este guia está no formato de consulta rápida, com trechos de linha de comando independentes.
      • Vá para qualquer seção que seja relevante para a tarefa que você está tentando concluir.

      A sintaxe de substituição de comando, comando $(comando), usada nos comandos está disponível em muitos shells populares, como o bash, zsh e Windows Powershell.

      Limpando Todas as Imagens, Contêineres, Volumes e Redes não Utilizadas ou Pendentes

      O Docker fornece um único comando que irá limpar quaisquer recursos — imagens, contêineres, volumes, e redes — que estão pendentes (não associados a um contêiner):

      Para remover adicionalmente quaisquer contêineres e todas as imagens não utilizadas (não apenas imagens pendentes), adicione a flag -a ao comando:

      Removendo Imagens Docker

      Remover uma ou mais imagens específicas

      Use o comando docker images com a flag -a para localizar o ID das imagens que você deseja remover. Isso lhe mostrará todas as imagens, incluindo camadas intermediárias de imagem. Quando você tiver localizado as imagens que deseja excluir, você pode passar o ID ou tag delas para o docker rmi:

      Listar:

      Remover:

      Remover imagens pendentes

      As imagens Docker consistem de várias camadas. As imagens pendentes são camadas que não têm relação com nenhuma imagem marcada. Elas não servem a um propósito e consomem espaço em disco. Elas podem ser localizadas adicionando a sinalização de filtro, -f com um valor de dangling=true ao comando docker images. Quando você tiver certeza de que deseja excluí-las, você pode usar o comando docker images purge:

      Nota: se você construir uma imagem sem marcá-la, ela aparecerá na lista de imagens pendentes porque ela não possui nenhuma associação com uma imagem marcada. Você pode evitar esta situação fornecendo uma tag quando você for compilar, e você marcar retroativamente uma imagem com o comando docker tag.

      Listar:

      • docker images -f dangling=true

      Remover:

      Removendo imagens de acordo com um padrão

      Você pode encontrar todas as imagens que correspondem a um padrão usando uma combinação do docker images e grep. Assim que estiver satisfeito, você pode excluí-las usando o awk para passar os IDs para o docker rmi. Observe que esses utilitários não são fornecidos pelo Docker e não estão necessariamente disponíveis em todos os sistemas:

      Listar:

      • docker images -a | grep "pattern"

      Remover:

      • docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi

      Remover todas as imagens

      Todas as imagens Docker em um sistema podem ser listadas adicionando -a ao comando docker images. Assim que tiver certeza de que você deseja excluir todas elas, você pode adicionar a sinalização -q para passar o ID da Imagem para o docker rmi:

      Listar:

      Remover:

      • docker rmi $(docker images -a -q)

      Removendo Contêineres

      Remover um ou mais contêineres específicos

      Use o comando docker ps com a sinalização -a para localizar o nome e o ID dos contêineres que você deseja remover.

      Listar:

      Remover:

      • docker rm ID_or_Name ID_or_Name

      Remover um contêiner ao sair

      Se você sabe, ao criar um contêiner, que você não irá querer mantê-lo por perto assim que terminar, você pode executar docker run --rm para excluí-lo automaticamente quando ele for fechado.

      Executar e Remover:

      • docker run --rm image_name

      Remover todos os contêineres finalizados

      Você pode localizar contêineres usando o docker ps -a e filtrá-los pelo seu status: created, restarting, running, paused, or exited. Para revisar a lista de contêineres finalizados, use a flag -f para filtrar com base no status. Quando você tiver verificado, você deseja remover esses contêineres, usando -q para passar os IDs para o comando docker rm.

      Listar:

      • docker ps -a -f status=exited

      Remover:

      • docker rm $(docker ps -a -f status=exited -q)

      Remover contêineres usando mais de um filtro.

      Os filtros do Docker podem ser combinados repetindo a sinalização de filtro com um valor adicional. Isso resulta em uma lista de contêineres que correspondem a qualquer das condições. Por exemplo, se você quiser excluir todos contêineres marcados como Created (um estado que pode resultar quando você executa um contêiner com um comando inválido) ou Exited, você pode usar dois filtros:

      Listar:

      • docker ps -a -f status=exited -f status=created

      Remover:

      • docker rm $(docker ps -a -f status=exited -f status=created -q)

      Remover contêineres de acordo com um padrão

      Você pode encontrar todos os contêineres que correspondem a um padrão usando uma combinação de docker ps e grep. Quando você estiver satisfeito com a lista que deseja excluir, você pode usar o awk e o xargs para fornecer o ID para o docker rmi. Observe que esses utilitários não são fornecidos pelo Docker e não estão necessariamente disponíveis em todos os sistemas:

      Listar:

      • docker ps -a | grep "pattern

      Remover:

      • docker ps -a | grep "pattern" | awk '{print $3}' | xargs docker rmi

      Parar e remover todos os contêineres

      Você pode revisar os contêineres em seu sistema com o docker ps. Adicionando a flag -a mostrará todos os contêineres. Quando você tiver certeza de que deseja excluí-los, você pode adicionar a flag -q para fornecer os IDs para os comandos docker stop e docker rm:

      Listar:

      Remover:

      • docker stop $(docker ps -a -q)
      • docker rm $(docker ps -a -q)

      Removendo Volumes

      Remover um ou mais volumes específicos – Docker 1.9 e mais recentes

      Use o comando docker volume ls para localizar o nome ou nomes de volume que você deseja excluir. Em seguida, você pode remover um ou mais volumes com o comando docker volume rm:

      Listar:

      Remover:

      • docker volume rm volume_name volume_name

      Remover volumes pendentes – Docker 1.9 e acima

      Como a ideia de volumes é existir independentemente dos contêineres, quando um contêiner é removido, um volume não é removido automaticamente ao mesmo tempo. Quando um volume existe e não está mais conectado a nenhum contêiner, ele é chamado de volume pendente, ou dangling volume. Para localizá-los para confirmar que você deseja removê-los, você pode usar o comando docker volume ls com um filtro para limitar os resultados aos volumes pendentes. Quando você estiver satisfeito com a lista, você pode remover todos eles com docker volume prune:

      Listar:

      • docker volume ls -f dangling=true

      Remover:

      Remover um contêiner e seu volume

      Se você criou um volume não nomeado, ele pode ser excluído ao mesmo tempo que o contêiner com a sinalização -v. Observe que isso funciona apenas com volumes não nomeados. Quando o contêiner for removido com sucesso, seu ID é exibido. Observe que nenhuma referência é feita à remoção do volume. Se ele está sem nome, ele é removido silenciosamente do sistema. Se ele está nomeado, ele permanece silenciosamente presente.

      Remover:

      • docker rm -v container_name

      Conclusão

      Este guia cobre alguns dos comandos comuns usados para remover imagens, contêineres e volumes com o Docker. Há muitas outras combinações e flags que podem ser usadas com cada um deles. Para um guia abrangente sobre o que está disponível, consulte a documentação do Docker para docker system prune, docker rmi, docker rm, e docker volume rm. Se houver tarefas comuns de limpeza que você gostaria de ver no guia, por favor, pergunte ou faça sugestões nos comentários.



      Source link

      So richten Sie ReadWriteMany (RWX) Persistent Volumes mit NFS unter DigitalOcean Kubernetes ein


      Einführung

      Aufgrund der verteilten und dynamischen Natur von Containern ist die statische Verwaltung und Konfiguration von Speicher in Kubernetes zu einem schwierigen Problem geworden, da Arbeitslasten jetzt in der Lage sind, innerhalb von Sekunden von einer virtuellen Maschine (VM) auf eine andere zu wechseln. Um dieses Problem zu lösen, verwaltet Kubernetes Volumes mit einem System aus Persistent Volumes (PV), API-Objekten, die eine Speicherkonfiguration/ein Volume darstellen, und PersistentVolumeClaims (PVC), einer Speicheranforderung, die von einem Persistent Volume erfüllt werden soll. Darüber hinaus können Container Storage Interface (CSI)-Treiber dazu beitragen, die Handhabung und Bereitstellung von Speicher für containerisierte Workloads zu automatisieren und zu verwalten. Diese Treiber sind für die Bereitstellung, das Einbinden, das Aufheben der Einbindung, das Entfernen und das Erstellen von Snapshots von Volumes verantwortlich.

      Das digitalocean-csi integriert einen Kubernetes-Cluster mit dem Produkt DigitalOcean Block Storage. Damit kann ein Entwickler Blockspeicher-Volumes für containerisierte Anwendungen in Kubernetes dynamisch bereitstellen. Anwendungen können jedoch manchmal erfordern, dass Daten über mehrere Droplets hinweg persistent gespeichert und gemeinsam genutzt werden. Die Blockspeicher-CSI-Standardlösung von DigitalOcean ist nicht in der Lage, das gleichzeitige Einbinden eines Blockspeicher-Volumes in mehrere Droplets zu unterstützen. Dies bedeutet, dass es sich um eine ReadWriteOnce (RWO)-Lösung handelt, da das Volume auf einen Knoten beschränkt ist. Das Protokoll Network File System (NFS) hingegen unterstützt das Exportieren derselben Freigabe an viele Consumer. Dies wird ReadWriteMany (RWX) genannt, da viele Knoten das Volume als Read-Write einbinden können. Wir können daher einen NFS-Server innerhalb unseres Clusters verwenden, um Speicher bereitzustellen, der die zuverlässige Unterstützung von DigitalOcean Block Storage mit der Flexibilität von NFS-Freigaben nutzen kann.

      In diesem Tutorial werden Sie die dynamische Bereitstellung für NFS-Volumes innerhalb eines DigitalOcean Kubernetes (DOKS)-Clusters, in dem die Exporte auf DigitalOcean Block-Speichervolumes gespeichert werden, konfigurieren. Anschließend werden Sie mehrere Instanzen einer Nginx-Demoanwendung bereitstellen und die gemeinsame Nutzung von Daten zwischen den einzelnen Instanzen testen.

      Voraussetzungen

      Bevor Sie mit diesem Leitfaden beginnen, benötigen Sie Folgendes:

      • Die auf Ihrem lokalen Rechner installierte Befehlszeilenschnittstelle kubectl. Mehr über die Installation und Konfiguration von kubectl können Sie der offiziellen Dokumentation entnehmen.

      • Einen DigitalOcean Kubernetes-Cluster, bei dem Ihre Verbindung standardmäßig als kubectl konfiguriert ist. Um einen Kubernetes-Cluster auf DigitalOcean zu erstellen, lesen Sie unseren Kubernetes-Schnellstart. Eine Anleitung zur Konfiguration von kubectl finden Sie unter dem Schritt Verbinden mit Ihrem Cluster, wenn Sie Ihren Cluster erstellen.

      • Den auf Ihrem lokalen Rechner installierten Helm-Paketmanager und das auf Ihrem Cluster installierte Tiller. Führen Sie dazu die Schritte 1 und 2 des Tutorials So installieren Sie Software auf Kubernetes Clustern mit dem Helm-Paketmanager aus.

      Hinweis: Ab Helm Version 3.0 muss Tiller nicht mehr installiert werden, damit Helm funktioniert. Wenn Sie die neueste Version von Helm verwenden, finden Sie die Anweisungen in der Helm-Installationsdokumentation.

      Schritt 1 – Bereitstellen des NFS-Servers mit Helm

      Für die Bereitstellung des NFS-Servers verwenden Sie ein Helm Chart. Die Bereitstellung eines Helm Charts ist eine automatisierte Lösung, die schneller und weniger fehleranfällig ist als die manuelle Erstellung der NFS-Serverbereitstellung.

      Stellen Sie zuerst sicher, dass das standardmäßige Chart-Repository stable verfügbar ist, indem Sie das Repo hinzufügen:

      • helm repo add stable https://kubernetes-charts.storage.googleapis.com/

      Als Nächstes rufen Sie die Metadaten für das Repository ab, das Sie gerade hinzugefügt haben. Dadurch wird sichergestellt, dass der Helm-Client aktualisiert wird:

      Um den Zugriff auf das Repo stable zu verifizieren, führen Sie eine Suche in den Charts aus:

      Dadurch erhalten Sie eine Liste der verfügbaren Charts, ähnlich der folgenden:

      Output

      NAME CHART VERSION APP VERSION DESCRIPTION stable/acs-engine-autoscaler 2.2.2 2.1.1 DEPRECATED Scales worker nodes within agent pools stable/aerospike 0.3.2 v4.5.0.5 A Helm chart for Aerospike in Kubernetes stable/airflow 5.2.4 1.10.4 Airflow is a platform to programmatically autho... stable/ambassador 5.3.0 0.86.1 A Helm chart for Datawire Ambassador ...

      Das Ergebnis bedeutet, dass Ihr Helm-Client ausgeführt wird und auf dem neuesten Stand ist.

      Nachdem Helm nun eingerichtet ist, installieren Sie das Helm Chart nfs-server-provisioner, um den NFS-Server einzurichten. Wenn Sie den Inhalt des Charts untersuchen möchten, werfen Sie einen Blick in seine Dokumentation auf GitHub.

      Wenn Sie das Helm-Chart bereitstellen, legen Sie einige Variablen für Ihren NFS-Server fest, um die Konfiguration für Ihre Anwendung weiter zu spezifizieren. Sie können auch andere Konfigurationsoptionen untersuchen und sie an die Bedürfnisse der Anwendung anpassen.

      Verwenden Sie den folgenden Befehl, um das Helm-Chart zu installieren:

      • helm install nfs-server stable/nfs-server-provisioner --set persistence.enabled=true,persistence.storageClass=do-block-storage,persistence.size=200Gi

      Dieser Befehl stellt einen NFS-Server mit den folgenden Konfigurationsoptionen bereit:

      • Fügt ein Persistent Volume für den NFS-Server mit dem Flag --set hinzu. Dadurch wird sichergestellt, dass alle gemeinsam genutzten NFS-Daten auch bei Pod-Neustarts persistent gespeichert sind.
      • Für die persistente Speicherung wird die Speicherklasse do-block-storage verwendet.
      • Stellt insgesamt 200Gi für den NFS-Server bereit, die in Exporte aufgeteilt werden können.

      Hinweis: Die Option persistence.size bestimmt die Gesamtkapazität aller NFS-Volumes, die Sie bereitstellen können. Zum Zeitpunkt dieser Veröffentlichung unterstützen nur die DOKS Version 1.16.2-do.3 und spätere Versionen die Erweiterung von Volumes, sodass die Größenänderung dieses Volumes eine manuelle Aufgabe ist, wenn Sie eine frühere Version verwenden. Stellen Sie in diesem Fall sicher, dass Sie diese Größe im Hinblick auf Ihre zukünftigen Bedürfnisse einstellen.

      Nachdem dieser Befehl abgeschlossen ist, erhalten Sie eine Ausgabe, die der folgenden ähnelt:

      Output

      NAME: nfs-server LAST DEPLOYED: Thu Feb 13 19:30:07 2020 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: The NFS Provisioner service has now been installed. A storage class named 'nfs' has now been created and is available to provision dynamic volumes. You can use this storageclass by creating a PersistentVolumeClaim with the correct storageClassName attribute. For example: --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: test-dynamic-volume-claim spec: storageClassName: "nfs" accessModes: - ReadWriteOnce resources: requests: storage: 100Mi

      Um den von Ihnen bereitgestellten NFS-Server zu sehen, führen Sie den folgenden Befehl aus:

      Dadurch wird Folgendes angezeigt:

      Output

      NAME READY STATUS RESTARTS AGE nfs-server-nfs-server-provisioner-0 1/1 Running 0 11m

      Prüfen Sie als Nächstes die von Ihnen erstellte storageclass:

      Sie erhalten eine Ausgabe, die der folgenden ähnelt:

      Output

      NAME PROVISIONER AGE do-block-storage (default) dobs.csi.digitalocean.com 90m nfs cluster.local/nfs-server-nfs-server-provisioner 3m

      Sie haben nun einen NFS-Server sowie einen storageclass, die Sie für die dynamische Bereitstellung von Volumes verwenden können. Als Nächstes können Sie eine Bereitstellung erstellen, die diesen Speicher verwendet, und ihn über mehrere Instanzen hinweg gemeinsam nutzen.

      Schritt 2 – Bereitstellen einer Anwendung unter Verwendung eines gemeinsam genutzten PersistentVolumeClaim

      In diesem Schritt erstellen Sie eine beispielhafte Bereitstellung auf Ihrem DOKS-Cluster, um Ihre Speichereinrichtung zu testen. Dies wird eine Nginx Webserver-Anwendung namens web sein.

      Um diese Anwendung bereitzustellen, schreiben Sie zunächst die YAML-Datei, um die Bereitstellung zu spezifizieren. Öffnen Sie eine Datei nginx-test.yaml mit Ihrem Texteditor; dieses Tutorial verwendet nano:

      Fügen Sie in diese Datei die folgenden Zeilen ein, um die Bereitstellung mit einem PersistentVolumeClaim namens nfs-data zu definieren:

      nginx-test.yaml

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        labels:
          app: web
        name: web
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: web
        strategy: {}
        template:
          metadata:
            creationTimestamp: null
            labels:
              app: web
          spec:
            containers:
            - image: nginx:latest
              name: nginx
              resources: {}
              volumeMounts:
              - mountPath: /data
                name: data
            volumes:
            - name: data
              persistentVolumeClaim:
                claimName: nfs-data
      ---
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: nfs-data
      spec:
        accessModes:
        - ReadWriteMany
        resources:
          requests:
            storage: 2Gi
        storageClassName: nfs
      

      Speichern Sie die Datei und beenden Sie den Texteditor.

      Diese Bereitstellung ist so konfiguriert, dass sie die zugehörigen PersistentVolumeClaim nfs-data verwendet und sie unter /data einbindet.

      In der PVC-Definition werden Sie feststellen, dass der storageClassName auf nfs gesetzt ist. Damit wird dem Cluster mitgeteilt, dass er diese Speicherung nach den Regeln der nfs storageClass, die Sie im vorherigen Schritt erstellt haben, erfüllen muss. Der neue PersistentVolumeClaim wird verarbeitet und dann wird eine NFS-Freigabe bereitgestellt, um den Anspruch in Form eines Persistent Volumes zu erfüllen. Der Pod wird versuchen, dieses PVC einzubinden, sobald es bereitgestellt wurde. Nach dem Einbinden verifizieren Sie die Funktionalität ReadWriteMany (RWX).

      Führen Sie die Bereitstellung mit dem folgenden Befehl aus:

      • kubectl apply -f nginx-test.yaml

      Dadurch erhalten Sie folgende Ausgabe:

      Output

      deployment.apps/web created persistentvolumeclaim/nfs-data created

      Als Nächstes prüfen Sie, ob der Pod web anläuft:

      Dadurch wird Folgendes ausgegeben:

      Output

      NAME READY STATUS RESTARTS AGE nfs-server-nfs-server-provisioner-0 1/1 Running 0 23m web-64965fc79f-b5v7w 1/1 Running 0 4m

      Nachdem nun die Beispielbereitstellung läuft, können Sie sie mit dem Befehl kubectl scale auf drei Instanzen skalieren:

      • kubectl scale deployment web --replicas=3

      Dadurch erhalten Sie folgende Ausgabe:

      Output

      deployment.extensions/web scaled

      Führen Sie nun den Befehl kubectl get erneut aus:

      Sie finden die skalierten Instanzen der Bereitstellung:

      Output

      NAME READY STATUS RESTARTS AGE nfs-server-nfs-server-provisioner-0 1/1 Running 0 24m web-64965fc79f-q9626 1/1 Running 0 5m web-64965fc79f-qgd2w 1/1 Running 0 17s web-64965fc79f-wcjxv 1/1 Running 0 17s

      Sie haben nun drei Instanzen Ihrer Nginx-Bereitstellung, die mit demselben Persistent Volume verbunden sind. Im nächsten Schritt stellen Sie sicher, dass sie Daten untereinander gemeinsam nutzen können.

      Schritt 3 – Validieren der gemeinsamen Nutzung von NFS-Daten

      Im letzten Schritt überprüfen Sie, ob die Daten von allen Instanzen, die in die NFS-Freigabe eingebunden sind, gemeinsam genutzt werden. Dazu erstellen Sie eine Datei im Verzeichnis /data in einem der Pods und verifizieren dann, ob die Datei in dem Verzeichnis /data eines anderen Pods vorhanden ist.

      Um dies zu validieren, verwenden Sie den Befehl kubectl exec. Mit diesem Befehl können Sie einen Pod angeben und einen Befehl innerhalb dieses Pods ausführen. Um mehr über die Überprüfung von Ressourcen unter Verwendung von kubectl zu erfahren, werfen Sie einen Blick auf unseren kubectl-Spickzettel.

      Um innerhalb eines Ihrer Pods web eine Datei namens hello_world zu erstellen, verwenden Sie den Befehl kubectl exec, um den Befehl touch weiterzugeben. Beachten Sie, dass die Zahl nach web im Pod-Namen für Sie unterschiedlich sein wird. Achten Sie also darauf, den hervorgehobenen Pod-Namen durch einen Ihrer eigenen Pods zu ersetzen, die Sie im letzten Schritt als Ausgabe von kubectl get pods gefunden haben.

      • kubectl exec web-64965fc79f-q9626 -- touch /data/hello_world

      Ändern Sie dann den Namen des Pod und verwenden Sie den Befehl ls, um die Dateien im Verzeichnis /data eines anderen Pods aufzulisten:

      • kubectl exec web-64965fc79f-qgd2w -- ls /data

      Ihre Ausgabe zeigt die Datei an, die Sie im ersten Pod erstellt haben:

      Output

      hello_world

      Dies zeigt, dass alle Pods Daten über NFS gemeinsam nutzen und dass Ihre Einrichtung korrekt funktioniert.

      Zusammenfassung

      In diesem Tutorial haben Sie einen NFS-Server erstellt, der durch DigitalOcean Block Storage unterstützt wurde. Der NFS-Server verwendete dann diesen Blockspeicher zur Bereitstellung und zum Export von NFS-Freigaben für Workloads in einem RWX-kompatiblen Protokoll. Auf diese Weise konnten Sie eine technische Beschränkung der Blockspeicherung von DigitalOcean umgehen und dieselben PVC-Daten über viele Pods hinweg gemeinsam nutzen. Durch dieses Tutorial ist Ihr DOKS-Cluster nun so eingerichtet, dass er eine wesentlich größere Anzahl von Anwendungsfällen für die Bereitstellung unterstützt.

      Wenn Sie mehr über Kubernetes erfahren möchten, sehen Sie sich unser Curriculum für Full-Stack-Entwickler oder die Produktdokumentation für DigitalOcean Kubernetes an.



      Source link