(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í:
Vytvořte skupinu prostředků Azure pro správu registru ACR a clusteru Kubernetes v ACS.
az group create --name draft --location eastus
Vytvořte registr image ACR pomocí příkazu az acr create a ujistěte se, že
--admin-enabled
je tato možnost nastavená natrue
.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
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.
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.
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říkladudraftacsdemo
) 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!
- Název služby Azure Container Registry (v tomto příkladu
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:
- Instalace příchozího přenosu dat do clusteru služby ACS (poskytnutí veřejné IP adresy, na které se má aplikace zobrazit)
- 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/traefik
kontroler 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ě:
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 }
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" }
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.
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" }
Přeinstalace konceptu
- Odeberte koncept z clusteru zadáním
helm delete --purge draft
. - Přeinstalujte koncept pomocí stejného
draft-init
příkazu, ale s--ingress-enabled
možností:
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.draft init --ingress-enabled
- Odeberte koncept z clusteru zadáním
Zadejte doménu nejvyšší úrovně pro příchozí přenos dat (např. draft.example.com): draft.squillace.io
Při volání
draft up
tentokrát uvidíte aplikaci (nebocurl
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.