(AFGESCHAFT) Concept gebruiken met Azure Container Service en Azure Container Registry om een toepassing te bouwen en implementeren in Kubernetes

Tip

Zie Concept gebruiken met Azure Kubernetes Service (AKS) voor de bijgewerkte versie die gebruikmaakt van Azure Kubernetes Service.

Waarschuwing

Azure Container Service (ACS) wordt afgeschaft. Er worden geen nieuwe functies of functionaliteit meer aan ACS toegevoegd. Alles van de API's, portal, CLI-opdrachten en documentatie is gemarkeerd als afgeschaft.

In 2017 hebben we Azure Kubernetes Service (AKS) geïntroduceerd om het beheer en de implementatie van en de werkzaamheden met Kubernetes te vereenvoudigen. Als u de Kubernetes-orchestrator gebruikt, verzoeken we u voor 31 januari 2020 naar AKS te migreren. Raadpleeg migreren naar Azure Kubernetes Service voordat u begint.

Zie voor meer informatie de aankondiging over de afschaffing van Azure Container Service op Azure.com.

Draft is een nieuw open-source hulpprogramma waarmee u eenvoudig containertoepassingen kunt ontwikkelen en ze kunt implementeren in Kubernetes-clusters. U hoeft hiervoor niet veel te weten over Docker en Kubernetes (u hoeft ze zelfs niet eens te installeren!). Als u een hulpprogramma als Draft gebruikt, kunnen u en uw team zich richten op het bouwen van de toepassing met Kubernetes en hoeft er minder aandacht te worden besteed aan de infrastructuur.

U kunt Draft gebruiken met alle Docker-installatiekopieregisters en alle Kubernetes-clusters, ook de lokale. In deze zelfstudie ziet u hoe u ACS gebruikt met Kubernetes en ACR om een live maar veilige pijplijn voor ontwikkelaars te maken in Kubernetes met behulp van Draft en hoe u Azure DNS gebruikt om die ontwikkelaarspijplijn beschikbaar te maken voor anderen om te zien in een domein.

Een Azure Container Registry maken

U kunt eenvoudig een nieuw Azure Container Registry maken. De stappen daarvoor zijn als volgt:

  1. Maak een Azure-resourcegroep om uw ACR-register en het Kubernetes-cluster in ACS te beheren.

    az group create --name draft --location eastus
    
  2. Maak een ACR-installatiekopieënregister met az acr create en zorg ervoor dat de --admin-enabled optie is ingesteld op true.

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

Een Azure Container Service maken met Kubernetes

U bent er nu klaar voor om az acs create te gebruiken voor het maken van een ACS-cluster met Kubernetes als de --orchestrator-type-waarde.

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

Notitie

Kubernetes is niet het standaardorchestratortype, dus gebruik de --orchestrator-type kubernetes-switch.

Wanneer dit is gelukt, ziet de uitvoer er als volgt uit.

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"
}

Wanneer u een cluster hebt, kunt u de referenties importeren met de opdracht az acs kubernetes get-credentials. U hebt nu een lokaal configuratiebestand voor uw cluster. Dit bestand hebben Helm en Draft nodig om werk te verrichten.

Draft installeren en configureren

  1. Download concept voor uw omgeving op https://github.com/Azure/draft/releases en installeer deze in uw PATH zodat de opdracht kan worden gebruikt.

  2. Download Helm voor uw omgeving https://github.com/kubernetes/helm/releases en installeer deze in uw PATH zodat de opdracht kan worden gebruikt.

  3. Configureer Draft om uw eigen register te gebruiken en om subdomeinen te maken voor elk Helm-diagram dat wordt gemaakt. U hebt het volgende nodig voor het configureren van Draft:

    • de naam van uw Azure Container Registry (in dit voorbeeld is dat draftacsdemo)
    • de registersleutel of het wachtwoord van az acr credential show -n <registry name> --output tsv --query "passwords[0].value".

    Aanroepen draft init en het configuratieproces vraagt u om de bovenstaande waarden. Houd er rekening mee dat de URL-indeling voor de register-URL de registernaam is (in dit voorbeeld draftacsdemo) plus .azurecr.io. Uw gebruikersnaam is de registernaam zelf. De eerste keer dat u het proces uitvoert, ziet het er ongeveer als volgt uit.

     $ 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!
    

U kunt nu een toepassing implementeren.

Een toepassing bouwen en implementeren

In de Draft-opslagplaats staan zes eenvoudige voorbeeldtoepassingen. Kloon de opslagplaats en laten we het Java-voorbeeld gebruiken. Ga naar de voorbeelden/java-map en typ draft create om de toepassing te bouwen. De toepassing zou er als volgt moeten uitzien.

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

De uitvoer bevat een Dockerfile en een Helm-diagram. Typ draft up om te bouwen en implementeren. De uitvoer is uitgebreid, maar moet eruitzien als in het volgende voorbeeld.

$ 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

Uw toepassing veilig weergeven

Uw container wordt nu uitgevoerd in ACS. Als u deze wilt weergeven, gebruikt u de draft connect opdracht, waarmee een beveiligde verbinding met het IP-adres van het cluster wordt gemaakt met een specifieke poort voor uw toepassing, zodat u deze lokaal kunt bekijken. Als dit lukt, zoekt u de URL om verbinding te maken met uw app op de eerste regel na de indicator GESLAAGD .

Notitie

Als u een bericht ontvangt waarin wordt aangegeven dat er geen pods gereed waren, wacht u even en probeert u het opnieuw, of kunt u zien hoe de pods klaar zijn en kubectl get pods -w vervolgens opnieuw proberen wanneer ze dat doen.

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

In het voorgaande voorbeeld kunt curl -s https://localhost:46143 u typen om het antwoord te ontvangen. Hello World, I'm Java! Wanneer u Ctrl+ of CMD+C (afhankelijk van uw besturingssysteemomgeving) gebruikt, wordt de beveiligde tunnel verbroken en kunt u doorgaan met herhalen.

Uw toepassing delen door een implementatiedomein te configureren met Azure DNS

U hebt de herhalingslus voor ontwikkelaars al uitgevoerd die in de voorgaande stappen door Draft wordt gemaakt. U kunt uw toepassing echter via internet delen door:

  1. Een toegangsbeheerobject installeren in uw ACS-cluster (om een openbaar IP-adres op te geven waarop de app moet worden weergegeven)
  2. Uw aangepaste domein delegeren aan Azure DNS en uw domein toewijzen aan het IP-adres dat ACS toewijst aan uw ingangscontroller

Helm gebruiken om de ingangscontroller te installeren.

Gebruik Helm om binnenkomende aanvragen voor uw builds te zoeken en te installeren stable/traefik, een ingangscontroller.

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

$ helm install stable/traefik --name ingress

Stel nu een controle in voor de ingress-controller om de externe IP-waarde vast te leggen bij de implementatie. Dit IP-adres wordt toegewezen aan het implementatiedomein in de volgende sectie.

$ 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

In dit geval is het externe IP-adres voor het implementatiedomein 13.64.108.240. U kunt uw domein nu toewijzen aan dat IP-adres.

Het ip-adres voor inkomend verkeer toewijzen aan een aangepast subdomein

Draft maakt een release voor elke Helm-grafiek die er wordt gemaakt en elke toepassing waar u aan werkt. Elke naam krijgt een gegenereerde naam die door concept wordt gebruikt als subdomein boven op het hoofdimplementatiedomein dat u bepaalt. (In dit voorbeeld gebruiken squillace.io we het implementatiedomein.) Als u dit subdomeingedrag wilt inschakelen, moet u een A-record maken voor '*.draft' uw DNS-vermeldingen voor uw implementatiedomein, zodat elk gegenereerd subdomein wordt gerouteerd naar de ingangscontroller van het Kubernetes-cluster.

Elke eigen domeinprovider wijst op zijn eigen manier DNS-servers toe. Als u uw domeinnaamservers wilt overdragen aan Azure DNS, voert u de volgende stappen uit:

  1. Maak een resourcegroep voor uw zone.

    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. Maak een DNS-zone voor uw domein. Gebruik de opdracht az network dns zone create om de naamservers te verkrijgen voor het delegeren van DNS-controle over uw domein aan Azure.

    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. Voeg de DNS-servers die u ontvangt toe aan de domeinprovider van uw implementatiedomein. Op die manier kunt u Azure DNS gebruiken om uw domein naar wens opnieuw toe te wijzen. De manier waarop u dit doet, verschilt per domein; uw domeinnaamservers delegeren aan Azure DNS bevat enkele van de details die u moet weten.

  4. Zodra uw domein is gedelegeerd aan Azure DNS, maakt u een A-recordsetvermelding voor de toewijzing van uw implementatiedomein aan het ingress IP-adres uit stap 2 van de vorige sectie.

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

    De uitvoer ziet er ongeveer zo uit:

    {
     "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. Concept opnieuw installeren

    1. Verwijder concept uit het cluster door te typen helm delete --purge draft.
    2. Installeer concept opnieuw met dezelfde draft-init opdracht, maar met de --ingress-enabled optie:
      draft init --ingress-enabled
      
      Reageer op de aanwijzingen zoals u de eerste keer hebt gedaan, hierboven. U hebt echter nog een vraag om op te reageren met behulp van het volledige domeinpad dat u hebt geconfigureerd met de Azure DNS.
  6. Voer uw domein op het hoogste niveau in voor inkomend verkeer (bijvoorbeeld draft.example.com): draft.squillace.io

  7. Wanneer u deze keer belt draft up , kunt u uw toepassing (of curl deze) zien op de URL van het formulier <appname>.draft.<domain>.<top-level-domain>. In dit voorbeeld. http://handy-labradoodle.draft.squillace.io

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

Volgende stappen

Nu u beschikt over een ACS Kubernetes-cluster, kunt u onderzoek uitvoeren met Azure Container Registry om meer en andere implementaties te maken voor dit scenario. U kunt bijvoorbeeld de domein-DNS-recordset draft.basedomain.toplevel maken om processen van specifieke ACS-implementaties vanuit een dieper gelegen subdomein te controleren.