Öğretici: Azure Arc özellikli Kubernetes kümelerini kullanarak GitOps ile CI/CD uygulama
Önemli
Bu öğreticide Flux v1 ile GitOps kullanılır. Flux v2 ile GitOps artık Azure Arc özellikli Kubernetes ve Azure Kubernetes Service (AKS) kümelerinde kullanılabilir; Flux v2 ile GitOps kullanan öğreticiye gidin. En kısa zamanda Flux v2'ye geçiş yapmanızı öneririz.
1 Ocak 2024 tarihinden önce oluşturulan Flux v1 tabanlı küme yapılandırma kaynakları desteği 24 Mayıs 2025'te sona erecektir. 1 Ocak 2024'den itibaren yeni Flux v1 tabanlı küme yapılandırma kaynakları oluşturamayacaksınız.
Bu öğreticide, Azure Arc özellikli Kubernetes kümeleri ile GitOps kullanarak bir CI/CD çözümü ayarlayacaksınız. Örnek Azure Vote uygulamasını kullanarak şunları yapacaksınız:
- Azure Arc özellikli bir Kubernetes kümesi oluşturun.
- Uygulamanızı ve GitOps depolarınızı Azure Repos'a Bağlan.
- CI/CD işlem hatlarını içeri aktar.
- Azure Container Registry'nizi (ACR) Azure DevOps ve Kubernetes'e Bağlan.
- Ortam değişkeni grupları oluşturun.
- ve
stage
ortamlarını dağıtındev
. - Uygulama ortamlarını test edin.
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Azure Cloud Shell
Azure, tarayıcınız aracılığıyla kullanabileceğiniz etkileşimli bir kabuk ortamı olan Azure Cloud Shell'i barındırıyor. Azure hizmetleriyle çalışmak için Cloud Shell ile Bash veya PowerShell kullanabilirsiniz. Yerel ortamınıza herhangi bir şey yüklemek zorunda kalmadan bu makaledeki kodu çalıştırmak için Cloud Shell önceden yüklenmiş komutlarını kullanabilirsiniz.
Azure Cloud Shell'i başlatmak için:
Seçenek | Örnek/Bağlantı |
---|---|
Kodun veya komut bloğunun sağ üst köşesindeki Deneyin'i seçin. Deneyin seçildiğinde kod veya komut otomatik olarak Cloud Shell'e kopyalanmaz. | |
https://shell.azure.comadresine gidin veya Cloud Shell'i tarayıcınızda açmak için Cloud Shell'i Başlat düğmesini seçin. | |
Azure portalının sağ üst kısmındaki menü çubuğunda Cloud Shell düğmesini seçin. |
Azure Cloud Shell'i kullanmak için:
Cloud Shell'i başlatın.
Kodu veya komutu kopyalamak için kod bloğundaki (veya komut bloğundaki) Kopyala düğmesini seçin.
Windows ve Linux'ta Ctrl+Shift V'yi seçerek veya macOS üzerinde Cmd+Shift++V'yi seçerek kodu veya komutu Cloud Shell oturumuna yapıştırın.
Kodu veya komutu çalıştırmak için Enter'ı seçin.
Başlamadan önce
Bu öğreticide Azure DevOps, Azure Repos ve Pipelines ve Azure CLI hakkında bilgi sahibi olduğunuz varsayılır.
CI/CD ortamınız için GitOps'u dağıtmayı öğrenmek için önceki öğreticiyi tamamlayın.
Bu özelliğin avantajlarını ve mimarisini anlayın.
Şu durumlara sahip olduğunuzu doğrulayın:
- arc-cicd-cluster adlı bağlantılı Azure Arc özellikli Kubernetes kümesi.
- AKS tümleştirmesi veya AKS olmayan küme kimlik doğrulaması ile bağlı bir Azure Container Registry (ACR).
- Azure Repos ve Azure Pipelines için "Derleme Yönetici" ve "Project Yönetici" izinleri.
Sürümlerin >aşağıdaki Azure Arc özellikli Kubernetes CLI uzantılarını = 1.0.0 yükleyin:
az extension add --name connectedk8s az extension add --name k8s-configuration
Bu uzantıları en son sürüme güncelleştirmek için aşağıdaki komutları çalıştırın:
az extension update --name connectedk8s az extension update --name k8s-configuration
Uygulamayı ve GitOps depolarını Azure Repos'a aktarma
Uygulama deposunu ve GitOps deposunu Azure Repos'a aktar. Bu öğretici için aşağıdaki örnek depoları kullanın:
- arc-cicd-demo-src uygulama deposu
- URL: https://github.com/Azure/arc-cicd-demo-src
- GitOps kullanarak dağıtacağınız örnek Azure Vote Uygulamasını içerir.
- arc-cicd-demo-gitops GitOps deposu
- URL: https://github.com/Azure/arc-cicd-demo-gitops
- Azure Vote Uygulamasını barındıran küme kaynaklarınız için temel olarak çalışır.
Git depolarını içeri aktarma hakkında daha fazla bilgi edinin.
Not
Uygulama ve GitOps depoları için iki ayrı depo içeri aktarmak ve kullanmak güvenliği ve basitliği artırabilir. Uygulama ve GitOps depolarının izinleri ve görünürlüğü ayrı ayrı ayarlanabilir. Örneğin, küme yöneticisi uygulama kodunda kümenin istenen durumuyla ilgili değişiklikleri bulamıyor olabilir. Buna karşılık, bir uygulama geliştiricisinin her ortam için belirli parametreleri bilmesi gerekmez. Parametreler için kapsam sağlayan bir dizi test değeri yeterli olabilir.
GitOps deposunu Bağlan
Uygulamanızı sürekli dağıtmak için GitOps kullanarak uygulama deposunu kümenize bağlayın. arc-cicd-demo-gitops GitOps deponuz, uygulamanızı arc-cicd-cluster kümenizde çalışır duruma getirmek için temel kaynakları içerir.
İlk GitOps deposu yalnızca dağıtım ortamlarına karşılık gelen geliştirme ve aşama ad alanlarını oluşturan bir bildirim içerir.
Oluşturduğunuz GitOps bağlantısı otomatik olarak:
- Bildirim dizinindeki bildirimleri eşitleyin.
- Küme durumunu güncelleştirin.
CI/CD iş akışı, uygulamayı dağıtmak için bildirim dizinini ek bildirimlerle doldurur.
Azure Repos'ta yeni içeri aktarılan arc-cicd-demo-gitops deponuza yeni bir GitOps bağlantısı oluşturun.
az k8s-configuration create \ --name cluster-config \ --cluster-name arc-cicd-cluster \ --resource-group myResourceGroup \ --operator-instance-name cluster-config \ --operator-namespace cluster-config \ --repository-url https://dev.azure.com/<Your organization>/<Your project>/_git/arc-cicd-demo-gitops \ --https-user <Azure Repos username> \ --https-key <Azure Repos PAT token> \ --scope cluster \ --cluster-type connectedClusters \ --operator-params='--git-readonly --git-path=arc-cicd-cluster/manifests'
Flux'un temel yol olarak yalnızca dizinini kullandığından
arc-cicd-cluster/manifests
emin olun. Aşağıdaki işleç parametresini kullanarak yolu tanımlayın:--git-path=arc-cicd-cluster/manifests
Not
HTTPS bağlantı dizesi kullanıyorsanız ve bağlantı sorunları yaşıyorsanız, URL'deki kullanıcı adı ön ekini atladığınızdan emin olun. Örneğin,
https://alice@dev.azure.com/contoso/project/_git/arc-cicd-demo-gitops
kaldırılmışalice@
olmalıdır.--https-user
bunun yerine kullanıcıyı belirtir, örneğin--https-user alice
.Azure portalında dağıtımın durumunu denetleyin.
- Başarılı olursa kümenizde hem hem de
dev
stage
ad alanlarının oluşturulduğunu görürsünüz.
- Başarılı olursa kümenizde hem hem de
CI/CD işlem hatlarını içeri aktarma
GitOps bağlantısını eşitlediğinize göre, bildirimleri oluşturan CI/CD işlem hatlarını içeri aktarmanız gerekir.
Uygulama deposu, PR'ler, CI ve CD için kullanacağınız işlem hatlarının bulunduğu bir .pipeline
klasör içerir. Örnek depoda sağlanan üç işlem hattını içeri aktarın ve yeniden adlandırın:
İşlem hattı dosya adı | Açıklama |
---|---|
.pipelines/az-vote-pr-pipeline.yaml |
arc-cicd-demo-src PR adlı uygulama PR işlem hattı |
.pipelines/az-vote-ci-pipeline.yaml |
arc-cicd-demo-src CI adlı uygulama CI işlem hattı |
.pipelines/az-vote-cd-pipeline.yaml |
Arc-cicd-demo-src CD adlı uygulama CD işlem hattı |
ACR'nizi Bağlan
Hem işlem hatlarınız hem de kümeniz Docker görüntülerini depolamak ve almak için ACR'yi kullanacak.
ACR'yi Azure DevOps'a Bağlan
CI işlemi sırasında, uygulama kapsayıcılarınızı bir kayıt defterine dağıtacaksınız. Azure hizmet bağlantısı oluşturarak başlayın:
- Azure DevOps'ta, proje ayarları sayfasından Hizmet bağlantıları sayfasını açın. TFS'de, üst menü çubuğundaki ayarlar simgesinden Hizmetler sayfasını açın.
- + Yeni hizmet bağlantısı'nı seçin ve ihtiyacınız olan hizmet bağlantısı türünü seçin.
- Hizmet bağlantısı parametrelerini doldurun. Bu öğretici için:
- Hizmet bağlantısını arc-demo-acr olarak adlandırın.
- Kaynak grubu olarak myResourceGroup öğesini seçin.
- Tüm işlem hatlarına erişim izni ver'i seçin.
- Bu seçenek YAML işlem hattı dosyalarını hizmet bağlantıları için yetkiler.
- Bağlantıyı oluşturmak için Tamam'ı seçin.
Kubernetes'e ACR Bağlan
ACR'nizden görüntü çekmek için Kubernetes kümenizi etkinleştirin. Özelse kimlik doğrulaması gerekir.
Mevcut AKS kümelerine ACR Bağlan
Aşağıdaki komutu kullanarak mevcut bir ACR'yi mevcut AKS kümeleriyle tümleştirin:
az aks update -n arc-cicd-cluster -g myResourceGroup --attach-acr arc-demo-acr
Görüntü çekme gizli dizisi oluşturma
AKS olmayan ve yerel kümeleri ACR'nize bağlamak için bir görüntü çekme gizli dizisi oluşturun. Kubernetes, kayıt defterinizin kimliğini doğrulamak için gereken bilgileri depolamak için görüntü çekme gizli dizilerini kullanır.
Aşağıdaki kubectl
komutla bir görüntü çekme gizli dizisi oluşturun. Hem hem stage
de dev
ad alanları için yineleyin.
kubectl create secret docker-registry <secret-name> \
--namespace <namespace> \
--docker-server=<container-registry-name>.azurecr.io \
--docker-username=<service-principal-ID> \
--docker-password=<service-principal-password>
Her pod için imagePullSecret ayarlamak zorunda kalmamak için ve stage
ad alanlarına ImagePullSecret öğesini Hizmet hesabına dev
eklemeyi göz önünde bulundurun. Daha fazla bilgi için Bkz. Kubernetes öğreticisi.
Ortam değişkeni grupları oluşturma
Uygulama deposu değişken grubu
az-vote-app-dev adlı bir değişken grubu oluşturun. Aşağıdaki değerleri ayarlayın:
Değişken | Değer |
---|---|
AZ_ACR_NAME | (örneğin, ACR örneğin azurearctest.azurecr.io) |
AZURE_SUBSCRIPTION | (öğreticinin önceki bölümlerinden arc-demo-acr olması gereken Azure Service Bağlan ion'ınız) |
AZURE_VOTE_IMAGE_REPO | Azure Vote Uygulama deposunun tam yolu, örneğin azurearctest.azurecr.io/azvote |
ENVIRONMENT_NAME | Geliştirme |
MANIFESTS_BRANCH | master |
MANIFESTS_FOLDER | azure-vote-manifests |
MANIFESTS_REPO | arc-cicd-demo-gitops |
ORGANIZATION_NAME | Azure DevOps kuruluşunun adı |
PROJECT_NAME | Azure DevOps'ta GitOps projesinin adı |
REPO_URL | GitOps deposu için tam URL |
SRC_FOLDER | azure-vote |
TARGET_CLUSTER | arc-cicd-cluster |
TARGET_NAMESPACE | dev |
Ortam değişken grubunu hazırlama
- az-vote-app-dev değişken grubunu kopyalama.
- Adı az-vote-app-stage olarak değiştirin.
- Karşılık gelen değişkenler için aşağıdaki değerlerin olduğundan emin olun:
Değişken | Değer |
---|---|
ENVIRONMENT_NAME | Aşama |
TARGET_NAMESPACE | stage |
Artık ve stage
ortamlarına dağıtmaya dev
hazırsınız.
Derleme Hizmeti için Daha Fazla İzin Verme
CD işlem hattı, GitOps deposunda kimlik doğrulaması yapmak için çalışan derlemenin güvenlik belirtecini kullanır. İşlem hattının yeni bir dal oluşturması, değişiklikleri göndermesi ve çekme istekleri oluşturması için daha fazla izin gerekir.
Project settings
Azure DevOps projesi ana sayfasından adresine gidin.Repositories
öğesini seçin.<GitOps Repo Name>
öğesini seçin.Security
öğesini seçin.<Project Name> Build Service (<Organization Name>)
için , ,Contribute to pull requests
veCreate branch
izin verinContribute
.
Daha fazla bilgi için bkz.
Geliştirme ortamını ilk kez dağıtma
CI ve CD işlem hatları oluşturulduktan sonra ci işlem hattını çalıştırarak uygulamayı ilk kez dağıtın.
CI işlem hattı
İlk CI işlem hattı çalıştırması sırasında, hizmet bağlantı adını okurken kaynak yetkilendirme hatası alabilirsiniz.
- Erişilen değişkenin AZURE_SUBSCRIPTION olduğunu doğrulayın.
- Kullanımı yetkilendirme.
- İşlem hattını yeniden çalıştırın.
CI işlem hattı:
- Uygulama değişikliğinin dağıtım için tüm otomatik kalite denetimlerini geçmesini sağlar.
- Çekme isteği işlem hattında tamamlanamadı fazladan doğrulama yapar.
- GitOps'a özgü işlem hattı, CD işlem hattı tarafından dağıtılacak işleme için yapıtları da yayımlar.
- Docker görüntüsünün değiştiğini ve yeni görüntünün gönderildiğini doğrular.
CD işlem hattı
İlk CD işlem hattı çalıştırması sırasında işlem hattına GitOps deposuna erişim vermeniz istenir. İşlem hattının bir kaynağa erişmek için izin alması istendiğinde Görüntüle'yi seçin. Ardından, işlem hattının geçerli ve gelecekteki çalıştırmaları için GitOps deposunu kullanma izni vermek için İzin Ver'i seçin.
Başarılı CI işlem hattı çalıştırması, dağıtım işlemini tamamlamak için CD işlem hattını tetikler. Her ortama artımlı olarak dağıtacaksınız.
İpucu
CD işlem hattı otomatik olarak tetiklenmiyorsa:
- Adın içindeki dal tetikleyicisi ile eşleşti sini doğrulayın
.pipelines/az-vote-cd-pipeline.yaml
arc-cicd-demo-src CI
olmalıdır.
- CI işlem hattını yeniden çalıştırın.
Şablon ve bildirim GitOps deposunda değiştirildikten sonra, CD işlem hattı bir işleme oluşturur, gönderir ve onay için bir çekme isteği oluşturur.
Görev çıkışında verilen çekme isteği
Create PR
bağlantısını açın.GitOps deposundaki değişiklikleri doğrulayın. Şunu görmeniz gerekir:
- Üst düzey Helm şablonu değişiklikleri.
- İstenen durumda temel alınan değişiklikleri gösteren alt düzey Kubernetes bildirimleri. Flux bu bildirimleri dağıtır.
Her şey iyi görünüyorsa pr'yi onaylayın ve tamamlayın.
Birkaç dakika sonra Flux değişikliği alır ve dağıtımı başlatır.
Bağlantı noktasını kullanarak
kubectl
yerel olarak iletin ve uygulamanın şu şekilde düzgün çalıştığından emin olun:kubectl port-forward -n dev svc/azure-vote-front 8080:80
Tarayıcınızda Azure Vote uygulamasını adresinde
http://localhost:8080/
görüntüleyin.Sık kullanılanlarınıza oy verin ve uygulamada bazı değişiklikler yapmaya hazır olun.
Ortam onaylarını ayarlama
Uygulama dağıtımında yalnızca kod veya şablonlarda değişiklik yapmakla kalmaz, aynı zamanda istemeden kümeyi hatalı duruma getirebilirsiniz.
Geliştirme ortamı dağıtımdan sonra bir kesme gösterirse, ortam onaylarını kullanarak daha sonraki ortamlara gitmelerini engelleyin.
- Azure DevOps projenizde korunması gereken ortama gidin.
- Onaylar ve Kaynağı denetler'e gidin.
- Oluştur'u belirleyin.
- Onaylayanları ve isteğe bağlı bir iletiyi sağlayın.
- El ile onay denetiminin eklenmesini tamamlamak için Yeniden Oluştur'u seçin.
Daha fazla ayrıntı için Onay ve denetim tanımlama öğreticisine bakın.
CD işlem hattı bir sonraki çalıştırıldığında işlem hattı GitOps PR oluşturulduktan sonra duraklatılır. Değişikliğin düzgün eşitlendiğini ve temel işlevleri geçtiğini doğrulayın. Değişikliğin sonraki ortama akışına izin vermek için işlem hattından denetimi onaylayın.
Uygulama değişikliği yapma
Kümedeki durumu temsil eden bu temel şablon ve bildirim kümesiyle uygulamada küçük bir değişiklik yapacaksınız.
arc-cicd-demo-src deposunda dosyayı düzenleyin
azure-vote/src/azure-vote-front/config_file.cfg
."Cats vs Dogs" yeterli oy almadığından, oy sayısını artırmak için bunu "Sekmeler ve Boşluklar" olarak değiştirin.
Değişikliği yeni bir dalda işleyin, gönderin ve bir çekme isteği oluşturun.
- Bu, CI/CD yaşam döngüsünü başlatacak tipik geliştirici akışıdır.
Çekme isteği doğrulama işlem hattı
PR işlem hattı, hatalı bir değişikliğe karşı ilk savunma hattıdır. Normal uygulama kodu kalite denetimleri lint ve statik analiz içerir. GitOps perspektifinden bakıldığında, sonuçta elde edilen altyapının dağıtılması için de aynı kaliteyi güvenceye almanız gerekir.
Uygulamanın Dockerfile ve Helm grafikleri, uygulamaya benzer şekilde lint özelliğini kullanabilir.
Linting aralığı sırasında bulunan hatalar:
- Yanlış biçimlendirilmiş YAML dosyaları,
- Uygulamanız için CPU ve Bellek sınırları ayarlama gibi en iyi yöntem önerileri.
Not
Gerçek bir uygulamada Helm linting'den en iyi kapsamı elde etmek için, gerçek bir ortamda kullanılanlara makul ölçüde benzeyen değerleri değiştirmeniz gerekir.
İşlem hattı yürütme sırasında bulunan hatalar çalıştırmanın test sonuçları bölümünde görünür. Buradan, şunları yapabilirsiniz:
- Hata türleriyle ilgili yararlı istatistikleri izleyin.
- Algılandıkları ilk işlemeyi bulun.
- Yığın izleme stili, hataya neden olan kod bölümlerine bağlanır.
İşlem hattı çalıştırması tamamlandıktan sonra, uygulama kodunun ve bunu dağıtacak şablonun kalitesini garanti etmiş olursunuz. Artık çekme isteğini onaylayabilir ve tamamlayabilirsiniz. CI, CD işlem hattını tetiklemeden önce şablonları ve bildirimleri yeniden düzenleyerek yeniden çalışır.
İpucu
Gerçek bir ortamda, çekme isteğinin kalite denetimlerinizi geçtiğinden emin olmak için dal ilkeleri ayarlamayı unutmayın. Daha fazla bilgi için Dal ilkelerini ayarlama makalesine bakın.
CD işlemi onayları
Başarılı bir CI işlem hattı çalıştırması, dağıtım işlemini tamamlamak için CD işlem hattını tetikler. CD işlem hattını ilk kez kullanabileceğinize benzer şekilde, her ortama artımlı olarak dağıtacaksınız. Bu kez işlem hattı her dağıtım ortamını onaylamanızı gerektirir.
- Ortama dağıtımı
dev
onaylayın. - Şablon ve bildirim GitOps deposunda değiştirildikten sonra, CD işlem hattı bir işleme oluşturur, gönderir ve onay için bir çekme isteği oluşturur.
- Görevde verilen çekme isteği bağlantısını açın.
- GitOps deposundaki değişiklikleri doğrulayın. Şunu görmeniz gerekir:
- Üst düzey Helm şablonu değişiklikleri.
- İstenen durumda temel alınan değişiklikleri gösteren alt düzey Kubernetes bildirimleri.
- Her şey iyi görünüyorsa pr'yi onaylayın ve tamamlayın.
- Dağıtımın tamamlanmasını bekleyin.
- Temel duman testi olarak, uygulama sayfasına gidin ve oylama uygulamasının artık Sekmeler ve Alanlar'ın görüntülendiğini doğrulayın.
- Bağlantı noktasını kullanarak
kubectl
yerel olarak iletin ve uygulamanın şu şekilde düzgün çalıştığından emin olun:kubectl port-forward -n dev svc/azure-vote-front 8080:80
- Adresinden tarayıcınızda http://localhost:8080/ Azure Vote uygulamasını görüntüleyin ve oylama seçeneklerinin Sekmeler ve Alanlar olarak değiştiğini doğrulayın.
- Bağlantı noktasını kullanarak
- Ortam için
stage
1-7 arası adımları yineleyin.
Dağıtımınız tamamlandı. Bu işlem CI/CD iş akışını sonlandırır.
Kaynakları temizleme
Bu uygulamayı kullanmaya devam etmeyecekseniz aşağıdaki adımlarla tüm kaynakları silin:
Azure Arc GitOps yapılandırma bağlantısını silin:
az k8s-configuration delete \ --name cluster-config \ --cluster-name arc-cicd-cluster \ --resource-group myResourceGroup \ --cluster-type connectedClusters
Ad alanını
dev
kaldırın:kubectl delete namespace dev
Ad alanını
stage
kaldırın:kubectl delete namespace stage
Sonraki adımlar
Bu öğreticide, dağıtım aracılığıyla uygulama geliştirmeden DevOps uygulayan tam bir CI/CD iş akışı ayarladınız. Uygulamada yapılan değişiklikler, doğrulama ve dağıtımı otomatik olarak tetikler ve el ile onaylarla geçitlendirilir.
Azure Arc özellikli Kubernetes ile GitOps ve yapılandırmalar hakkında daha fazla bilgi edinmek için kavramsal makalemize ilerleyin.