(INAKTUELL) Använda Draft med Azure Container Service och Azure Container Registry för att skapa och distribuera ett program till Kubernetes

Tips

Den uppdaterade versionen av den här artikeln som använder Azure Kubernetes Service finns i Använda utkast med Azure Kubernetes Service (AKS).

Varning

Azure Container Service (ACS) är inaktuell. Inga nya funktioner läggs till i ACS. Alla API:er, portalen, CLI-kommandon och dokumentationen är markerade som inaktuella.

2017 införde vi Azure Kubernetes Service (AKS) för att förenkla hanteringen, distributionen och åtgärderna för Kubernetes. Om du använder Kubernetes-initieraren bör du migrera till AKS senast den 31 januari 2020. Kom igång genom att läsa om att migrera till Azure Kubernetes Service.

Mer information finns i utfasningsmeddelandet för Azure Container Service på Azure.com.

Draft är ett nytt verktyg med öppen källkod som gör det enkelt att utveckla containerbaserade program och distribuera dem till Kubernetes-kluster utan ingående kunskaper om Docker och Kubernetes (t.o.m. utan att installera dem). Med verktyg som Draft kan du och dina team fokusera på att utveckla program med Kubernetes i stället för att lägga så mycket tid och kraft på infrastrukturen.

Du kan använda Draft med alla Docker-avbildningsregister och Kubernetes-kluster, även lokalt. Den här självstudien visar hur du använder ACS med Kubernetes och ACR för att skapa en live men säker utvecklarpipeline i Kubernetes med hjälp av Draft och hur du använder Azure DNS för att exponera utvecklarpipelinen för andra att se i en domän.

Skapa ett Azure Container Registry

Du kan enkelt skapa ett nytt Azure Container Registry, men du måste utföra följande steg:

  1. Skapa en Azure-resursgrupp för att hantera ditt ACR-register och Kubernetes-klustret i ACS.

    az group create --name draft --location eastus
    
  2. Skapa ett ACR-avbildningsregister med az acr create och se till att --admin-enabled alternativet är inställt på true.

    az acr create --resource-group draft --name draftacs --sku Basic
    

Skapa en Azure Container Service med Kubernetes

Nu är du redo att använda az acs create för att skapa ett ACS-kluster med Kubernetes som --orchestrator-type-värde.

az acs create --resource-group draft --name draft-kube-acs --dns-prefix draft-cluster --orchestrator-type kubernetes --generate-ssh-keys

Anteckning

Eftersom Kubernetes inte är standardorchestratortypen måste du använda växeln --orchestrator-type kubernetes.

Utdata ser ut ungefär så här vid ett lyckat resultat.

waiting for AAD role to propagate.done
{
  "id": "/subscriptions/<guid>/resourceGroups/draft/providers/Microsoft.Resources/deployments/azurecli14904.93snip09",
  "name": "azurecli1496227204.9323909",
  "properties": {
    "correlationId": "<guid>",
    "debugSetting": null,
    "dependencies": [],
    "mode": "Incremental",
    "outputs": null,
    "parameters": {
      "clientSecret": {
        "type": "SecureString"
      }
    },
    "parametersLink": null,
    "providers": [
      {
        "id": null,
        "namespace": "Microsoft.ContainerService",
        "registrationState": null,
        "resourceTypes": [
          {
            "aliases": null,
            "apiVersions": null,
            "locations": [
              "westus"
            ],
            "properties": null,
            "resourceType": "containerServices"
          }
        ]
      }
    ],
    "provisioningState": "Succeeded",
    "template": null,
    "templateLink": null,
    "timestamp": "2017-05-31T10:46:29.434095+00:00"
  },
  "resourceGroup": "draft"
}

Nu när du har ett kluster kan du importera autentiseringsuppgifterna med hjälp av kommandot az acs kubernetes get-credentials. Nu har du en lokal konfigurationsfil för klustret. Den behövs för att Helm och Draft ska kunna utföra sitt arbete.

Installera och konfigurera Draft

  1. Ladda ned utkast för din miljö på https://github.com/Azure/draft/releases och installera i din PATH så att kommandot kan användas.

  2. Ladda ned helm för din miljö på https://github.com/kubernetes/helm/releases och installera den i din PATH så att kommandot kan användas.

  3. Konfigurera Draft för att använda ditt register och skapa underdomäner för varje Helm-diagram som skapas. För att konfigurera Draft behöver du:

    • ditt Azure Container Registry-namn (draftacsdemo i det här exemplet)
    • din registernyckel, eller ditt lösenord, från az acr credential show -n <registry name> --output tsv --query "passwords[0].value".

    Anropa draft init och konfigurationsprocessen frågar efter värdena ovan. Observera att URL-formatet för register-URL:en är registernamnet (i det här exemplet draftacsdemo) plus .azurecr.io. Ditt användarnamn är registernamnet på egen hand. Processen ser ut ungefär så här första gången du kör den.

     $ draft init
     Creating /home/ralph/.draft 
     Creating /home/ralph/.draft/plugins 
     Creating /home/ralph/.draft/packs 
     Creating pack go...
     Creating pack python...
     Creating pack ruby...
     Creating pack javascript...
     Creating pack gradle...
     Creating pack java...
     Creating pack php...
     Creating pack csharp...
     $DRAFT_HOME has been configured at /home/ralph/.draft.
    
     In order to configure Draft, we need a bit more information...
    
     1. Enter your Docker registry URL (e.g. docker.io/myuser, quay.io/myuser, myregistry.azurecr.io): draftacsdemo.azurecr.io
     2. Enter your username: draftacsdemo
     3. Enter your password: 
     Draft has been installed into your Kubernetes Cluster.
     Happy Sailing!
    

Nu är du redo att distribuera ett program.

Skapa och distribuera ett program

I Draft-databasen finns sex enkla exempelprogram. Klona lagringsplatsen och låt oss använda Java-exemplet. Ändra till katalogen examples/java och skriv draft create för att skapa programmet. Det ska se ut som i följande exempel.

$ draft create
--> Draft detected the primary language as Java with 91.228814% certainty.
--> Ready to sail

Utdata innehåller en Dockerfile och ett Helm-diagram. För att skapa och distribuera skriver du bara draft up. Utdata är omfattande, men bör se ut som i följande exempel.

$ draft up
Draft Up Started: 'handy-labradoodle'
handy-labradoodle: Building Docker Image: SUCCESS ⚓  (35.0232s)
handy-labradoodle: Pushing Docker Image: SUCCESS ⚓  (17.0062s)
handy-labradoodle: Releasing Application: SUCCESS ⚓  (3.8903s)
handy-labradoodle: Build ID: 01BT0ZJ87NWCD7BBPK4Y3BTTPB

Visa programmet på ett säkert sätt

Containern körs nu i ACS. Om du vill visa det använder draft connect du kommandot som skapar en säker anslutning till klustrets IP-adress med en specifik port för ditt program så att du kan visa den lokalt. Om det lyckas letar du efter URL:en för att ansluta till din app på den första raden efter SUCCESS-indikatorn .

Anteckning

Om du får ett meddelande om att inga poddar var klara väntar du en stund och försöker igen, eller så kan du se poddarna bli redo och kubectl get pods -w sedan försöka igen när de gör det.

draft connect
Connecting to your app...SUCCESS...Connect to your app on localhost:46143
Starting log streaming...
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See https://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
== Spark has ignited ...
>> Listening on 0.0.0.0:4567

I föregående exempel kan du skriva curl -s https://localhost:46143 för att få svaret , Hello World, I'm Java!. När du CTRL+ eller CMD+C (beroende på din OS-miljö) stängs den säkra tunneln av och du kan fortsätta iterera.

Dela ditt program genom att konfigurera en distributionsdomän med Azure DNS

Du har redan utfört den iterationsloop för utvecklare som Draft skapar i föregående steg. Du kan dock dela ditt program via Internet genom att:

  1. Installera en ingress i ditt ACS-kluster (för att ange en offentlig IP-adress där appen ska visas)
  2. Delegera din anpassade domän till Azure DNS och mappa din domän till DEN IP-adress som ACS tilldelar till ingresskontrollanten

Använd helm för att installera ingresskontrollanten.

Använd helm för att söka efter och installera stable/traefik, en inkommande kontrollant, för att aktivera inkommande begäranden för dina byggen.

$ helm search traefik
NAME          	VERSION	DESCRIPTION
stable/traefik	1.3.0  	A Traefik based Kubernetes ingress controller w...

$ helm install stable/traefik --name ingress

Nu ställer du in en bevakning på ingress-kontrollanten för att fånga det externa IP-värdet när det distribueras. Det är den här IP-adressen som mappas till din distributionsdomän i nästa avsnitt.

$ kubectl get svc -w
NAME                          CLUSTER-IP     EXTERNAL-IP     PORT(S)                      AGE
ingress-traefik               10.0.248.104   13.64.108.240   80:31046/TCP,443:32556/TCP   1h
kubernetes                    10.0.0.1       <none>          443/TCP                      7h

I det här fallet är den externa IP-adressen för distributionsdomänen 13.64.108.240. Nu kan du mappa din domän till den här IP-adressen.

Mappa ingress-IP-adressen till en anpassad underdomän

Draft skapar en version för varje Helm-diagram som skapas (varje program du arbetar med). Var och en får ett genererat namn som används av utkast som underdomän ovanpå den rotdistributionsdomän som du kontrollerar. (I det här exemplet använder squillace.io vi som distributionsdomän.) Om du vill aktivera det här underdomänbeteendet måste du skapa en A-post för '*.draft' i dns-posterna för distributionsdomänen, så att varje genererad underdomän dirigeras till Kubernetes-klustrets ingresskontrollant.

Din domänleverantör har ett eget sätt att tilldela DNS-servrar. Gör så här om du vill delegera dina DNS-servrar till Azure DNS:

  1. Skapa en resursgrupp för din zon.

    az group create --name squillace.io --location eastus
    {
      "id": "/subscriptions/<guid>/resourceGroups/squillace.io",
      "location": "eastus",
      "managedBy": null,
      "name": "zones",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null
    }
    
  2. Skapa en DNS-zon för din domän. Använd kommandot az network dns zone create för att erhålla namnservrar för att delegera DNS-kontroll till Azure DNS för din domän.

    az network dns zone create --resource-group squillace.io --name squillace.io
    {
      "etag": "<guid>",
      "id": "/subscriptions/<guid>/resourceGroups/zones/providers/Microsoft.Network/dnszones/squillace.io",
      "location": "global",
      "maxNumberOfRecordSets": 5000,
      "name": "squillace.io",
      "nameServers": [
        "ns1-09.azure-dns.com.",
        "ns2-09.azure-dns.net.",
        "ns3-09.azure-dns.org.",
        "ns4-09.azure-dns.info."
      ],
      "numberOfRecordSets": 2,
      "resourceGroup": "squillace.io",
      "tags": {},
      "type": "Microsoft.Network/dnszones"
    }
    
  3. Lägg till DNS-servrarna du får i domänleverantören för din distributionsdomän så att du kan använda Azure DNS för att peka om domänen som du vill. Hur du gör detta varierar beroende på domän. delegera dina domännamnservrar till Azure DNS innehåller en del av den information som du bör känna till.

  4. När domänen har delegerats till Azure DNS skapar du en postuppsättningspost för A för din distributionsdomänmappning till ingress IP-adressen från steg 2 i föregående avsnitt.

    az network dns record-set a add-record --ipv4-address 13.64.108.240 --record-set-name '*.draft' -g squillace.io -z squillace.io
    

    Utdata ser ut ungefär så här:

    {
     "arecords": [
       {
         "ipv4Address": "13.64.108.240"
       }
     ],
     "etag": "<guid>",
     "id": "/subscriptions/<guid>/resourceGroups/squillace.io/providers/Microsoft.Network/dnszones/squillace.io/A/*",
     "metadata": null,
     "name": "*.draft",
     "resourceGroup": "squillace.io",
     "ttl": 3600,
     "type": "Microsoft.Network/dnszones/A"
    }
    
  5. Installera om utkast

    1. Ta bort utkast från klustret genom att helm delete --purge draftskriva .
    2. Installera om utkast med samma draft-init kommando, men med alternativet --ingress-enabled :
      draft init --ingress-enabled
      
      Svara på anvisningarna som du gjorde första gången ovan. Du har dock ytterligare en fråga att svara på med hjälp av den fullständiga domänsökväg som du konfigurerade med Azure DNS.
  6. Ange din toppnivådomän för inkommande (t.ex. draft.example.com): draft.squillace.io

  7. När du anropar draft up den här gången kan du se ditt program (eller curl det) på url:en för formuläret <appname>.draft.<domain>.<top-level-domain>. I det här exemplet . http://handy-labradoodle.draft.squillace.io

    curl -s http://handy-labradoodle.draft.squillace.io
    Hello World, I'm Java!
    

Nästa steg

Nu när du har ett Kubernetes ACS-kluster kan du undersöka med hjälp av Azure Container Registry för att skapa flera olika distributioner för det här scenariot. Du kan till exempel skapa en DNS-postuppsättning för draft.basedomain.toplevel som styr saker från en djupare underdomän för specifika ACS-distributioner.