Aracılığıyla paylaş


Azure Container Registry ve AKS Arc kullanarak özel kapsayıcı kayıt defterinden şirket içi Kubernetes'e dağıtma

Şunlar için geçerlidir: Azure Stack HCI, sürüm 23H2

Bu makalede, AKS Arc dağıtımlarında kendi veri merkezinizde çalıştırabileceğiniz Azure Container Registry kullanarak özel bir kapsayıcı kayıt defterinden kapsayıcı görüntülerinin nasıl dağıtılacağı açıklanır. AKS tarafından barındırılan şirket içi Kubernetes kümenize dağıtım gerçekleştirirsiniz. Azure Container Registry, her tür kapsayıcı dağıtımı için özel bir kayıt defterinde kapsayıcı görüntüleri ve yapıtlar oluşturarak bunları depolayıp yönetmenize imkan sağlar.

Makalede, Azure'da özel kapsayıcı kayıt defteri oluşturma ve kapsayıcı görüntünüzü özel kapsayıcı kayıt defterine gönderme işlemleri açıklanır. Daha sonra özel kayıt defterinden AKS Arc'ta barındırılan şirket içi Kubernetes kümenize dağıtım yapabilirsiniz.

Azure Container Registry hakkında daha fazla bilgi için Azure Container Registry belgelerine bakın.

Önkoşullar

Aşağıdaki gereksinimlere sahip olduğunuzu doğrulayın:

Azure'da özel kapsayıcı kayıt defteri oluşturma

Kapsayıcı kayıt defteri oluşturmak için bir kaynak grubuyla başlayın. Azure kaynak grubu, Azure kaynaklarının dağıtıldığı ve yönetildiği bir mantıksal kapsayıcıdır. az group create komutuyla bir kaynak grubu oluşturun. Aşağıdaki örnek eastus bölgesinde bir kaynak grubu oluşturur:

az group create --name <RESOURCE_GROUP_NAME> --location eastus

az acr create komutuyla bir Container Registry örneği oluşturun ve kendi kayıt defteri adınızı sağlayın. Kayıt defteri adı Azure içinde benzersiz olmalı ve 5 ile 50 arası alfasayısal karakter içermelidir. Bu makalenin geri kalanında kapsayıcı <acrName> kayıt defteri adı için yer tutucu olarak kullanılır, ancak kendi benzersiz kayıt defteri adınızı sağlayabilirsiniz. Temel SKU, depolama ve aktarım hızı dengesi sağlayan geliştirme amacıyla maliyet açısından iyileştirilmiş bir giriş noktasıdır:

az acr create --resource-group <RESOURCE_GROUP_NAME> --name <REGISTRY_NAME> --sku Basic

Kapsayıcı kayıt defterinizi oluşturduktan sonra kubernetes'ten kapsayıcı kayıt defterinize erişebilmeniz için aşağıdaki komutu kullanarak bir hizmet sorumlusu oluşturun:

az ad sp create-for-rbac /
--scopes /subscriptions/<SUBSCRIPTION_ID>/resourcegroups/<RG_NAME>/providers/Microsoft.ContainerRegistry/registries/<REGISTRY_NAME> /
--role Contributor /
--name <SERVICE_PRINCIPAL_NAME>

Azure Container Registry üç erişim rolünü destekler. Katkıda Bulunan rolü en yaygın olarak uygulama geliştiricileri tarafından kullanılır. Ancak gerçek dünya senaryolarında, gereken erişim türüne bağlı olarak birden çok hizmet sorumlusu oluşturmanız gerekebilir:

  • Katkıda Bulunan: Bu rol, depoya gönderme ve çekme erişimi sunar.
  • Okuyucu: Bu rol yalnızca depoya çekme erişimine izin verir.
  • Sahip: Bu rol, depoya gönderme ve çekme erişimine ek olarak diğer kullanıcılara rol atamanızı sağlar.

Önceki komut aşağıdaki metne benzer bir çıkış üretmelidir:

{
"appId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"displayName": "akshci-service-principal",
"name": "http://akshci-service-principal",
"password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"tenant": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}

Hizmet sorumlusu başarıyla oluşturulduktan sonra, dağıtımınızda daha sonra kullanmak üzere appId ve parolayı güvenli bir konuma kopyalayın.

Hizmet sorumluları veya Azure Container Registry ile çalışma hakkında daha fazla bilgi için bkz. Hizmet sorumlularıyla Azure Container Registry kimlik doğrulaması.

Özel kapsayıcı kayıt defterinde oturum açın

Container Registry örneğini kullanmak için önce oturum açmanız gerekir. Oturum açmak için Azure CLI veya Docker CLI kullanabilirsiniz.

1. Seçenek: Azure CLI'dan oturum açma

az acr sign in komutunu kullanın ve önceki adımda kapsayıcı kayıt defterine atanan benzersiz adı sağlayın:

az acr login --name <REGISTRY_NAME>

2. Seçenek: Docker CLI'dan oturum açma

Kapsayıcı kayıt defterinize erişmek üzere Docker CLI'yı kullanmak için bash veya PowerShell terminaline aşağıdaki komutu yazın:

docker login <REGISTRY_NAME>.azurecr.io -u <appId> -p <password>

Her iki seçenekte de komut tamamlandığında bir oturum açma başarılı iletisi döndürmelidir.

Kapsayıcı kayıt defterine görüntü gönderme

Başarıyla oturum açtıktan sonra görüntüyü Container Registry'ye göndermeye başlayabilirsiniz. İlk olarak docker images komutunu çalıştırarak yerel makinenizdeki görüntülerin listesini görüntüleyin:

REPOSITORY TAG IMAGE ID CREATED SIZE

mcr.microsoft.com/azure-functions/dotnet 3.0 9f8ad1bdee67 5 months ago
540MB

poemfinder-app latest 2d9bef425603 6 months ago 208MB

Başlamak için docker tag komutunu kullanarak görüntüyü etiketleyin ve ardından docker push kullanarak kapsayıcı kayıt defterine gönderin:

docker tag poemfinder-app <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0

Docker images komutunu yeniden çalıştırarak görüntünün doğru etiketlendiğini doğrulayın. Onayladıktan sonra aşağıdaki gibi komutunu çalıştırarak docker push kapsayıcı kayıt defterine gönderin:

docker push <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0

Görüntünün kapsayıcı kayıt defterine başarıyla gönderildiğini onaylamak için aşağıdaki komutu çalıştırın:

az acr repository list --name <REGISTRY_NAME>.azurecr.io --output table

Kapsayıcı kayıt defterinden AKS'ye görüntü dağıtma

Kapsayıcı görüntünüzü kapsayıcı kayıt defterinden Kubernetes kümenize dağıtmak için, kayıt defteri kimlik bilgilerinizi depolamak üzere Kubernetes Gizli Dizileri oluşturun. Kubernetes, kayıt defterinizde kimlik doğrulaması yapmak için gereken bilgileri depolamak için bir görüntü çekme gizli dizisi kullanır. Bir kapsayıcı kayıt defteri için çekme gizli dizisi oluşturmak için hizmet sorumlusu kimliğini, parolayı ve kayıt defteri URL'sini sağlarsınız:

kubectl create secret docker-registry <secret-name> \
--namespace <namespace> \
--docker-server=<REGISTRY_NAME>.azurecr.io \
--docker-username=<appId> \
--docker-password=<password>

Aşağıdaki tabloda giriş parametreleri açıklanmaktadır:

Değer Açıklama
secret-name Görüntünün adı gizli dizi çeker; örneğin, acr-secret.
namespace Gizli dizinin yerleştirildiği Kubernetes ad alanı. Yalnızca gizli diziyi varsayılan ad alanı dışında bir ad alanına yerleştirmek istiyorsanız gereklidir.
<REGISTRY_NAME> Kapsayıcı kayıt defterinizin adı. Örneğin, myregistry. --docker-server, kayıt defteri oturum açma sunucusunun tam adıdır.
appId Kubernetes'in kayıt defterinize erişmek için kullandığı hizmet sorumlusunun kimliği.
password Hizmet sorumlusu parolası.

Görüntü çekme gizli dizisini oluşturduktan sonra Kubernetes podları ve dağıtımları oluşturmak için kullanabilirsiniz. Aşağıdaki örnekte gösterildiği gibi dağıtım dosyasında altındaki gizli dizinin imagePullSecrets adını belirtin:

apiVersion: v1
kind: Pod
metadata:
 name: poemfinder-app
 namespace: mydemoapps
spec:
 containers:
  - name: poemfinder-app
    image: <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
    imagePullPolicy: IfNotPresent
 imagePullSecrets:
   - name: acr-secret

Bu örnekte, poemfinder-app:v1.0 kapsayıcı kayıt defterinden çekecek görüntünün adı ve acr-secret kayıt defterine erişmek için oluşturduğunuz çekme gizli dizisinin adıdır. Pod'u dağıttığınızda, görüntü kümede zaten yoksa Kubernetes görüntüyü kayıt defterinizden otomatik olarak çeker.

Yukarıdaki pod yapılandırmasını pod-example.yaml gibi bir dosyaya kaydedebilir ve ardından kubernetes'e aşağıdaki gibi dağıtabilirsiniz:

kubectl create -f pod-example.yaml

Pod'un kapsayıcı kayıt defterinden kapsayıcı görüntüsü kullanılarak başarıyla oluşturulduğunu onaylamak için kubectl describe pod <POD_NAME> komutunu çalıştırın. Bu, pod oluşturmak için kullanılan kapsayıcı görüntüsünü göstermelidir.

Sonraki adımlar