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-k8s
aus.
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 Projektvorlagetypescript
zu 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.ts
mit 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_TOKEN
verwenden. 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.ts
erneut:
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 vonsfo2
region slug, der vonlatest
unterstützten Version von Kubernetes, ders-2vcpu-2gb
Droplet 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/details
kö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ändigenkubeconfig
werden 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:
-
Ein
Provider
-Objekt, das Pulumi anweist, Kubernetes-Ressourcen für den DigitalOcean-Cluster bereitzustellen, anstatt den Standardwert für die Verwendung vonkubectl
zu verwenden. -
AKubernetes Deployment, dies ist die Standardmethode von Kubernetes zum Bereitstellen eines Docker-Container-Images, das auf eine beliebige Anzahl von Pods repliziert wird.
-
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, umcurl
als Endpunkt zu verwenden und sicherzustellen, dass er ausgeführt wird:
curl $(pulumi stack output ingressIp)
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.ts
und 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:
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 up
gegeben 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:
-
Entdecken Sie alle von Pulumi unterstützten DigitalOcean-Ressourcen.
-
Lösen Sie Bereitstellungen automatisch mit CI / CD- und Git-Workflow-Integrationen aus.
-
Make certain elements of your program configurable wieexample does bisfacilitate larger projects and multi-stack approaches (wie dev, test, inszenierung, produktion).
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.