(ZASTARALÉ) Použití konceptu se službou Azure Container Service a Azure Container Registry k sestavení a nasazení aplikace do Kubernetes

Tip

Aktualizovaná verze tohoto článku, která používá Azure Kubernetes Service, najdete v tématu Použití konceptu s Azure Kubernetes Service (AKS).

Upozornění

Služba Azure Container Service (ACS) je zastaralá. Do služby ACS se nepřidávají žádné nové funkce ani funkce. Všechna rozhraní API, prostředí portálu, příkazy rozhraní příkazového řádku a dokumentace jsou označená jako zastaralá.

V roce 2017 jsme zavedli Azure Kubernetes Service (AKS) pro zjednodušení správy, nasazení a operací Kubernetes. Pokud používáte orchestrátor Kubernetes, proveďte migraci do AKS do 31. ledna 2020. Pokud chcete začít, podívejte se na migraci na Azure Kubernetes Service.

Další informace najdete v oznámení o vyřazení služby Azure Container Service v Azure.com.

Draft je nový opensourcový nástroj usnadňující vývoj kontejnerových aplikací a jejich nasazení do clusterů Kubernetes, který nevyžaduje téměř žádné znalosti Dockeru ani Kubernetes – dokonce je nemusíte ani instalovat. Používání nástrojů, jako je Draft, umožňuje vám a vašim týmům zaměřit se na vytváření aplikací pomocí Kubernetes, aniž byste se museli tolik zabývat infrastrukturou.

Draft můžete používat s libovolným registrem imagí Dockeru a jakýmkoli clusterem Kubernetes, a to i místně. V tomto kurzu se dozvíte, jak pomocí služby ACS s Kubernetes a ACR vytvořit živý, ale zabezpečený vývojářský kanál v Kubernetes pomocí konceptu a jak pomocí Azure DNS zpřístupnit tento kanál pro vývojáře, aby ho ostatní viděli v doméně.

Vytvoření služby Azure Container Registry

Můžete snadno vytvořit novou službu Azure Container Registry, ale postup je následující:

  1. Vytvořte skupinu prostředků Azure pro správu registru ACR a clusteru Kubernetes v ACS.

    az group create --name draft --location eastus
    
  2. Vytvořte registr image ACR pomocí příkazu az acr create a ujistěte se, že --admin-enabled je tato možnost nastavená na true.

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

Vytvoření služby Azure Container Service pomocí Kubernetes

Nyní jste připraveni použít příkaz az acs create k vytvoření clusteru ACS s použitím Kubernetes jako hodnoty --orchestrator-type.

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

Poznámka

Vzhledem k tomu, že Kubernetes není výchozím typem orchestrátoru, nezapomeňte použít přepínač --orchestrator-type kubernetes.

Výstup po úspěšném provedení je podobný následujícímu.

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

Když teď máte cluster, můžete importovat přihlašovací údaje pomocí příkazu az acs kubernetes get-credentials. Nyní máte místní konfigurační soubor pro váš cluster, který pro svou práci potřebuje Helm a Draft.

Instalace a konfigurace nástroje Draft

  1. Stáhněte si koncept prostředí a https://github.com/Azure/draft/releases nainstalujte ho do cesty, aby se příkaz mohl použít.

  2. Stáhněte helm pro vaše prostředí https://github.com/kubernetes/helm/releases a nainstalujte ho do cesty, aby se příkaz mohl použít.

  3. Nakonfigurujte Draft pro použití vašeho registru a vytvoření subdomény pro každý diagram Helmu, který vytvoří. Ke konfiguraci nástroje Draft potřebujete:

    • Název služby Azure Container Registry (v tomto příkladu draftacsdemo).
    • Klíč registru nebo heslo získané příkazem az acr credential show -n <registry name> --output tsv --query "passwords[0].value".

    Volání draft init a proces konfigurace vás vyzve k zadání výše uvedených hodnot. Všimněte si, že formát adresy URL pro adresu URL registru je název registru (v tomto příkladu draftacsdemo) plus .azurecr.io. Vaše uživatelské jméno je vlastní název registru. Proces při prvním spuštění vypadá asi takto:

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

Nyní jste připraveni nasadit aplikaci.

Sestavení a nasazení aplikace

V úložišti Draft najdete šest jednoduchých ukázkových aplikací. Naklonujte úložiště a pojďme použít příklad Javy. Přejděte do adresáře příklady nebo javy a zadejte draft create , aby se aplikace sestavuje. Mělo by to vypadat asi jako v následujícím příkladu.

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

Výstup zahrnujte soubor Dockerfile a digram Helmu. K sestavení a nasazení stačí zadat draft up. Výstup je rozsáhlý, ale měl by vypadat jako v následujícím příkladu.

$ 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

Bezpečné zobrazení aplikace

Váš kontejner je teď spuštěný v ACS. Pokud ho chcete zobrazit, použijte draft connect příkaz, který vytvoří zabezpečené připojení k IP adrese clusteru s konkrétním portem pro vaši aplikaci, abyste ho mohli zobrazit místně. V případě úspěchu vyhledejte adresu URL pro připojení k aplikaci na prvním řádku za indikátorem SUCCESS .

Poznámka

Pokud se zobrazí zpráva s oznámením, že žádné pody nebyly připravené, počkejte chvíli a zkuste to znovu, nebo můžete sledovat, jak se pody připraví kubectl get pods -w , a potom zkuste to znovu.

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

V předchozím příkladu můžete zadat curl -s https://localhost:46143 odpověď. Hello World, I'm Java! Když stisknete CTRL+ nebo CMD+C (v závislosti na vašem prostředí operačního systému), zabezpečený tunel se roztrhá a můžete pokračovat v iteraci.

Sdílení aplikace konfigurací domény nasazení pomocí Azure DNS

Už jste provedli smyčku iterace pro vývojáře, kterou Koncept vytvoří v předchozích krocích. Aplikaci ale můžete sdílet přes internet:

  1. Instalace příchozího přenosu dat do clusteru služby ACS (poskytnutí veřejné IP adresy, na které se má aplikace zobrazit)
  2. Delegování vlastní domény na Azure DNS a mapování domény na IP adresu ACS přiřadí řadiči příchozího přenosu dat

Pomocí helmu nainstalujte kontroler příchozího přenosu dat.

Pomocí helmu vyhledejte a nainstalujte stable/traefikkontroler příchozího přenosu dat a povolte příchozí požadavky pro vaše buildy.

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

$ helm install stable/traefik --name ingress

Nyní nastavte na kontroleru ingress sledování, aby při nasazení zachytil hodnotu externí IP adresy. Tato IP adresa bude v další části namapovaná na vaši doménu nasazení.

$ 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

V tomto případě je externí IP adresa pro doménu nasazení 13.64.108.240. Nyní můžete namapovat doménu na tuto IP adresu.

Mapování IP adresy příchozího přenosu dat na vlastní subdoménu

Draft vytvoří vydanou verzi pro každý diagram Helmu, který vytvoří – pro každou aplikaci, na které pracujete. Každý z nich získá vygenerovaný název, který používá koncept jako subdoménu nad kořenovou doménou nasazení , kterou řídíte. (V tomto příkladu používáme squillace.io jako doménu nasazení.) Chcete-li povolit toto chování subdomény, musíte vytvořit záznam A pro '*.draft' položky DNS pro vaši doménu nasazení, aby se každá vygenerovaná subdoména směrovala do kontroleru příchozího přenosu dat clusteru Kubernetes.

Váš poskytovatel domény má vlastní způsob přiřazování serverů DNS. Pokud chcete delegovat názvové servery vaší domény do Azure DNS, postupujte následovně:

  1. Vytvořte skupinu prostředků pro vaši zónu DNS.

    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. Vytvořte zónu DNS pro vaši doménu. Pomocí příkazu az network dns zone create získejte názvové servery pro delegování řízení DNS do Azure DNS pro vaši doménu.

    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. Přidejte získané servery DNS k poskytovateli vaší domény nasazení – to vám umožní použít Azure DNS ke směrování vaší domény, jak budete chtít. Způsob, jakým to uděláte, se liší podle poskytování domény; delegujte názvové servery domény do Azure DNS obsahuje některé podrobnosti, které byste měli znát.

  4. Po delegování domény do Azure DNS vytvořte záznam sady záznamů pro mapování domény nasazení na ingress IP adresu z kroku 2 předchozí části.

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

    Výstup by měl vypadat asi takto:

    {
     "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. Přeinstalace konceptu

    1. Odeberte koncept z clusteru zadáním helm delete --purge draft.
    2. Přeinstalujte koncept pomocí stejného draft-init příkazu, ale s --ingress-enabled možností:
      draft init --ingress-enabled
      
      Odpovězte na výzvy, jak jste to udělali poprvé výše. Máte ale ještě jednu otázku, na kterou byste mohli odpovědět, pomocí úplné cesty k doméně, kterou jste nakonfigurovali pomocí Azure DNS.
  6. Zadejte doménu nejvyšší úrovně pro příchozí přenos dat (např. draft.example.com): draft.squillace.io

  7. Při volání draft up tentokrát uvidíte aplikaci (nebo curl ji) na adrese URL formuláře <appname>.draft.<domain>.<top-level-domain>. V případě tohoto příkladu . http://handy-labradoodle.draft.squillace.io

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

Další kroky

Když teď máte cluster ACS Kubernetes, můžete prozkoumat používání služby Azure Container Registry, abyste mohli vytvářet další a jiná nasazení tohoto scénáře. Můžete například vytvořit sadu záznamů DNS domény draft.základní_doména.doména_nejvyšší_úrovně, která bude pro specifická nasazení ACS řídit vše pro subdoménu na nižší úrovni.