(KULLANıM DıŞı) Bir uygulamayı derlemek ve Kubernetes'e dağıtmak için Azure Container Service ve Azure Container Registry ile Taslak kullanma

İpucu

Azure Kubernetes Service kullanan bu makalenin güncelleştirilmiş sürümü için bkz. Azure Kubernetes Service (AKS) ile Taslak Kullanma.

Uyarı

Azure Container Service (ACS) kullanım dışı bırakılıyor. ACS'ye yeni özellik veya işlevsellik eklenmiyor. Tüm API'ler, portal deneyimi, CLI komutları ve belgeleri kullanım dışı olarak işaretlenir.

2017'de Kubernetes yönetimi, dağıtımı ve işlemlerini basitleştirmek için Azure Kubernetes Service (AKS) kullanıma sunulmuştur. Kubernetes düzenleyicisini kullanıyorsanız lütfen 31 Ocak 2020'ye kadar AKS'ye geçin. Başlamak için bkz. Azure Kubernetes Service geçiş.

Daha fazla bilgi için bkz. Azure.com'da Azure Container Service'in kullanımdan kaldırılması duyurusu.

Draft, Docker ve Kubernetes hakkında pek fazla bilginiz olmadan, hatta bunları yüklemeden kapsayıcı tabanlı uygulamalar geliştirmeyi ve bu uygulamaları Kubernetes kümelerine dağıtmayı kolaylaştıran yeni bir açık kaynak araçtır. Draft gibi araçların kullanılması, sizin ve ekiplerinizin altyapıya eskisi kadar dikkat etmesine gerek kalmadan Kubernetes ile uygulama oluşturmaya odaklanmasına imkan sağlar.

Draft’ı yerel kullanım dahil olmak üzere herhangi bir Docker görüntü kayıt defteri ve herhangi bir Kubernetes kümesiyle kullanabilirsiniz. Bu öğreticide, Draft kullanarak Kubernetes'te canlı ama güvenli bir geliştirici işlem hattı oluşturmak için Kubernetes ve ACR ile ACS'nin nasıl kullanılacağı ve azure DNS kullanarak bu geliştirici işlem hattının başkalarının etki alanında görmesi için nasıl kullanılacağı gösterilmektedir.

Azure Container Registry oluşturma

Kolayca yeni Azure Container Registry oluşturabilirsiniz, ancak adımlar aşağıdaki gibidir:

  1. ACS'de ACR kayıt defterinizi ve Kubernetes kümenizi yönetmek için bir Azure kaynak grubu oluşturun.

    az group create --name draft --location eastus
    
  2. az acr create komutunu kullanarak bir ACR görüntü kayıt defteri oluşturun ve seçeneğinin olarak trueayarlandığından --admin-enabled emin olun.

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

Kubernetes ile Azure Container Service oluşturma

Artık az acs create komutu ile --orchestrator-type değeri olarak Kubernetes’i kullanarak bir ACS kümesi oluşturmaya hazırsınız.

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

Not

Kubernetes varsayılan düzenleyici olmadığından, --orchestrator-type kubernetes anahtarını kullandığınızdan emin olun.

İşlem başarılı olursa çıktı aşağıdaki gibi görünür.

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

Artık bir kümeniz olduğuna göre, az acs kubernetes get-credentials komutunu kullanarak kimlik bilgilerini içeri aktarabilirsiniz. Artık kümeniz için yerel bir yapılandırma dosyanız vardır ve Helm ile Draft’ın işlerini yapabilmesi için bu gerekir.

Draft’ı yükleme ve yapılandırma

  1. ortamınız https://github.com/Azure/draft/releases için taslağı adresinden indirin ve komutun kullanılabilmesi için PATH'inize yükleyin.

  2. konumundaki ortamınız https://github.com/kubernetes/helm/releases için helm'i indirin ve komutun kullanılabilmesi için PATH'inize yükleyin.

  3. Draft’ı kayıt defterinizi kullanacak şekilde yapılandırın ve Draft’ın oluşturduğu her Helm grafiği için alt etki alanları oluşturun. Draft’ı yapılandırmak için şunlar gerekir:

    • Azure Container Registry adınız (bu örnekte draftacsdemo kullanılmıştır)
    • az acr credential show -n <registry name> --output tsv --query "passwords[0].value" dosyasından kayıt defteri anahtarınız veya parolanız.

    Çağrısı draft init yapılırken yapılandırma işlemi sizden yukarıdaki değerleri ister; kayıt defteri URL'sinin URL biçiminin kayıt defteri adı (bu örnekte draftacsdemo) artı .azurecr.ioolduğunu unutmayın. Kullanıcı adınız kendi başına kayıt defteri adıdır. İşlem ilk çalıştırıldığında aşağıdaki gibi görünür.

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

Artık uygulama dağıtmaya hazırsınız.

Uygulama oluşturma ve dağıtma

Draft deposunda altı basit örnek uygulama yer alır. Depoyu kopyalayın ve Java örneğini kullanalım. examples/java dizinine geçin ve uygulamayı derlemek için yazın draft create . Aşağıdaki örnekteki gibi görünmelidir.

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

Çıktı bir Docker dosyası ve Helm grafiği içerir. Derlemek ve dağıtmak için draft up yazmanız yeterlidir. Çıkış kapsamlıdır, ancak aşağıdaki örnekte olduğu gibi olmalıdır.

$ 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

Uygulamanızı güvenli bir şekilde görüntüleme

Kapsayıcınız artık ACS'de çalışıyor. Bunu görüntülemek için, yerel olarak görüntüleyebilmeniz için uygulamanız için belirli bir bağlantı noktasıyla kümenin IP'sine güvenli bir bağlantı oluşturan komutunu kullanın draft connect . Başarılı olursa, BAŞARI göstergesinden sonraki ilk satırda uygulamanıza bağlanmak için URL'yi arayın.

Not

Podların hazır olmadığını belirten bir ileti alırsanız, biraz bekleyin ve yeniden deneyin veya podların hazır kubectl get pods -w duruma gelmesini izleyebilir ve hazır olduklarında yeniden deneyebilirsiniz.

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

Yukarıdaki örnekte, yanıtını Hello World, I'm Java!almak için yazabilirsinizcurl -s https://localhost:46143. CTRL+ veya CMD+C (işletim sistemi ortamınıza bağlı olarak) kullandığınızda güvenli tünel kapatılır ve yinelemeye devam edebilirsiniz.

Azure DNS ile dağıtım etki alanı yapılandırarak uygulamanızı paylaşma

Draft'ın önceki adımlarda oluşturduğu geliştirici yineleme döngüsünü zaten gerçekleştirdiniz. Ancak, aşağıdakileri yaparak uygulamanızı İnternet üzerinden paylaşabilirsiniz:

  1. ACS kümenize giriş yükleme (uygulamanın görüntüleneceği genel IP adresini sağlamak için)
  2. Özel etki alanınızı Azure DNS'ye devretme ve etki alanınızı ACS'nin giriş denetleyicinize atadığınız IP adresine eşleme

Giriş denetleyicisini yüklemek için helm kullanın.

Derlemeleriniz için gelen istekleri etkinleştirmek üzere bir giriş denetleyicisi aramak ve yüklemek stable/traefikiçin helm kullanın.

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

$ helm install stable/traefik --name ingress

Şimdi, dış IP değeri dağıtıldığında bu değeri yakalaması için ingress denetleyicisinde bir izleme ayarlayın. Bu IP adresi, bir sonraki bölümde dağıtım etki alanınızla eşleştirilecek adrestir.

$ 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

Bu durumda, dağıtım etki alanının dış IP’si şudur: 13.64.108.240. Artık etki alanınızı bu IP ile eşleyebilirsiniz.

Giriş IP'sini özel bir alt etki alanına eşleme

Draft, oluşturduğu her Helm grafiği (üzerinde çalıştığınız her uygulama) için bir yayın oluşturur. Her biri, denetlediğiniz kök dağıtım etki alanının üzerinde bir alt etki alanı olarak taslak tarafından kullanılan oluşturulan bir ad alır. (Bu örnekte dağıtım etki alanı olarak kullanılır squillace.io .) Bu alt etki alanı davranışını etkinleştirmek için, dağıtım etki alanınız için DNS girdilerinizde için '*.draft' bir A kaydı oluşturmanız gerekir; böylece oluşturulan her alt etki alanı Kubernetes kümesinin giriş denetleyicisine yönlendirilir.

Etki alanı sağlayıcınız, DNS sunucularını atamak için kendi yöntemini kullanır; Azure DNS’yi etki alanı ad sunucularınızın temsilcisi olarak atamak için aşağıdaki adımları gerçekleştirirsiniz:

  1. Bölgeniz için bir kaynak grubu oluşturun.

    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. Etki alanınız için bir DNS bölgesi oluşturun. Etki alanınız için Azure DNS’yi DNS denetimi temsilcisi olarak atamak istiyorsanız az network dns zone create komutunu kullanarak ad sunucularını edinin.

    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. Size döndürülen DNS sunucularını, dağıtım etki alanınızın etki alanı sağlayıcısına ekleyin. Bunu yaptığınızda, Azure DNS’nizi kullanarak etki alanınızı istediğiniz yeri gösterecek şekilde ayarlayabilirsiniz. Bunu yapma yönteminiz etki alanı tarafından sunulana göre değişir; Etki alanı ad sunucularınızı Azure DNS'ye devretmek , bilmeniz gereken bazı ayrıntıları içerir.

  4. Etki alanınız Azure DNS'ye temsilci olarak atandıktan sonra, önceki bölümün 2. adımından IP'ye ingress eşlenen dağıtım etki alanınız için bir A kayıt kümesi girdisi oluşturun.

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

    Çıktı şuna benzer:

    {
     "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. Taslağı yeniden yükleme

    1. yazarak helm delete --purge draftkümeden taslak olarak alınan öğesini kaldırın.
    2. Taslağı aynı draft-init komutu kullanarak ancak şu seçenekle --ingress-enabled yeniden yükleyin:
      draft init --ingress-enabled
      
      Yukarıdaki istemlere ilk kez yaptığınız gibi yanıt verin. Ancak, Azure DNS ile yapılandırdığınız tam etki alanı yolunu kullanarak yanıtlamanız gereken bir soru daha vardır.
  6. Giriş için en üst düzey etki alanınızı girin (ör. draft.example.com): draft.squillace.io

  7. Bu kez çağırdığınızda draft up , uygulamanızı (veya curl bunu) formunun <appname>.draft.<domain>.<top-level-domain>URL'sinde görebilirsiniz. Bu örnekte, http://handy-labradoodle.draft.squillace.io.

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

Sonraki adımlar

Artık bir ACS Kubernetes kümeniz olduğuna göre, bu senaryonun daha fazla sayıda ve daha farklı dağıtımlarını oluşturmak için Azure Container Registry’yi kullanarak araştırma yapabilirsiniz. Örneğin, belirli ACS dağıtımları için ayarları daha derin bir alt etki alanından denetleyen bir draft.basedomain.toplevel etki alanı DNS kayıt kümesi oluşturabilirsiniz.