Verwalten der DigitalOcean- und Kubernetes-Infrastruktur mit Pulumi

Der Autor hat dieDiversity in Tech Fundausgewählt, um eine Spende im Rahmen desWrite for DOnations-Programms zu erhalten.

Einführung

Pulumi ist ein Tool zum Erstellen, Bereitstellen und Verwalten der Infrastruktur mithilfe von Code, der in allgemeinen Programmiersprachen geschrieben ist. Es unterstützt die Automatisierung aller von DigitalOcean verwalteten Dienste wie Droplets, verwaltete Datenbanken, DNS-Einträge und Kubernetes-Cluster sowie die Anwendungskonfiguration. Die Bereitstellung erfolgt über eine benutzerfreundliche Befehlszeilenschnittstelle, die sich auch in eine Vielzahl gängiger CI / CD-Systeme integrieren lässt.

Pulumi unterstützt mehrere Sprachen, aber in diesem Tutorial verwenden SieTypeScript, eine statisch typisierte Version vonJavaScript, die die Laufzeit vonNode.jsverwendet. Dies bedeutet, dass Sie IDE-Unterstützung und Überprüfung zur Kompilierungszeit erhalten, um sicherzustellen, dass Sie die richtigen Ressourcen konfiguriert, die richtigen Slugs verwendet usw. haben und dennoch auf alleNPM-Module für Dienstprogrammaufgaben zugreifen können.

In diesem Lernprogramm stellen Sie einen DigitalOceanKubernetes-Cluster, eine Kubernetes-Anwendung mit Lastenausgleich und eine DigitalOcean-DNS-Domäne bereit, die Ihre Anwendung unter einem stabilen Domänennamen Ihrer Wahl verfügbar macht. Dies kann alles in 60 Zeilen Infrastruktur als Code und einer einzelnenpulumi up-Befehlszeilengeste bereitgestellt werden. Nach diesem Tutorial können Sie leistungsfähige Cloud-Architekturen mit Pulumi Infrastructure-as-Code erstellen, die die gesamte Oberfläche von DigitalOcean und Kubernetes nutzen.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

  • Ein DigitalOcean-Konto, für das Ressourcen bereitgestellt werden sollen. Wenn Sie noch keinen haben,register here.

  • Ein DigitalOcean-API-Token zur Durchführung automatisierter Bereitstellungen. Generate a personal access token here und halten Sie es griffbereit, da Sie es in Schritt 2 verwenden werden.

  • Da Sie einen Kubernetes-Cluster erstellen und verwenden, müssen Sieinstall kubectl eingeben. Sorgen Sie sich nicht um eine weitere Konfiguration - Sie werden das später tun.

  • Sie schreiben Ihre Infrastruktur als Code in TypeScript, sodass Sie Node.js 8 oder höher benötigen. Download it here oder installieren Sie esusing your system’s package manager.

  • Sie verwenden Pulumi zum Bereitstellen der Infrastruktur, daher müssen Sieinstall the open source Pulumi SDK eingeben.

  • Um den optionalen Schritt 5 ausführen zu können, benötigen Sie einen Domänennamen, der für die Verwendung von DigitalOcean-Nameservern konfiguriert ist. This guide erklärt, wie Sie dies für den Registrar Ihrer Wahl tun.

[[Schritt 1 - Gerüstbau eines neuen Projekts]] == Schritt 1 - Gerüstbau eines neuen Projekts

Der erste Schritt besteht darin, ein Verzeichnis zu erstellen, in dem Ihr Pulumi-Projekt gespeichert wird. Dieses Verzeichnis enthält den Quellcode für Ihre Infrastrukturdefinitionen sowie Metadatendateien, die das Projekt und seine NPM-Abhängigkeiten beschreiben.

Erstellen Sie zuerst das Verzeichnis:

mkdir do-k8s

Wechseln Sie anschließend in das neu erstellte Verzeichnis:

cd do-k8s

Führen Sie von nun an Befehle aus dem neu erstellten Verzeichnisdo-k8saus.

Als nächstes erstellen Sie ein neues Pulumi-Projekt. Es gibt verschiedene Möglichkeiten, dies zu erreichen. Am einfachsten ist es jedoch, den Befehlpulumi new mit der Projektvorlagetypescriptzu verwenden. Dieser Befehl fordert Sie zuerst auf, sich bei Pulumi anzumelden, damit Ihr Projekt und Ihr Bereitstellungsstatus gespeichert werden, und erstellt dann ein einfaches TypeScript-Projekt im aktuellen Verzeichnis:

pulumi new typescript -y

Hier haben Sie die Option-y an den Befehlnew übergeben, der ihn anweist, Standardprojektoptionen zu akzeptieren. Der Projektname wird beispielsweise aus dem Namen des aktuellen Verzeichnisses übernommen und lautet daherdo-k8s. Wenn Sie verschiedene Optionen für Ihren Projektnamen verwenden möchten, entfernen Sie einfach die-y.

Listen Sie nach dem Ausführen des Befehls den Inhalt des Verzeichnisses mitls auf:

ls

Die folgenden Dateien werden jetzt vorhanden sein:

OutputPulumi.yaml       index.ts          node_modules
package-lock.json package.json      tsconfig.json

Die primäre Datei, die Sie bearbeiten, istindex.ts. Obwohl in diesem Lernprogramm nur diese einzelne Datei verwendet wird, können Sie Ihr Projekt mit den Modulen von Node.js nach Belieben organisieren. In diesem Lernprogramm wird auch Schritt für Schritt beschrieben, wobei die Tatsache genutzt wird, dass Pulumi nur Änderungen erkennen und schrittweise implementieren kann. Wenn Sie möchten, können Sie einfach das gesamte Programm füllen und alles auf einmal mitpulumi up bereitstellen.

Nachdem Sie Ihr neues Projekt gerüstet haben, können Sie die Abhängigkeiten hinzufügen, die zum Befolgen des Lernprogramms erforderlich sind.

[[Schritt-2 - Hinzufügen von Abhängigkeiten]] == Schritt 2 - Hinzufügen von Abhängigkeiten

Der nächste Schritt ist das Installieren und Hinzufügen von Abhängigkeiten zu den DigitalOcean- und Kubernetes-Paketen. Installieren Sie sie zuerst mit NPM:

npm install @pulumi/digitalocean @pulumi/kubernetes

Dadurch werden die NPM-Pakete und Pulumi-Plugins heruntergeladen und als Abhängigkeiten gespeichert.

Öffnen Sie als Nächstes die Dateiindex.tsmit Ihrem bevorzugten Editor. In diesem Tutorial wird Nano verwendet:

nano index.ts

Ersetzen Sie den Inhalt Ihrerindex.ts durch Folgendes:

index.ts

import * as digitalocean from "@pulumi/digitalocean";
import * as kubernetes from "@pulumi/kubernetes";

Dadurch steht Ihrem Programm der gesamte Inhalt dieser Pakete zur Verfügung. Wenn Sie"digitalocean." mit einer IDE eingeben, die TypeScript und Node.js versteht, sollte beispielsweise eine Liste der von diesem Paket unterstützten DigitalOcean-Ressourcen angezeigt werden.

Speichern und schließen Sie die Datei, nachdem Sie den Inhalt hinzugefügt haben.

[.note] #Note: Wir werden eine Teilmenge der in diesen Paketen verfügbaren Inhalte verwenden. Eine vollständige Dokumentation der Ressourcen, Eigenschaften und zugehörigen APIs finden Sie in der entsprechenden API-Dokumentation für die Pakete@pulumi/digitalocean und@pulumi/kubernetes.
#

Als Nächstes konfigurieren Sie Ihr DigitalOcean-Token so, dass Pulumi Ressourcen in Ihrem Konto bereitstellen kann:

pulumi config set digitalocean:token YOUR_TOKEN_HERE --secret

Beachten Sie das--secret-Flag, das den Verschlüsselungsdienst von Pulumi verwendet, um Ihr Token zu verschlüsseln und sicherzustellen, dass es im Chiffretext gespeichert ist. Wenn Sie möchten, können Sie stattdessen die UmgebungsvariableDIGITALOCEAN_TOKENverwenden. Sie müssen jedoch daran denken, sie jedes Mal festzulegen, wenn Sie Ihr Programm aktualisieren, während die Konfiguration sie automatisch speichert und für Ihr Projekt verwendet.

In diesem Schritt haben Sie die erforderlichen Abhängigkeiten hinzugefügt und Ihr API-Token mit Pulumi konfiguriert, damit Sie Ihren Kubernetes-Cluster bereitstellen können.

[[Schritt-3 -—- Bereitstellung eines Kubernetes-Clusters]] == Schritt 3 - Bereitstellung eines Kubernetes-Clusters

Jetzt können Sie einen DigitalOcean Kubernetes-Cluster erstellen. Öffnen Sie zunächst die Dateiindex.tserneut:

nano index.ts

Fügen Sie diese Zeilen am Ende Ihrerindex.ts-Datei hinzu:

index.ts

...
const cluster = new digitalocean.KubernetesCluster("do-cluster", {
    region: digitalocean.Regions.SFO2,
    version: "latest",
    nodePool: {
        name: "default",
        size: digitalocean.DropletSlugs.DropletS2VPCU2GB,
        nodeCount: 3,
    },
});

export const kubeconfig = cluster.kubeConfigs[0].rawConfig;

Dieser neue Code weist eine Instanz vondigitalocean.KubernetesCluster zu und legt eine Reihe von Eigenschaften fest. Dies umfasst die Verwendung vonsfo2region slug, der vonlatestunterstützten Version von Kubernetes, ders-2vcpu-2gbDroplet size slug und der Angabe der gewünschten Anzahl von drei Droplet-Instanzen. Sie können diese jederzeit ändern. Beachten Sie jedoch, dass DigitalOcean Kubernetes zum Zeitpunkt der Erstellung dieses Dokuments nur in bestimmten Regionen verfügbar ist. Aktualisierte Informationen zur Verfügbarkeit von Regionen finden Sie inproduct documentation.

Eine vollständige Liste der Eigenschaften, die Sie in Ihrem Cluster konfigurieren können, finden Sie unterKubernetesCluster API documentation.

Die letzte Zeile in diesem Code-Snippet exportiert diekubeconfig filedes resultierenden Kubernetes-Clusters, damit es einfach zu verwenden ist. Exportierte Variablen werden auf der Konsole gedruckt und sind auch für Tools zugänglich. Sie werden dies vorübergehend verwenden, um über Standardtools wiekubectl auf unseren Cluster zuzugreifen.

Jetzt können Sie Ihren Cluster bereitstellen. Führen Sie dazupulumi up aus:

pulumi up

Dieser Befehl übernimmt das Programm, generiert einen Plan zum Erstellen der beschriebenen Infrastruktur und führt eine Reihe von Schritten aus, um diese Änderungen zu implementieren. Dies gilt nicht nur für die erstmalige Erstellung der Infrastruktur, sondern auch für die Möglichkeit, Ihre Infrastruktur zu unterscheiden und zu aktualisieren, wenn spätere Aktualisierungen vorgenommen werden. In diesem Fall sieht die Ausgabe ungefähr so ​​aus:

OutputPreviewing update (dev):

     Type                                     Name        Plan
 +   pulumi:pulumi:Stack                      do-k8s-dev  create
 +   └─ digitalocean:index:KubernetesCluster  do-cluster  create

Resources:
    + 2 to create

Do you want to perform this update?
  yes
> no
  details

Wenn Sie mit dem Update fortfahren, wird ein einzelner Kubernetes-Cluster mit dem Namendo-cluster erstellt. Mit der Eingabeaufforderungyes/no/detailskönnen wir bestätigen, dass dies das gewünschte Ergebnis ist, bevor tatsächlich Änderungen vorgenommen werden. Wenn Siedetails auswählen, wird eine vollständige Liste der Ressourcen und ihrer Eigenschaften angezeigt. Wählen Sieyes, um die Bereitstellung zu starten:

OutputUpdating (dev):

     Type                                     Name        Status
 +   pulumi:pulumi:Stack                      do-k8s-dev  created
 +   └─ digitalocean:index:KubernetesCluster  do-cluster  created

Outputs:
    kubeconfig: "..."

Resources:
    + 2 created

Duration: 6m5s

Permalink: https://app.pulumi.com/.../do-k8s/dev/updates/1

Das Erstellen des Clusters dauert einige Minuten, aber dann ist er betriebsbereit und die vollständigenkubeconfigwerden auf der Konsole ausgedruckt. Speichern Sie diekubeconfig in einer Datei:

pulumi stack output kubeconfig > kubeconfig.yml

Verwenden Sie es dann mitkubectl, um einen beliebigen Kubernetes-Befehl auszuführen:

KUBECONFIG=./kubeconfig.yml kubectl get nodes

Sie erhalten eine Ausgabe ähnlich der folgenden:

OutputNAME           STATUS    ROLES     AGE       VERSION
default-o4sj   Ready         4m5s      v1.14.2
default-o4so   Ready         4m3s      v1.14.2
default-o4sx   Ready         3m37s     v1.14.2

Zu diesem Zeitpunkt haben Sie die Infrastruktur als Code eingerichtet und haben eine wiederholbare Möglichkeit, neue DigitalOcean Kubernetes-Cluster aufzurufen und zu konfigurieren. Im nächsten Schritt werden Sie darauf aufbauen, um die Kubernetes-Infrastruktur in Code zu definieren und zu lernen, wie Sie sie auf ähnliche Weise bereitstellen und verwalten.

[[Schritt 4 - Bereitstellen einer Anwendung in Ihrem Cluster]] == Schritt 4 - Bereitstellen einer Anwendung in Ihrem Cluster

Als Nächstes beschreiben Sie die Konfiguration einer Kubernetes-Anwendung unter Verwendung von Infrastructure-as-Code. Dies wird aus drei Teilen bestehen:

  1. EinProvider-Objekt, das Pulumi anweist, Kubernetes-Ressourcen für den DigitalOcean-Cluster bereitzustellen, anstatt den Standardwert für die Verwendung vonkubectl zu verwenden.

  2. AKubernetes Deployment, dies ist die Standardmethode von Kubernetes zum Bereitstellen eines Docker-Container-Images, das auf eine beliebige Anzahl von Pods repliziert wird.

  3. AKubernetes Service. Dies ist die Standardmethode, mit der Kubernetes angewiesen wird, den Zugriff auf den Lastausgleich über einen Zielsatz von Pods (in diesem Fall die obige Bereitstellung) zu verteilen.

Dies ist ein ziemlich normaler Prozentsatz (t0) für die Inbetriebnahme eines Lastausgleichsdienstes in Kubernetes.

Öffnen Sie dieindex.ts-Datei erneut, um alle drei bereitzustellen:

nano index.ts

Wenn die Datei geöffnet ist, hängen Sie diesen Code an das Ende der Datei an:

index.ts

...
const provider = new kubernetes.Provider("do-k8s", { kubeconfig })

const appLabels = { "app": "app-nginx" };
const app = new kubernetes.apps.v1.Deployment("do-app-dep", {
    spec: {
        selector: { matchLabels: appLabels },
        replicas: 5,
        template: {
            metadata: { labels: appLabels },
            spec: {
                containers: [{
                    name: "nginx",
                    image: "nginx",
                }],
            },
        },
    },
}, { provider });
const appService = new kubernetes.core.v1.Service("do-app-svc", {
    spec: {
        type: "LoadBalancer",
        selector: app.spec.template.metadata.labels,
        ports: [{ port: 80 }],
    },
}, { provider });

export const ingressIp = appService.status.loadBalancer.ingress[0].ip;

Dieser Code ähnelt der Standardkonfiguration von Kubernetes. Das Verhalten von Objekten und deren Eigenschaften ist äquivalent, mit der Ausnahme, dass es zusammen mit Ihren anderen Infrastrukturdeklarationen in TypeScript geschrieben wurde.

Speichern und schließen Sie die Datei, nachdem Sie die Änderungen vorgenommen haben.

Führen Sie wie zuvorpulumi up aus, um eine Vorschau der Änderungen anzuzeigen und diese dann bereitzustellen:

pulumi up

Nachdem Sieyes ausgewählt haben, um fortzufahren, druckt die CLI detaillierte Statusaktualisierungen aus, einschließlich Diagnosen zur Pod-Verfügbarkeit, IP-Adresszuweisung und mehr. Auf diese Weise können Sie nachvollziehen, warum Ihre Bereitstellung möglicherweise einige Zeit in Anspruch nimmt oder hängen bleibt.

Die vollständige Ausgabe sieht ungefähr so ​​aus:

OutputUpdating (dev):

     Type                            Name        Status
     pulumi:pulumi:Stack             do-k8s-dev
 +   ├─ pulumi:providers:kubernetes  do-k8s      created
 +   ├─ kubernetes:apps:Deployment   do-app-dep  created
 +   └─ kubernetes:core:Service      do-app-svc  created

Outputs:
  + ingressIp : "157.230.199.202"

Resources:
    + 3 created
    2 unchanged

Duration: 2m52s

Permalink: https://app.pulumi.com/.../do-k8s/dev/updates/2

Beachten Sie nach Abschluss dieses Vorgangs, dass die gewünschte Anzahl von Pods ausgeführt wird:

KUBECONFIG=./kubeconfig.yml kubectl get pods
OutputNAME                                   READY     STATUS    RESTARTS   AGE
do-app-dep-vyf8k78z-758486ff68-5z8hk   1/1       Running   0          1m
do-app-dep-vyf8k78z-758486ff68-8982s   1/1       Running   0          1m
do-app-dep-vyf8k78z-758486ff68-94k7b   1/1       Running   0          1m
do-app-dep-vyf8k78z-758486ff68-cqm4c   1/1       Running   0          1m
do-app-dep-vyf8k78z-758486ff68-lx2d7   1/1       Running   0          1m

Ähnlich wie das Programm diekubeconfig-Datei des Clusters exportiert, exportiert dieses Programm auch die IP-Adresse des resultierenden Load Balancers des Kubernetes-Dienstes. Verwenden Sie diese Option, umcurlals Endpunkt zu verwenden und sicherzustellen, dass er ausgeführt wird:

curl $(pulumi stack output ingressIp)
Output


Welcome to nginx!



Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

Von hier aus können Sie Ihre Anwendungsinfrastruktur problemlos bearbeiten und erneut bereitstellen. Versuchen Sie beispielsweise, die Zeilereplicas: 5 inreplicas: 7 zu ändern, und führen Sie dannpulumi up erneut aus:

pulumi up

Beachten Sie, dass nur angezeigt wird, was sich geändert hat, und dass bei der Auswahl von Details der genaue Unterschied angezeigt wird:

OutputPreviewing update (dev):

     Type                           Name        Plan       Info
     pulumi:pulumi:Stack            do-k8s-dev
 ~   └─ kubernetes:apps:Deployment  do-app-dep  update     [diff: ~spec]

Resources:
    ~ 1 to update
    4 unchanged

Do you want to perform this update? details
  pulumi:pulumi:Stack: (same)
    [urn=urn:pulumi:dev::do-k8s::pulumi:pulumi:Stack::do-k8s-dev]
    ~ kubernetes:apps/v1:Deployment: (update)
        [id=default/do-app-dep-vyf8k78z]
        [urn=urn:pulumi:dev::do-k8s::kubernetes:apps/v1:Deployment::do-app-dep]
        [provider=urn:pulumi:dev::do-k8s::pulumi:providers:kubernetes::do-k8s::80f36105-337f-451f-a191-5835823df9be]
      ~ spec: {
          ~ replicas: 5 => 7
        }

Jetzt haben Sie sowohl einen voll funktionsfähigen Kubernetes-Cluster als auch eine funktionierende Anwendung. Wenn Ihre Anwendung ausgeführt wird, möchten Sie möglicherweise eine benutzerdefinierte Domäne für die Verwendung mit Ihrer Anwendung konfigurieren. Der nächste Schritt führt Sie durch die Konfiguration von DNS mit Pulumi.

[[Schritt-5 - Erstellen einer DNS-Domäne - optional]] == Schritt 5 - Erstellen einer DNS-Domäne (optional)

Obwohl der Kubernetes-Cluster und die Anwendung aktiv sind, hängt die Adresse der Anwendung von den Launen der automatischen IP-Adresszuweisung durch Ihren Cluster ab. Beim Anpassen und erneuten Bereitstellen kann sich diese Adresse ändern. In diesem Schritt erfahren Sie, wie Sie der Load-Balancer-IP-Adresse einen benutzerdefinierten DNS-Namen zuweisen, damit dieser auch dann stabil bleibt, wenn Sie später Ihre Infrastruktur ändern.

[.note] #Note: Um diesen Schritt abzuschließen, stellen Sie sicher, dass Sie eine Domain haben, die die DNS-Nameserverns1.digitalocean.com,ns2.digitalocean.com undns3.digitalocean.com von DigitalOcean verwendet. Anweisungen zum Konfigurieren finden Sie im Abschnitt Voraussetzungen.
#

Öffnen Sie zum Konfigurieren von DNS die Dateiindex.tsund hängen Sie den folgenden Code an das Ende der Datei an:

index.ts

...
const domain = new digitalocean.Domain("do-domain", {
    name: "your_domain",
    ipAddress: ingressIp,
});

Dieser Code erstellt einen neuen DNS-Eintrag mit einem A-Eintrag, der auf die IP-Adresse Ihres Kubernetes-Dienstes verweist. Ersetzen Sieyour_domain in diesem Snippet durch den von Ihnen gewählten Domainnamen.

Es ist üblich, dass zusätzliche Subdomains wiewww auf die Webanwendung verweisen. Dies ist mit einem DigitalOcean-DNS-Eintrag einfach zu bewerkstelligen. Um dieses Beispiel interessanter zu gestalten, fügen Sie auch einenCNAME-Datensatz hinzu, derwww.your_domain.com aufyour_domain.com zeigt:

index.ts

...
const cnameRecord = new digitalocean.DnsRecord("do-domain-cname", {
    domain: domain.name,
    type: "CNAME",
    name: "www",
    value: "@",
});

Speichern und schließen Sie die Datei, nachdem Sie diese Änderungen vorgenommen haben.

Führen Sie abschließendpulumi up aus, um die DNS-Änderungen so bereitzustellen, dass sie auf Ihre vorhandene Anwendung und Ihren Cluster verweisen:

OutputUpdating (dev):

     Type                             Name             Status
     pulumi:pulumi:Stack              do-k8s-dev
 +   ├─ digitalocean:index:Domain     do-domain        created
 +   └─ digitalocean:index:DnsRecord  do-domain-cname  created

Resources:
    + 2 created
    5 unchanged

Duration: 6s

Permalink: https://app.pulumi.com/.../do-k8s/dev/updates/3

Nachdem die DNS-Änderungen übertragen wurden, können Sie über Ihre benutzerdefinierte Domain auf Ihre Inhalte zugreifen:

curl www.your_domain.com

Sie erhalten eine Ausgabe ähnlich der folgenden:

Output


Welcome to nginx!



Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

Damit haben Sie erfolgreich einen neuen DigitalOcean Kubernetes-Cluster eingerichtet, eine Kubernetes-Anwendung mit Lastenausgleich bereitgestellt und dem Lastenausgleich dieser Anwendung einen stabilen Domänennamen mithilfe von DigitalOcean DNS in 60 Codezeilen und einempulumi upgegeben Befehl.

Der nächste Schritt führt Sie durch das Entfernen der Ressourcen, wenn Sie diese nicht mehr benötigen.

[[Schritt 6 - Entfernen der Ressourcen - optional]] == Schritt 6 - Entfernen der Ressourcen (optional)

Bevor Sie das Lernprogramm beenden, möchten Sie möglicherweise alle oben erstellten Ressourcen löschen. Auf diese Weise stellen Sie sicher, dass keine Gebühren für Ressourcen anfallen, die nicht verwendet werden. Wenn Sie es vorziehen, Ihre Anwendung am Laufen zu halten, können Sie diesen Schritt überspringen.

Führen Sie den folgenden Befehl aus, um die Ressourcen zu zerstören. Seien Sie vorsichtig damit, da es nicht rückgängig gemacht werden kann!

pulumi destroy

Genau wie beim Befehlup zeigtdestroy eine Vorschau und eine Eingabeaufforderung an, bevor Maßnahmen ergriffen werden:

OutputPreviewing destroy (dev):

     Type                                     Name             Plan
 -   pulumi:pulumi:Stack                      do-k8s-dev       delete
 -   ├─ digitalocean:index:DnsRecord          do-domain-cname  delete
 -   ├─ digitalocean:index:Domain             do-domain        delete
 -   ├─ kubernetes:core:Service               do-app-svc       delete
 -   ├─ kubernetes:apps:Deployment            do-app-dep       delete
 -   ├─ pulumi:providers:kubernetes           do-k8s           delete
 -   └─ digitalocean:index:KubernetesCluster  do-cluster       delete

Resources:
    - 7 to delete

Do you want to perform this destroy?
  yes
> no
  details

Angenommen, Sie möchtenyes auswählen und beobachten, wie die Löschvorgänge ausgeführt werden:

OutputDestroying (dev):

     Type                                     Name             Status
 -   pulumi:pulumi:Stack                      do-k8s-dev       deleted
 -   ├─ digitalocean:index:DnsRecord          do-domain-cname  deleted
 -   ├─ digitalocean:index:Domain             do-domain        deleted
 -   ├─ kubernetes:core:Service               do-app-svc       deleted
 -   ├─ kubernetes:apps:Deployment            do-app-dep       deleted
 -   ├─ pulumi:providers:kubernetes           do-k8s           deleted
 -   └─ digitalocean:index:KubernetesCluster  do-cluster       deleted

Resources:
    - 7 deleted

Duration: 7s

Permalink: https://app.pulumi.com/.../do-k8s/dev/updates/4

Zu diesem Zeitpunkt bleibt nichts übrig: Die DNS-Einträge sind verschwunden und der Kubernetes-Cluster sowie die darin ausgeführte Anwendung sind verschwunden. Der Permalink ist weiterhin verfügbar, sodass Sie immer noch zurückgehen und den vollständigen Verlauf der Aktualisierungen für diesen Stapel anzeigen können. Dies könnte Ihnen bei der Wiederherstellung helfen, wenn die Zerstörung ein Fehler war, da der Dienst für alle Ressourcen den vollständigen Statusverlauf beibehält.

Wenn Sie Ihr Projekt vollständig zerstören möchten, entfernen Sie den Stapel:

pulumi stack rm

Sie werden aufgefordert, den Löschvorgang zu bestätigen, indem Sie den Namen des Stapels eingeben:

OutputThis will permanently remove the 'dev' stack!
Please confirm that this is what you'd like to do by typing ("dev"):

Im Gegensatz zum Befehl destroy, mit dem die Cloud-Infrastruktur-Ressourcen gelöscht werden, wird durch das Entfernen eines Stapels der gesamte Verlauf Ihres Stapels aus dem Einflussbereich von Pulumi gelöscht.

Fazit

In diesem Lernprogramm haben Sie zusätzlich zur Kubernetes-Anwendungskonfiguration, die diesen Cluster verwendet, DigitalOcean-Infrastrukturressourcen bereitgestellt - einen Kubernetes-Cluster und eine DNS-Domäne mit A- und CNAME-Einträgen. Sie haben dazu eine Infrastruktur als Code verwendet, die in einer vertrauten Programmiersprache, TypeScript, geschrieben ist, die mit vorhandenen Editoren, Tools und Bibliotheken zusammenarbeitet und vorhandene Communitys und Pakete nutzt. Sie haben alles mit einem einzigen Befehlszeilenworkflow erledigt, um Bereitstellungen für Ihre Anwendung und Infrastruktur durchzuführen.

Ab hier gibt es eine Reihe von nächsten Schritten, die Sie möglicherweise ausführen:

Das gesamte Beispiel aus diesem Tutorial istavailable on GitHub. Ausführliche Informationen zur heutigen Verwendung der Pulumi-Infrastruktur als Code in Ihren eigenen Projekten finden Sie in den HandbüchernPulumi Documentation,Tutorials oderGetting Started. Pulumi ist Open Source und kostenlos zu benutzen.