Übung: Einrichten der Azure DevOps-Umgebung
In diesem Abschnitt konfigurieren Sie Ihre Azure DevOps-Organisation, um mit dem Rest dieses Moduls fortzufahren und eine Azure Kubernetes Service (AKS)-Umgebung für die Bereitstellung Ihrer Anwendung zu erstellen.
Um diese Ziele zu erreichen, werden Sie:
- Fügen Sie ihrer Azure DevOps-Organisation einen Benutzer hinzu.
- Richten Sie Ihr Azure DevOps-Projekt ein.
- Verwalten Sie Ihren Workflow mit Azure Boards.
- Erstellen Sie Azure-Ressourcen mithilfe der Azure CLI.
- Erstellen Sie Pipelinevariablen in Azure-Pipelines.
- Erstellen Sie eine Dienstverbindung, die bei Azure authentifiziert werden soll.
- Aktualisieren Sie Ihr Kubernetes-Bereitstellungsmanifest.
Hinzufügen eines Benutzers zu Ihrer Organisation
Um dieses Modul abzuschließen, ist ein Azure-Abonnement erforderlich. Sie können kostenlos mit Azure beginnen.
Obwohl es nicht erforderlich ist, mit Azure DevOps zu arbeiten, ist ein Azure-Abonnement erforderlich, um azure-Ressourcen über Azure DevOps bereitzustellen. Um den Prozess einfacher zu gestalten, verwenden Sie dasselbe Microsoft-Konto, um sich sowohl bei Ihrem Azure-Abonnement als auch bei Ihrer Azure DevOps-Organisation anzumelden.
Wenn Sie sich mit verschiedenen Microsoft-Konten bei Azure und Azure DevOps anmelden, können Sie fortfahren, indem Sie ihrem DevOps-Unternehmen unter dem Microsoft-Konto, das Ihrem Azure-Abonnement zugeordnet ist, einen Benutzer hinzufügen. Weitere Details finden Sie unter Hinzufügen von Benutzern zu Ihrer Organisation oder Ihrem Projekt . Wählen Sie beim Hinzufügen des Benutzers die Standardzugriffsebene aus.
Nachdem Sie den Benutzer mit der Standardzugriffsebene hinzugefügt haben, melden Sie sich bei Azure DevOps ab, und melden Sie sich wieder mit dem Microsoft-Konto an, das Ihrem Azure-Abonnement zugeordnet ist.
Abrufen des Azure DevOps-Projekts
In diesem Abschnitt führen Sie eine Vorlage aus, um Ihr Projekt in Azure DevOps zu erstellen.
Ausführen der Vorlage
Führen Sie eine Vorlage aus, die Ihre Azure DevOps-Organisation einrichtet.
Von Bedeutung
Der Azure DevOps Demo-Generator wird nicht mehr unterstützt, Sie können ihn aber weiterhin zum Erstellen von Demoumgebungen verwenden. Zurzeit gibt es keinen Ersatz, und die Funktionen oder Verfügbarkeit können sich in Zukunft ändern.
Rufen Sie das ADOGenerator-Projekt in Visual Studio oder der IDE Ihrer Wahl ab, und führen Sie es aus.
Wenn Sie aufgefordert werden, die Vorlagennummer aus der Liste der Vorlagen einzugeben, geben Sie 40 für die Automatisierung von Multicontainerbereitstellungen in Azure Kubernetes Services mit Azure Pipelines ein, und drücken Sie dann die EINGABETASTE.
Wählen Sie Ihre Authentifizierungsmethode aus. Sie können ein persönliches Zugriffstoken (PERSONAL Access Token, PAT) einrichten und verwenden oder die Geräteanmeldung verwenden.
Hinweis
Wenn Sie einen PAT einrichten, müssen Sie die erforderlichen Bereiche autorisieren. Für dieses Modul können Sie vollzugriff verwenden, aber in einer realen Situation sollten Sie sicherstellen, dass Sie nur die erforderlichen Bereiche gewähren.
Geben Sie Den Namen Ihrer Azure DevOps-Organisation ein, und drücken Sie dann die EINGABETASTE.
Wenn Sie dazu aufgefordert werden, geben Sie Ihren Azure DevOps PAT ein, und drücken Sie dann die EINGABETASTE.
Geben Sie einen Projektnamen wie Space Game - Web - Kubernetes ein und drücken Sie dann die Eingabetaste.
Nachdem Ihr Projekt erstellt wurde, wechseln Sie in Ihrem Browser (at
https://dev.azure.com/<your-organization-name>/) zu Ihrer Azure DevOps-Organisation, und wählen Sie das Projekt aus.
Forken des Repositorys
Falls noch nicht geschehen, erstellen Sie einen Fork des Repositoriums mslearn-tailspin-spacegame-web-kubernetes.
Gehen Sie auf GitHub zum Repository mslearn-tailspin-spacegame-web-kubernetes.
Wählen Sie Fork oben rechts auf dem Bildschirm aus.
Wählen Sie Ihr GitHub-Konto als Besitzer und dann Fork erstellen aus.
Von Bedeutung
Die Einheit "Bereinigen Ihrer Azure DevOps-Umgebung " in diesem Modul umfasst wichtige Schritte für die Bereinigung. Es wird empfohlen, diese Schritte auszuführen, um zu vermeiden, dass Ihnen kostenlose Buildminuten ausgehen. Auch wenn Sie dieses Modul nicht fertig stellen, ist es wichtig, die Bereinigungsschritte auszuführen.
Festlegen der Sichtbarkeit Ihres Projekts
Zunächst ist Ihr Fork des Repositorys „Space Game“ auf GitHub auf „Public“ (Öffentlich) festgelegt, während das mit der Azure DevOps-Vorlage erstellte Projekt auf „Private“ (Privat) festgelegt ist. Auf eine öffentliches Repository auf GitHub kann jeder zugreifen, während ein privates Repository nur für Sie und die Personen zugänglich ist, für die Sie es freigeben möchten. Auf ähnliche Weise bieten öffentliche Projekte in Azure DevOps schreibgeschützten Zugriff für nicht authentifizierte Benutzer, während private Projekte erfordern, dass Benutzern Zugriff gewährt wird und sie authentifiziert werden, um auf die Dienste zuzugreifen.
Derzeit ist es nicht erforderlich, diese Einstellungen für die Zwecke dieses Moduls zu ändern. Für Ihre persönlichen Projekte müssen Sie jedoch die Sichtbarkeit und den Zugriff bestimmen, den Sie anderen gewähren möchten. Bei einem Open-Source-Projekt können Sie z. B. sowohl Ihr GitHub-Repository als auch das Azure DevOps-Projekt öffentlich machen. Wenn Ihr Projekt geschützt ist, sollten Sie sowohl Ihr GitHub-Repository als auch das Azure DevOps-Projekt als privat festlegen.
Später können die folgenden Ressourcen hilfreich sein, um zu bestimmen, welche Option für Ihr Projekt am besten geeignet ist:
- Private und öffentliche Projekte verwenden
- Ändern der Projektsichtbarkeit in öffentliche oder private
- Festlegen der Sichtbarkeit des Repositorys
Versetzen des Arbeitselements in die Ausführung
In diesem Schritt weisen Sie sich selbst in Azure Boards eine Arbeitsaufgabe zu und verschieben sie in den Zustand "Ausführen ". In realen Szenarien würden Sie und Ihr Team Arbeitsaufgaben am Anfang jeder Sprint- oder Arbeitsiteration erstellen.
Wenn Sie Arbeitsaufgaben zuweisen, steht Ihnen eine Checkliste zur Verfügung, an der Sie arbeiten können, und anderen Teammitgliedern Einblicke in Ihren Fortschritt und Ihre verbleibende Arbeit. Es hilft auch, Work-in-Progress-Limits (WIP) umzusetzen, um zu verhindern, dass das Team zu viel Arbeit auf einmal übernimmt.
Navigieren Sie zu Boards in Azure DevOps, und wählen Sie dann im Menü "Boards" aus.
Weisen Sie sich das Arbeitselement Erstellen einer Multi-Container-Version der Website, die mit Kubernetes orchestriert ist zu, indem Sie den nach unten zeigenden Pfeil unten auf der Karte auswählen.
Ziehen Sie das Arbeitselement aus der Spalte Anstehend in die Spalte Wird ausgeführt. Sie verschieben die Aufgabe nach Abschluss des Moduls in die Spalte "Fertig " am Ende dieses Moduls.
Erstellen der Azure Kubernetes-Dienstumgebung
In diesem Schritt erstellen Sie die erforderlichen Azure Kubernetes Service-Ressourcen, um die neue Containerversion der Website bereitzustellen.
In diesem Modul verwenden Sie die Azure CLI, um die ressourcen zu erstellen, die zum Bereitstellen und Ausführen Ihrer Anwendung auf Azure Kubernetes Service erforderlich sind. Auf die Azure CLI kann über ein Terminal oder über Visual Studio Code zugegriffen werden. In diesem Modul greifen Sie jedoch über Azure Cloud Shell auf die Azure CLI zu. Cloud Shell ist eine browserbasierte Shell-Erfahrung, die in der Cloud gehostet wird, die mit der Azure CLI für die Verwendung mit Ihrem Azure-Abonnement vorkonfiguriert ist.
Von Bedeutung
Um die Übungen in diesem Modul abzuschließen, benötigen Sie Ihr eigenes Azure-Abonnement.
Starten von Cloud Shell
Navigieren Sie zum Azure-Portal , und melden Sie sich an.
Wählen Sie im Menü die Option Cloud Shell und dann Bash aus, wenn Sie dazu aufgefordert werden.
Hinweis
Für Cloud Shell ist eine Azure-Speicherressource erforderlich, damit Sie alle in Cloud Shell erstellten Dateien dauerhaft speichern können. Wenn Sie Cloud Shell erstmals öffnen, werden Sie aufgefordert, eine Ressourcengruppe, ein Speicherkonto und eine Azure Files-Freigabe zu erstellen. Dieses Setup wird automatisch für alle zukünftigen Cloud Shell-Sitzungen verwendet.
Auswählen einer Azure-Region
Eine Region bezieht sich auf ein oder mehrere Azure-Rechenzentren, die sich in einem geografischen Gebiet befinden. Regionen wie Ost-USA, West-USA und Nordeuropa sind Beispiele für solche Gebiete. Jede Azure-Ressource, einschließlich einer App Service-Instanz, ist einer Region zugeordnet.
Um die Ausführung von Befehlen zu vereinfachen, legen Sie zunächst einen Standardbereich fest. Nachdem Sie einen Standardbereich festgelegt haben, verwenden nachfolgende Befehle diese Region standardmäßig, es sei denn, Sie geben explizit einen anderen Bereich an.
Führen Sie in Cloud Shell den folgenden Befehl aus, um die regionen anzuzeigen, die in Ihrem Azure-Abonnement verfügbar sind:
az account list-locations \ --query "[].{Name: name, DisplayName: displayName}" \ --output tableWählen Sie eine Region aus der Spalte "Name" in der Ausgabe aus, die sich geografisch in ihrer Nähe befindet. Sie können beispielsweise Ostasien oder Westus2 auswählen.
Führen Sie den folgenden Befehl aus, um Ihren Standardbereich festzulegen. Ersetzen Sie REGION durch den Namen der Region, die Sie zuvor ausgewählt haben.
az configure --defaults location=<REGION>In diesem Beispiel wird als Standardbereich festgelegt
westus2.az configure --defaults location=westus2
Erstellen von Bash-Variablen
Die Verwendung von Bash-Variablen kann den Einrichtungsprozess bequemer und weniger fehleranfällig machen. Dieser Ansatz trägt dazu bei, versehentliche Tippfehler zu vermeiden, indem freigegebene Textzeichenfolgen als Variablen definiert werden, die im gesamten Skript verwendet werden können.
Generieren Sie aus Cloud Shell eine Zufallszahl, um die Erstellung von global eindeutigen Namen für bestimmte Dienste im nächsten Schritt zu vereinfachen.
resourceSuffix=$RANDOMErstellen Sie global eindeutige Namen für Ihre Azure Container Registry und Azure Kubernetes Service-Instanz. Beachten Sie, dass diese Befehle doppelte Anführungszeichen verwenden, die Bash anweisen, die Variablen mithilfe der Inlinesyntax zu interpolieren.
registryName="tailspinspacegame${resourceSuffix}" aksName="tailspinspacegame-${resourceSuffix}"Erstellen Sie eine weitere Bash-Variable, um den Namen Ihrer Ressourcengruppe zu speichern.
rgName='tailspin-space-game-rg'Suchen Sie die neueste AKS-Version.
az aks get-versionsNotieren Sie sich die neueste Version.
Erstellen von Azure-Ressourcen
Hinweis
In diesem Lernprogramm werden Standardnetzwerkeinstellungen für Lernzwecke verwendet. Diese Einstellungen ermöglichen den Zugriff auf Ihre Website über das Internet. In der Praxis können Sie jedoch ein virtuelles Azure-Netzwerk konfigurieren, das Ihre Website in einem Netzwerk platziert, das nicht über das Internet routingfähig ist und nur von Ihnen und Ihrem Team zugänglich ist. Später können Sie Ihr Netzwerk neu konfigurieren, um die Website ihren Benutzern zur Verfügung zu stellen.
Führen Sie den folgenden Befehl aus, um eine Ressourcengruppe mit dem zuvor definierten Namen zu erstellen:
az group create --name $rgNameFühren Sie den
az acr createBefehl aus, um eine Azure Container-Registrierung mit dem Zuvor definierten Namen zu erstellen:az acr create \ --name $registryName \ --resource-group $rgName \ --sku StandardFühren Sie den
az aks createBefehl aus, um eine AKS-Instanz mit dem Zuvor definierten Namen zu erstellen. Ersetzen Sie<latest-AKS-version>durch die Version, die Sie zuvor notiert haben.az aks create \ --name $aksName \ --resource-group $rgName \ --enable-addons monitoring \ --kubernetes-version <latest-AKS-version> \ --generate-ssh-keysHinweis
Die AKS-Bereitstellung kann 10 bis 15 Minuten dauern.
Erstellen Sie eine Variable, um die ID des für die AKS-Instanz konfigurierten Dienstprinzipals zu speichern.
clientId=$(az aks show \ --resource-group $rgName \ --name $aksName \ --query "identityProfile.kubeletidentity.clientId" \ --output tsv)Erstellen Sie eine Variable zum Speichern der ID der Azure-Containerregistrierung:
acrId=$(az acr show \ --name $registryName \ --resource-group $rgName \ --query "id" \ --output tsv)Führen Sie den
az acr listBefehl aus, um die Anmeldeserver-URL für Ihre Azure Container Registry (ACR)-Instanz abzurufen:az acr list \ --resource-group $rgName \ --query "[].{loginServer: loginServer}" \ --output tableNotieren Sie sich unbedingt den Anmeldeserver für Ihre Containerregistrierung. Sie benötigen diese Informationen später beim Konfigurieren der Pipeline. Ein Beispiel:
LoginServer -------------------------------- tailspinspacegame4692.azurecr.ioFühren Sie den
az role assignment createBefehl aus, um eine Rollenzuweisung zu erstellen, um den AKS-Cluster zum Herstellen einer Verbindung mit der Azure-Containerregistrierung zu autorisieren:az role assignment create \ --assignee $clientId \ --role AcrPull \ --scope $acrId
Von Bedeutung
Die Einheit "Bereinigen Ihrer Azure DevOps-Umgebung " in diesem Modul umfasst wichtige Schritte für die Bereinigung. Es wird empfohlen, diese Schritte auszuführen, um zu vermeiden, dass die freien Buildminuten ausgehen. Auch wenn Sie dieses Modul nicht fertig stellen, ist es wichtig, die Bereinigungsschritte auszuführen.
Erstellen Sie eine variable Gruppe
In diesem Abschnitt fügen Sie Ihrer Pipeline eine Variable hinzu, um den Namen Ihrer Azure-Containerregistrierung zu speichern. Es wird empfohlen, den Namen Ihrer Azure Container Registry-Instanz als Variable in Ihrer Pipeline-Konfiguration zu definieren, statt ihn hartzukodieren. Dadurch wird Ihre Konfiguration wiederverwendbar, und falls sich der Name Ihrer Instanz ändert, können Sie die Variable ganz einfach aktualisieren und die Pipeline auslösen, ohne ihre Konfiguration ändern zu müssen.
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.
Wählen Sie "Pipelines" und dann im linken Navigationsbereich " Bibliothek " aus.
Wählen Sie Variablengruppen aus, und wählen Sie dann +Variable-Gruppe aus, um eine neue Variablengruppe hinzuzufügen.
Geben Sie im Abschnitt Eigenschaften "Release" als Namen der Variablengruppe ein.
Wählen Sie im Abschnitt "Variablen" die Option "Hinzufügen" aus.
Geben Sie "RegistryName " für den Variablennamen ein, und geben Sie für den Wert den Anmeldeserver Ihrer Azure-Containerregistrierung ein, z. B. tailspinspacegame4692.azurecr.io.
Wählen Sie oben auf der Seite "Speichern" aus, um die Pipelinevariable zu speichern. Dies ist ein Beispiel dafür, wie Ihre Variablegruppe aussehen könnte.
Erstellen von Dienstverbindungen
Der nächste Schritt besteht darin, Dienstverbindungen zu erstellen, mit denen Azure Pipelines auf Ihre Azure-Containerregistrierung und Azure Kubernetes-Dienstinstanzen zugreifen können. Durch die Erstellung dieser Dienstverbindungen können Azure Pipelines Ihre Container pushen und Ihren AKS-Cluster anweisen, diese abzurufen, um den bereitgestellten Dienst zu aktualisieren.
Von Bedeutung
Stellen Sie sicher, dass Sie beim Azure-Portal und Azure DevOps mit demselben Microsoft-Konto angemeldet sind.
Erstellen einer Dienstverbindung für die Docker-Registrierung
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.
Wählen Sie "Projekteinstellungen" in der unteren Ecke der Seite aus.
Wählen Sie "Dienstverbindungen " im Abschnitt "Pipelines" aus.
Wählen Sie "Neue Dienstverbindung" und dann "Docker Registry" und dann "Weiter" aus.
Wählen Sie oben auf der Seite Azure Container Registry aus, und wählen Sie dann "Dienstprinzipal " für den Authentifizierungstyp aus.
Füllen Sie die folgenden Werte für jede Einstellung aus:
Konfiguration Wert Abonnement Ihr Azure-Abonnement Azure-Containerregistrierung Wählen Sie das zuvor erstellte aus. Name der Dienstverbindung Verbindung zur Containerregistrierung Stellen Sie sicher, dass das Kontrollkästchen für " Zugriffsberechtigung für alle Pipelines erteilen " aktiviert ist.
Wählen Sie "Speichern" aus, wenn Sie fertig sind.
Erstellen einer ARM-Dienstverbindung
Jetzt erstellen Sie eine Azure Resource Manager-Dienstverbindung, um sich bei Ihrem AKS-Cluster zu authentifizieren. Wir verwenden eine ARM-Dienstverbindung anstelle von Kubernetes, da langlebige Token seit Kubernetes 1.24 nicht mehr standardmäßig erstellt werden. Weitere Informationen finden Sie in diesem DevOps-Blogbeitrag: Dienstverbindungsleitfaden für AKS-Kunden, die Kubernetes-Aufgaben verwenden.
Wählen Sie "Neue Dienstverbindung" aus, wählen Sie "Azure Resource Manager" und dann "Weiter" aus.
Wählen Sie "Dienstprinzipal" (automatisch) und dann "Weiter" aus.
Wählen Sie "Abonnement " für Bereichsebene aus.
Füllen Sie die folgenden Werte für jede Einstellung aus.
Konfiguration Wert Abonnement Ihr Azure-Abonnement Ressourcengruppe Wählen Sie das zuvor erstellte aus. Name der Dienstverbindung Kubernetes-Clusterverbindung Stellen Sie sicher, dass das Kontrollkästchen für " Zugriffsberechtigung für alle Pipelines erteilen " aktiviert ist.
Wählen Sie "Speichern" aus, wenn Sie fertig sind.
Erstellen einer Pipelineumgebung
Wählen Sie Pipelines aus und dann Umgebungen.
Wählen Sie "Umgebung erstellen" aus, um eine neue Umgebung zu erstellen.
Geben Sie im Feld "Name""Dev" ein.
Wählen Sie "Keine" aus dem Abschnitt "Ressource " und dann " Erstellen" aus, um Ihre Pipelineumgebung zu erstellen.
Aktualisieren des Kubernetes-Bereitstellungsmanifests
In diesem Abschnitt aktualisieren Sie das Kubernetes-Manifest deployment.yml , um auf die zuvor erstellte Containerregistrierung zu verweisen.
Navigieren Sie zu Ihrem GitHub-Konto, und wählen Sie das Repository aus, das Sie für dieses Modul verzweigt haben: mslearn-tailspin-spacegame-web-kubernetes.
Öffnen Sie die Manifeste/deployment.yml Datei im Bearbeitungsmodus .
Ändern Sie die Container-Image-Referenzen, um Ihren ACR-Anmelde-Server zu nutzen. Im folgenden Manifest wird tailspinspacegame2439.azurecr.io als Beispiel verwendet.
apiVersion : apps/v1 kind: Deployment metadata: name: web spec: replicas: 1 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: web image: tailspinspacegame4692.azurecr.io/web ports: - containerPort: 80 apiVersion : apps/v1 kind: Deployment metadata: name: leaderboard spec: replicas: 1 selector: matchLabels: app: leaderboard template: metadata: labels: app: leaderboard spec: containers: - name: leaderboard image: tailspinspacegame4692.azurecr.io/leaderboard ports: - containerPort: 80Committen Sie die Änderungen in Ihrem Branch
main.