Azure Pipelines ile oluşturma ve Azure Kubernetes Service'e dağıtma
Azure DevOps Services
Azure Kubernetes Service'e (AKS) otomatik olarak dağıtmak için Azure Pipelines'ı kullanın. Azure Pipelines, Azure DevOps kullanarak sürekli tümleştirme (CI) ve sürekli teslim (CD) ile derlemenizi, test etmenizi ve dağıtmanızı sağlar.
Bu makalede, uygulamanızı sürekli olarak derleyen ve dağıtan bir işlem hattı oluşturmayı öğreneceksiniz. Dockerfile içeren bir depoda kodunuzu her değiştirdiğinizde, görüntüler Azure Container Registry'nize gönderilir ve bildirimler AKS kümenize dağıtılır.
Önkoşullar
- Etkin aboneliği olan bir Azure hesabı. Ücretsiz hesap oluşturun.
- Azure Resource Manager hizmet bağlantısı. Azure Resource Manager hizmet bağlantısı oluşturun.
- Bir GitHub hesabı. Henüz yoksa ücretsiz bir GitHub hesabı oluşturun.
Kodu alma
Örnek uygulama ve Dockerfile içeren aşağıdaki deponun çatalını oluşturun:
https://github.com/MicrosoftDocs/pipelines-javascript-docker
Azure kaynaklarını oluşturma
Azure portalında oturum açın ve sağ üst köşedeki Cloud Shell düğmesini seçin. AKS kümesi oluşturmak için Azure CLI veya PowerShell kullanın.
Kapsayıcı kayıt defteri oluşturma
# Create a resource group
az group create --name myapp-rg --location eastus
# Create a container registry
az acr create --resource-group myapp-rg --name mycontainerregistry --sku Basic
# Create a Kubernetes cluster
az aks create \
--resource-group myapp-rg \
--name myapp \
--node-count 1 \
--enable-addons monitoring \
--generate-ssh-keys
Azure Pipelines'da oturum açma
Azure Pipelines'da oturum açın. Oturum açtığınızda tarayıcınız Azure https://dev.azure.com/my-organization-name
DevOps panonuzu görüntüler.
Seçtiğiniz kuruluş içinde bir proje oluşturun. Kuruluşunuzda hiç proje yoksa Başlamak için proje oluştur ekranını görürsünüz. Aksi takdirde, panonun sağ üst köşesindeki Proje Oluştur düğmesini seçin.
İşlem hattını oluşturma
Bağlanın ve deponuzu seçin
Azure DevOps kuruluşunuzda oturum açın ve projenize gidin.
İşlem hatları'na gidin ve Yeni işlem hattı'na tıklayın.
İlk olarak kaynak kodunuzun konumu olarak GitHub'ı seçerek sihirbazın adımlarını uygulayın.
Oturum açmak için GitHub'a yönlendirilebilirsiniz. Öyleyse GitHub kimlik bilgilerinizi girin.
Depo listesini gördüğünüzde deponuzu seçin.
Azure Pipelines uygulamasını yüklemek için GitHub'a yönlendirilebilirsiniz. Öyleyse Onayla ve yükle'yi seçin.
Azure Kubernetes Service'e Dağıt'ı seçin.
İstenirse, kayıt defterinizi ve kümenizi oluşturduğunuz aboneliği seçin.
Kümeyi
myapp
seçin.Ad Alanı için Var'ı ve ardından varsayılan'ı seçin.
Kapsayıcı kayıt defterinizin adını seçin.
Görüntü adını varsayılan olarak ayarlayabilirsiniz.
Hizmet bağlantı noktasını 8080 olarak ayarlayın.
Uygulamayla ilgili gözden geçirme yapılandırmasının sonraki adımlarda otomatik olarak oluşturulan yaml işlem hattına dahil edilmesi için Çekme İstekleri için Gözden Geçirme Uygulamasını Etkinleştir onay kutusunu ayarlayın.
Doğrula ve yapılandır'ı seçin.
Azure Pipelines işlem hattınızı oluştururken işlem şunları yapacaktır:
İşlem hattınızın kapsayıcı kayıt defterinize görüntü göndermesini sağlamak için bir Docker kayıt defteri hizmeti bağlantısı oluşturun.
Ortamda bir ortam ve Kubernetes kaynağı oluşturun. RBAC özellikli bir kümede, oluşturulan Kubernetes kaynağı kümede örtük olarak ServiceAccount ve RoleBinding nesneleri oluşturur, böylece oluşturulan ServiceAccount seçilen ad alanı dışında işlem gerçekleştiremez.
İşlem hattınızı tanımlayan bir azure-pipelines.yml dosyası oluşturun.
Kubernetes bildirim dosyaları oluşturun. Bu dosyalar, yaptığınız seçimlere göre deployment.yml ve service.yml şablonlarının nemlendirilmesiyle oluşturulur. Hazır olduğunuzda Kaydet ve çalıştır'ı seçin.
Kaydet ve çalıştır'ı seçin.
Commit iletisini Depomuza işlem hattı ekle gibi bir şekilde değiştirebilirsiniz. Hazır olduğunuzda Kaydet ve çalıştır'ı seçerek yeni işlem hattını deponuza işleyin ve ardından yeni işlem hattınızın ilk çalıştırmasına başlayın!
Uygulama dağıtımınıza bakın
İşlem hattınız çalışırken derleme aşamanızı izleyin ve ardından dağıtım aşamanız maviden (çalışıyor) yeşile (tamamlandı) geçin. İşlem hattınızı iş başında izlemek için aşamaları ve işleri seçebilirsiniz.
Not
Microsoft tarafından barındırılan bir aracı kullanıyorsanız, Güvenlik duvarınıza Microsoft tarafından barındırılan aracının IP aralığını eklemeniz gerekir. Her Çarşamba yayımlanan haftalık JSON dosyasından haftalık IP aralıkları listesini alın. Yeni IP aralıkları, bir sonraki Pazartesi günü geçerli olur. Daha fazla bilgi için, bkz. Microsoft tarafından barındırılan aracılar. Azure DevOps kuruluşunuz için gereken IP aralıklarını bulmak için, Microsoft tarafından barındırılan aracılar için olası IP aralıklarını tanımlamayı öğrenin.
İşlem hattı çalıştırması tamamlandıktan sonra neler olduğunu keşfedin ve ardından uygulamanızın dağıtılma bölümüne gidin. İşlem hattı özetinden:
Ortamlar sekmesini seçin.
Ortamı görüntüle'yi seçin.
Dağıtılan ad alanı için uygulamanızın örneğini seçin. Varsayılanları kullandıysanız, varsayılan ad alanında myapp uygulamasıdır.
Hizmetler sekmesini seçin.
Dış IP adresini seçin ve panonuza kopyalayın.
Yeni bir tarayıcı sekmesi veya penceresi açın ve IP adresi>:8080 girin<.
Örnek uygulamamızı oluşturuyorsanız, tarayıcınızda Merhaba dünya görünür.
İşlem hattının derleme şekli
Seçenekleri belirlemeyi tamamladıktan sonra Azure Pipelines'ın Azure Kubernetes Service'e Dağıt şablonunu kullanarak sizin için bir işlem hattı oluşturduğunu doğrulamaya ve yapılandırmaya devam ettiğinizde.
Derleme aşaması, görüntüyü derlemek ve Azure Container Registry'ye göndermek için Docker görevini kullanır.
- stage: Build
displayName: Build stage
jobs:
- job: Build
displayName: Build job
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
- task: PublishPipelineArtifact@1
inputs:
artifactName: 'manifests'
path: 'manifests'
Dağıtım işi, Kubernetes küme düğümlerinin Azure Container Registry kaynağından çekmesi için gerekenleri oluşturmak imagePullSecret
için Kubernetes bildirim görevini kullanır. Bildirim dosyaları daha sonra Kubernetes bildirim görevi tarafından Kubernetes kümesine dağıtmak için kullanılır. Bildirim dosyaları ve deployment.yml
, service.yml
Azure Kubernetes Service'e Dağıt şablonunu kullandığınızda oluşturulmuştur.
- stage: Deploy
displayName: Deploy stage
dependsOn: Build
jobs:
- deployment: Deploy
displayName: Deploy job
pool:
vmImage: $(vmImageName)
environment: 'myenv.aksnamespace' #customize with your environment
strategy:
runOnce:
deploy:
steps:
- task: DownloadPipelineArtifact@2
inputs:
artifactName: 'manifests'
downloadPath: '$(System.ArtifactsDirectory)/manifests'
- task: KubernetesManifest@0
displayName: Create imagePullSecret
inputs:
action: createSecret
secretName: $(imagePullSecret)
namespace: $(k8sNamespace)
dockerRegistryEndpoint: $(dockerRegistryServiceConnection)
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
namespace: $(k8sNamespace)
manifests: |
$(System.ArtifactsDirectory)/manifests/deployment.yml
$(System.ArtifactsDirectory)/manifests/service.yml
imagePullSecrets: |
$(imagePullSecret)
containers: |
$(containerRegistry)/$(imageRepository):$(tag)
Kaynakları temizleme
Oluşturduğunuz kaynakları her bitirdiğinizde, bunları silmek için aşağıdaki komutu kullanabilirsiniz:
az group delete --name myapp-rg
İstendiğinde girin y
.
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019
Azure Kubernetes Service'e (AKS) otomatik olarak dağıtmak için Azure Pipelines'ı kullanın. Azure Pipelines, Azure DevOps kullanarak sürekli tümleştirme (CI) ve sürekli teslim (CD) ile derlemenizi, test etmenizi ve dağıtmanızı sağlar.
Bu makalede, uygulamanızı sürekli olarak derleyen ve dağıtan bir işlem hattı oluşturmayı öğreneceksiniz. Dockerfile içeren bir depoda kodunuzu her değiştirdiğinizde, görüntüler Azure Container Registry'nize gönderilir ve bildirimler AKS kümenize dağıtılır.
Önkoşullar
- Etkin aboneliği olan bir Azure hesabı. Ücretsiz hesap oluşturun.
- Azure Resource Manager hizmet bağlantısı. Azure Resource Manager hizmet bağlantısı oluşturun.
- Bir GitHub hesabı. Henüz yoksa ücretsiz bir GitHub hesabı oluşturun.
Kodu alma
Örnek uygulama ve Dockerfile içeren aşağıdaki deponun çatalını oluşturun:
https://github.com/MicrosoftDocs/pipelines-javascript-docker
Azure kaynaklarını oluşturma
Azure portalında oturum açın ve sağ üst köşedeki Cloud Shell düğmesini seçin. AKS kümesi oluşturmak için Azure CLI veya PowerShell kullanın.
Kapsayıcı kayıt defteri oluşturma
# Create a resource group
az group create --name myapp-rg --location eastus
# Create a container registry
az acr create --resource-group myapp-rg --name mycontainerregistry --sku Basic
# Create a Kubernetes cluster
az aks create \
--resource-group myapp-rg \
--name myapp \
--node-count 1 \
--enable-addons monitoring \
--generate-ssh-keys
Kimlik doğrulamasını yapılandırma
Azure Kubernetes Service (AKS) ile Azure Container Registry (ACR) kullandığınızda bir kimlik doğrulama mekanizması oluşturmanız gerekir. Bu iki yolla elde edilebilir:
AKS'ye ACR erişimi verme. Bkz. Azure Kubernetes Service'ten Azure Container Registry ile kimlik doğrulaması.
Kubernetes görüntüsü çekme gizli dizisi kullanın. Kubernetes dağıtım görevi kullanılarak görüntü çekme gizli dizisi oluşturulabilir.
Yayın işlem hattı oluşturma
CI'yi ayarlamak için kullanılan derleme işlem hattı zaten bir Docker görüntüsü oluşturmuş ve bunu bir Azure Container Registry'ye göndermiştir. Ayrıca helm grafiğini bir yapıt olarak paketleyip yayımladı. Yayın işlem hattında kapsayıcı görüntüsünü AKS kümesine Helm uygulaması olarak dağıtacağız.
Azure Pipelines'da derlemenizin özetini açın.
Derleme özetinde Yayın simgesini seçerek yeni bir yayın işlem hattı başlatın.
Daha önce bu derleme yapıtlarını kullanan bir yayın işlem hattı oluşturduysanız bunun yerine yeni bir yayın oluşturmanız istenir. Bu durumda, Sürümler sayfasına gidin ve simgeyi seçerek + oradan yeni bir yayın işlem hattı başlatın.
Boş iş şablonunu seçin.
Görevler sayfasını açın ve Aracı işi'ni seçin.
Yeni bir görev eklemeyi ve helm aracı yükleyici görevi eklemeyi seçin+. Bu, sonraki görevleri çalıştıran aracıda Helm ve Kubectl'ın yüklü olmasını sağlar.
Yeniden seçin + ve bir Paketle ve Helm grafikleri dağıtma görevi ekleyin. Bu görevin ayarlarını aşağıdaki gibi yapılandırın:
Bağlantı Türü: Azure hizmet bağlantısı kullanarak AKS kümesine bağlanmak için Azure Resource Manager'ı seçin. Alternatif olarak, kubeconfig veya bir hizmet hesabı kullanarak herhangi bir Kubernetes kümesine bağlanmak istiyorsanız Kubernetes Hizmet Bağlantısı'nı seçebilirsiniz. Bu durumda, aşağıdaki ayar için Azure aboneliği yerine kubernetes hizmet bağlantısı oluşturmanız ve seçmeniz gerekir.
Azure aboneliği: Kullanılabilir Azure Hizmet Bağlantıları'nın altındaki listeden bir bağlantı seçin veya Azure aboneliğinize daha kısıtlı bir izin bağlantısı oluşturun. Girişin yanında bir Yetkile düğmesi görürseniz, Azure aboneliğinize bağlantıyı yetkilendirmek için bu düğmeyi kullanın. Gerekli Azure aboneliğini abonelik listesinde görmüyorsanız, bağlantıyı el ile ayarlamak için bkz . Azure hizmet bağlantısı oluşturma.
Kaynak grubu: AKS kümenizi içeren kaynak grubunu girin veya seçin.
Kubernetes kümesi: Oluşturduğunuz AKS kümesini girin veya seçin.
Komut: Helm komutu olarak init'i seçin. Bu, Tiller'ı çalışan Kubernetes kümenize yükler. Ayrıca gerekli yerel yapılandırmaları da ayarlar. Tick Tiller'ın en son yayın öncesi sürümünü yüklemek için kanarya görüntüsü sürümünü kullanın. Tiller'ı yükselt onay işaretiyle önceden yüklenmişse Tiller'ı yükseltmeyi de seçebilirsiniz. Bu seçenekler etkinse, görev çalışır
helm init --canary-image --upgrade
Aracı işi'ni seçin + ve başka bir Paketle ve Helm grafiklerini dağıt görevi ekleyin. Bu görevin ayarlarını aşağıdaki gibi yapılandırın:
Kubernetes kümesi: Oluşturduğunuz AKS kümesini girin veya seçin.
Ad Alanı: Uygulamanızı dağıtmak istediğiniz Kubernetes kümesi ad alanınızı girin. Kubernetes, aynı fiziksel küme tarafından desteklenen birden çok sanal kümeyi destekler. Bu sanal kümelere ad alanı adı verilir. Aynı kümede geliştirme, test ve hazırlama gibi farklı ortamlar oluşturmak için ad alanlarını kullanabilirsiniz.
Komut: Helm komutu olarak yükselt'i seçin. Bu görevi kullanarak herhangi bir Helm komutunu çalıştırabilir ve komut seçeneklerini bağımsız değişken olarak geçirebilirsiniz. Yükseltmeyi seçtiğinizde, görev bazı daha fazla alan gösterir:
Grafik Türü: Dosya Yolu'nu seçin. Alternatif olarak, BIR URL veya grafik adı belirtmek istiyorsanız Grafik Adı belirtebilirsiniz. Örneğin, grafik adı ise
stable/mysql
görev yürütülürhelm upgrade stable/mysql
Grafik Yolu: Bu, paketlenmiş grafiğe giden bir yol veya paketlenmemiş grafik dizinine giden yol olabilir. Bu örnekte ci derlemesi kullanarak grafiği yayımladığınız için dosya seçici kullanarak dosya paketini seçin veya
$(System.DefaultWorkingDirectory)/**/*.tgz
Sürüm Adı: Yayınınız için bir ad girin; örneğin,
azuredevops
Podları yeniden oluşturma: Yayın sırasında bir yapılandırma değişikliği varsa ve çalışan bir podu yeni yapılandırmayla değiştirmek istiyorsanız bu onay kutusunu işaretleyin.
Değerleri Sıfırla: Grafikte yerleşik değerlerin görev tarafından sağlanan tüm değerleri geçersiz kılmasını istiyorsanız bu onay kutusunu işaretleyin.
Zorla: Çakışma oluşursa, silmek, kaynağı yeniden oluşturmak ve tam sürümü yeniden yüklemek için yükseltmek ve geri almak istiyorsanız bu onay kutusunu işaretleyin. Bu, düzeltme ekleri uygulama işleminin başarısız olabileceği senaryolarda yararlıdır (örneğin, küme IP adresi sabit olduğundan hizmetler için).
Bağımsız değişkenler: Helm komut bağımsız değişkenlerini ve değerlerini girin; örneğin
--set image.repository=$(imageRepoName) --set image.tag=$(Build.BuildId)
Bu bağımsız değişkenleri neden kullandığımızı açıklayan bir açıklama için bu bölüme bakın.TLS'yi etkinleştir: Helm ile Tiller arasında güçlü TLS tabanlı bağlantıları etkinleştirmek için bu onay kutusunu işaretleyin.
CA sertifikası: Tiller ve Helm istemcisi için sertifika vermek için karşıya yüklenecek ve kullanılacak bir CA sertifikası belirtin.
Sertifika: Tiller sertifikasını veya Helm istemci sertifikasını belirtin
Anahtar: Tiller Anahtarını veya Helm istemci anahtarını belirtin
İşlem hattının Değişkenler sayfasında imageRepoName adlı bir değişken ekleyin ve değerini Helm görüntü deponuzun adına ayarlayın. Genellikle, bu biçimdedir
example.azurecr.io/coderepository
Yayın işlem hattını kaydedin.
Helm yükseltme görevinde kullanılan bağımsız değişkenler
Derleme işlem hattında kapsayıcı görüntüsü ile $(Build.BuildId)
etiketlenmiş ve bu bir Azure Container Registry'ye gönderiliyor.
Helm grafiğinde, farklı ortamlara dağıtmak için aynı grafik kullanılabildiğinden ad ve etiket gibi kapsayıcı görüntüsü ayrıntılarını parametreleştirebilirsiniz.
Bu değerler values.yaml dosyasında da belirtilebilir veya kullanıcı tarafından sağlanan değerler dosyası tarafından geçersiz kılınabilir ve helm yüklemesi veya yükseltmesi sırasında parametreler tarafından --set
geçersiz kılınabilir.
Bu örnekte, aşağıdaki bağımsız değişkenleri geçiririz:
--set image.repository=$(imageRepoName) --set image.tag=$(Build.BuildId)
değeri $(imageRepoName)
Değişkenler sayfasında (veya YAML dosyanızın değişkenler bölümünde) ayarlanmıştır.
Alternatif olarak, bunu doğrudan values veya values.yaml dosyasındaki --set
görüntü deponuzun adıyla değiştirebilirsiniz.
Örneğin:
image:
repository: VALUE_TO_BE_OVERRIDDEN
tag: latest
Bir diğer alternatif de, bağımsız değişken değerlerini virgülle ayrılmış anahtar-değer çiftleri olarak belirtmek için görevin Değerleri Ayarla seçeneğini ayarlamaktır.
Uygulamanızı dağıtmak için bir yayın oluşturma
Artık bir yayın oluşturmaya hazırsınız, yani belirli bir derleme tarafından üretilen yapıtlarla yayın işlem hattını çalıştırma işlemini başlatabilirsiniz. Bu, derlemenin dağıtılmasına neden olur:
+ Yayın'ı ve ardından Yayın oluştur'u seçin.
Yeni yayın oluştur panelinde, kullanmak istediğiniz yapıt sürümünün seçili olup olmadığını denetleyin ve Oluştur'u seçin.
Bilgi çubuğu iletisinde yayın bağlantısını seçin. Örneğin: "Release-1 sürümü oluşturuldu".
İşlem hattı görünümünde, günlükleri ve aracı çıkışını görmek için işlem hattının aşamalarındaki durum bağlantısını seçin.
Azure Kubernetes Service