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 Yerel, 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çıklanmaktadı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ğıtabilirsiniz.
Azure Container Registry hakkında daha fazla bilgi için Bkz . Azure Container Registry belgeleri.
Önkoşullar
Aşağıdaki gereksinimlere sahip olduğunuzu doğrulayın:
- Kubernetes kavramları hakkında temel bilgiler.
- Çalışır durumda olan bir AKS kümesi.
- Azure CLI yüklü
- YEREL kubectl ortamınız AKS kümenizi işaret etmek üzere yapılandırılmış.
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ında 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şebilmek 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 anında iletme 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 appId ve parolayı daha sonra dağıtımınızda kullanmak üzere 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
Docker CLI'yi kullanarak kapsayıcı kayıt defterinize erişmek 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 kapsayıcı kayıt defterine göndermek için komutunu çalıştırın docker push
:
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 için 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. Kapsayıcı kayıt defteri için çekme gizli dizisini 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:
Value | 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.