(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:
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
az acr create komutunu kullanarak bir ACR görüntü kayıt defteri oluşturun ve seçeneğinin olarak
true
ayarlandığı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
ortamınız https://github.com/Azure/draft/releases için taslağı adresinden indirin ve komutun kullanılabilmesi için PATH'inize yükleyin.
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.
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 örnektedraftacsdemo
) artı.azurecr.io
olduğ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!
- Azure Container Registry adınız (bu örnekte
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:
- ACS kümenize giriş yükleme (uygulamanın görüntüleneceği genel IP adresini sağlamak için)
- Ö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/traefik
iç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:
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 }
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" }
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.
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" }
Taslağı yeniden yükleme
- yazarak
helm delete --purge draft
kümeden taslak olarak alınan öğesini kaldırın. - Taslağı aynı
draft-init
komutu kullanarak ancak şu seçenekle--ingress-enabled
yeniden yükleyin:
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.draft init --ingress-enabled
- yazarak
Giriş için en üst düzey etki alanınızı girin (ör. draft.example.com): draft.squillace.io
Bu kez çağırdığınızda
draft up
, uygulamanızı (veyacurl
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.