Öğretici: Azure Arc özellikli Kubernetes kümesinde GitOps kullanarak yapılandırmaları dağıtma

Önemli

Bu öğretici, Flux v1 ile GitOps'a yöneliktir. Flux v2 ile GitOps artık Azure Arc özellikli Kubernetes ve Azure Kubernetes Service (AKS) kümelerinde kullanılabilir; Flux v2 ile GitOps öğreticisine gidin. Mümkün olan en kısa sürede Flux v2'ye geçiş yapmanızı öneririz.

1 Ocak 2024'e kadar 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ümesinde GitOps kullanarak yapılandırmaları uygulayacaksınız. Şunları öğrenirsiniz:

  • Örnek git deposunu kullanarak Azure Arc özellikli Kubernetes kümesinde bir yapılandırma oluşturun.
  • Yapılandırmanın başarıyla oluşturulduğunu doğrulayın.
  • Özel git deposundan yapılandırma uygulama.
  • Kubernetes yapılandırmasını doğrulayın.

Önkoşullar

Yapılandırma oluşturma

Bu makalede kullanılan örnek depo , küme işlecinin kişisi etrafında yapılandırılmıştır. Bu depodaki bildirimler birkaç ad alanı sağlar, iş yüklerini dağıtır ve takıma özgü bazı yapılandırmalar sağlar. GitOps ile bu depoyu kullanmak kümenizde aşağıdaki kaynakları oluşturur:

  • Ad alanları: cluster-config, team-a, team-b
  • Dağıtım: arc-k8s-demo
  • ConfigMap: team-a/endpoints

Azure'da config-agent yeni veya güncelleştirilmiş yapılandırmaları yoklar. Bu görev 5 dakika kadar sürer.

Özel bir depoyu yapılandırmayla ilişkilendiriyorsanız, Özel Git deposundan yapılandırmayı uygulama başlığı altında yer alan adımları tamamlayın.

Azure CLI kullanma

Bağlı bir kümeyi örnek Git deposuna bağlamak için için k8s-configuration Azure CLI uzantısını kullanın.

  1. Bu yapılandırmaya adını verin cluster-config.

  2. Aracıya, işleci ad alanında dağıtmasını cluster-config sağlayın.

  3. İşleç cluster-admin izinlerini verin.

    az k8s-configuration create --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --operator-instance-name cluster-config --operator-namespace cluster-config --repository-url https://github.com/Azure/arc-k8s-demo --scope cluster --cluster-type connectedClusters
    
    {
      "complianceStatus": {
      "complianceState": "Pending",
      "lastConfigApplied": "0001-01-01T00:00:00",
      "message": "{\"OperatorMessage\":null,\"ClusterState\":null}",
      "messageLevel": "3"
      },
      "configurationProtectedSettings": {},
      "enableHelmOperator": false,
      "helmOperatorProperties": null,
      "id": "/subscriptions/<sub id>/resourceGroups/<group name>/providers/Microsoft.Kubernetes/connectedClusters/<cluster name>/providers/Microsoft.KubernetesConfiguration/sourceControlConfigurations/cluster-config",
      "name": "cluster-config",
      "operatorInstanceName": "cluster-config",
      "operatorNamespace": "cluster-config",
      "operatorParams": "--git-readonly",
      "operatorScope": "cluster",
      "operatorType": "Flux",
      "provisioningState": "Succeeded",
      "repositoryPublicKey": "",
      "repositoryUrl": "https://github.com/Azure/arc-k8s-demo",
      "resourceGroup": "MyRG",
      "sshKnownHostsContents": "",
      "systemData": {
        "createdAt": "2020-11-24T21:22:01.542801+00:00",
        "createdBy": null,
        "createdByType": null,
        "lastModifiedAt": "2020-11-24T21:22:01.542801+00:00",
        "lastModifiedBy": null,
        "lastModifiedByType": null
      },
      "type": "Microsoft.KubernetesConfiguration/sourceControlConfigurations"
    }
    

Genel Git deposu kullanma

Parametre Biçimlendir
--repository-url http[s]://server/repo[.git]

SSH ve Flux tarafından oluşturulan anahtarlarla özel Git deposunu kullanma

Flux tarafından oluşturulan ortak anahtarı Git hizmet sağlayıcınızdaki kullanıcı hesabına ekleyin. Anahtar kullanıcı hesabı yerine depoya eklenirse URL yerine user@ kullanıngit@.

Daha fazla ayrıntı için Özel Git deposundan yapılandırmayı uygulama bölümüne atlayın.

Parametre Biçimlendir Notlar
--repository-url ssh://user@server/repo[.git] veya user@server:repo[.git] git@ değiştirilebilir user@

SSH ve kullanıcı tarafından sağlanan anahtarlarla özel Git deposunu kullanma

Doğrudan veya bir dosya içinde kendi özel anahtarınızı sağlayın. Anahtar PEM biçiminde olmalı ve yeni satırla bitmelidir (\n).

İlişkili ortak anahtarı Git hizmet sağlayıcınızdaki kullanıcı hesabına ekleyin. Anahtar kullanıcı hesabı yerine depoya eklenirse yerine kullanın git@user@.

Daha fazla ayrıntı için Özel Git deposundan yapılandırmayı uygulama bölümüne atlayın.

Parametre Biçimlendir Notlar
--repository-url ssh://user@server/repo[.git] veya user@server:repo[.git] git@ değiştirilebilir user@
--ssh-private-key PEM biçiminde base64 ile kodlanmış anahtar Anahtarı doğrudan sağlama
--ssh-private-key-file yerel dosyanın tam yolu PEM biçim anahtarını içeren yerel dosyanın tam yolunu belirtin

SSH ve kullanıcı tarafından sağlanan bilinen konaklarla özel bir Git konağı kullanma

Flux operatörü, SSH bağlantısı kurmadan önce Git deposunun kimliğini doğrulamak için bilinen konaklar dosyasında yaygın Git konaklarının listesini tutar. Yaygın olmayan bir Git deposu veya kendi Git konağınızı kullanıyorsanız, Flux'un deponuzu tanımlayabilmesi için konak anahtarını sağlayabilirsiniz.

Özel anahtarlar gibi, known_hosts içeriğinizi doğrudan veya bir dosyada sağlayabilirsiniz. Kendi içeriğinizi sağlarken, yukarıdaki SSH anahtar senaryolarından biriyle birlikte known_hosts içerik biçimi belirtimlerini kullanın.

Parametre Biçimlendir Notlar
--repository-url ssh://user@server/repo[.git] veya user@server:repo[.git] git@ değiştirilebilir user@
--ssh-known-hosts base64 ile kodlanmış Bilinen konak içeriğini doğrudan sağlama
--ssh-known-hosts-file yerel dosyanın tam yolu Yerel bir dosyada bilinen konak içeriği sağlama

HTTPS ile özel Git deposu kullanma

Parametre Biçimlendir Notlar
--repository-url https://server/repo[.git] Temel kimlik doğrulaması ile HTTPS
--https-user ham veya base64 ile kodlanmış HTTPS kullanıcı adı
--https-key ham veya base64 ile kodlanmış HTTPS kişisel erişim belirteci veya parolası

Not

  • Helm operatör grafiği sürüm 1.2.0+ HTTPS Helm yayın özel kimlik doğrulamasını destekler.
  • HTTPS Helm sürümü AKS tarafından yönetilen kümeler için desteklenmez.
  • Ara sunucunuz aracılığıyla Git deposuna erişmek için Flux'a ihtiyacınız varsa Azure Arc aracılarını ara sunucu ayarlarıyla güncelleştirmeniz gerekir. Daha fazla bilgi için bkz. Giden ara sunucu kullanarak bağlanma.

Ek Parametreler

Yapılandırmayı aşağıdaki isteğe bağlı parametrelerle özelleştirin:

Parametre Açıklama
--enable-helm-operator Helm grafiği dağıtımları için desteği etkinleştirmek için geçiş yapın.
--helm-operator-params Helm işleci için grafik değerleri (etkinse). Örneğin, --set helm.versions=v3.
--helm-operator-chart-version Helm işleci için grafik sürümü (etkinse). 1.2.0+ sürümünü kullanın. Varsayılan: '1.2.0'.
--operator-namespace İşleç ad alanının adı. Varsayılan: 'default'. En fazla: 23 karakter.
--operator-params işleç için parametreler. Tek tırnak içinde verilmelidir. Örneğin, --operator-params='--git-readonly --sync-garbage-collection --git-branch=main'

'de --operator-paramsdesteklenen seçenekler:

Seçenek Açıklama
--git-branch Kubernetes bildirimleri için kullanılacak Git deposunun dalı. Varsayılan değer 'ana' şeklindedir. Daha yeni depoların adlı mainkök dalları vardır. Bu durumda değerini ayarlamanız --git-branch=maingerekir.
--git-path Kubernetes bildirimlerini bulmak için Git deposundaki Flux göreli yolu.
--git-readonly Git deposu salt okunur olarak kabul edilir. Flux buna yazmaya çalışmaz.
--manifest-generation Etkinleştirilirse, Flux .flux.yaml dosyasını arar ve Kustomize veya diğer bildirim oluşturucularını çalıştırır.
--git-poll-interval Yeni işlemeler için Git deposunu yoklama dönemi. Varsayılan değer ( 5m 5 dakika).
--sync-garbage-collection Etkinleştirilirse Flux, oluşturduğu kaynakları siler, ancak artık Git'te mevcut değildir.
--git-label Eşitleme ilerleme durumunu izlemek için etiket. Git dalını etiketlemek için kullanılır. flux-sync varsayılan değerdir.
--git-user Git işlemesi için kullanıcı adı.
--git-email Git işlemesi için kullanılacak Email.

Flux'un depoya yazmasını istemiyorsanız ve --git-user veya --git-email ayarlanmadıysanız --git-readonly , otomatik olarak ayarlanır.

Daha fazla bilgi için Flux belgelerine bakın.

Not

Flux varsayılan olarak git deposunun master dalından eşitlenir. Ancak, daha yeni git depolarında adlı mainkök dal vardır. Bu durumda --operator-params içinde ayarlamanız --git-branch=main gerekir.

İpucu

Azure Arc özellikli Kubernetes kaynağının GitOps sekmesindeki Azure portal bir yapılandırma oluşturabilirsiniz.

Yapılandırmayı doğrulama

Yapılandırmanın başarıyla oluşturulduğunu doğrulamak için Azure CLI'yi kullanın.

az k8s-configuration show --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --cluster-type connectedClusters

Yapılandırma kaynağı uyumluluk durumu, iletiler ve hata ayıklama bilgileriyle güncelleştirilir.

{
  "complianceStatus": {
    "complianceState": "Installed",
    "lastConfigApplied": "2020-12-10T18:26:52.801000+00:00",
    "message": "...",
    "messageLevel": "Information"
  },
  "configurationProtectedSettings": {},
  "enableHelmOperator": false,
  "helmOperatorProperties": {
    "chartValues": "",
    "chartVersion": ""
  },
  "id": "/subscriptions/<sub id>/resourceGroups/AzureArcTest/providers/Microsoft.Kubernetes/connectedClusters/AzureArcTest1/providers/Microsoft.KubernetesConfiguration/sourceControlConfigurations/cluster-config",
  "name": "cluster-config",
  "operatorInstanceName": "cluster-config",
  "operatorNamespace": "cluster-config",
  "operatorParams": "--git-readonly",
  "operatorScope": "cluster",
  "operatorType": "Flux",
  "provisioningState": "Succeeded",
  "repositoryPublicKey": "...",
  "repositoryUrl": "git://github.com/Azure/arc-k8s-demo.git",
  "resourceGroup": "AzureArcTest",
  "sshKnownHostsContents": null,
  "systemData": {
    "createdAt": "2020-12-01T03:58:56.175674+00:00",
    "createdBy": null,
    "createdByType": null,
    "lastModifiedAt": "2020-12-10T18:30:56.881219+00:00",
    "lastModifiedBy": null,
    "lastModifiedByType": null
},
  "type": "Microsoft.KubernetesConfiguration/sourceControlConfigurations"
}

Bir yapılandırma oluşturulduğunda veya güncelleştirildiğinde birkaç şey gerçekleşir:

  1. Azure Arcconfig-agent, Azure Resource Manager yeni veya güncelleştirilmiş yapılandırmaları (Microsoft.KubernetesConfiguration/sourceControlConfigurations) izler ve yeni Pending yapılandırmayı fark eder.
  2. yapılandırma config-agent özelliklerini okur ve hedef ad alanını oluşturur.
  3. Azure Arc controller-manager bir Kubernetes hizmet hesabı oluşturur ve uygun izinler (clusterveya kapsam) için bu hesabı ClusterRoleBinding veyanamespace RoleBinding ile eşler. Ardından bir örneğini fluxdağıtır.
  4. Flux tarafından oluşturulan anahtarlarla SSH seçeneğini kullanıyorsanız, flux bir SSH anahtarı oluşturur ve ortak anahtarı günlüğe kaydeder.
  5. Rapor config-agent durumu Azure'daki yapılandırma kaynağına geri döner.

Sağlama işlemi gerçekleşirken yapılandırma kaynağı birkaç durum değişikliğinde ilerler. Yukarıdaki komutla ilerleme durumunu az k8s-configuration show ... izleyin:

Aşama değişikliği Açıklama
complianceStatus->Pending İlk ve devam eden durumları temsil eder.
complianceStatus ->Installed config-agent küme başarıyla yapılandırıldı ve hatasız dağıtıldı flux .
complianceStatus ->Failed config-agent dağıtımında fluxbir hatayla karşılaştı. Ayrıntılar yanıt gövdesinde complianceStatus.message sağlanır.

Özel Git deposundan yapılandırma uygulama

Özel bir Git deposu kullanıyorsanız, deponuzda SSH ortak anahtarını yapılandırmanız gerekir. SSH ortak anahtarını siz sağlarsınız veya Flux oluşturur. Ortak anahtarı belirli bir Git deposunda veya depoya erişimi olan Git kullanıcısında yapılandırabilirsiniz.

Kendi ortak anahtarınızı alma

Kendi SSH anahtarlarınızı oluşturduysanız zaten özel ve ortak anahtarlarınız vardır.

Azure CLI kullanarak ortak anahtarı alma

Anahtarları Flux oluşturduysa Azure CLI’da aşağıdakini kullanın.

az k8s-configuration show --resource-group <resource group name> --cluster-name <connected cluster name> --name <configuration name> --cluster-type connectedClusters --query 'repositoryPublicKey' 
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAREDACTED"

Azure portaldan ortak anahtarı alma

Anahtarları Flux oluşturuyorsa Azure portal'de aşağıdaki adımları izleyin.

  1. Azure portalda bağlı küme kaynağına gidin.
  2. Kaynak sayfasında "GitOps" öğesini seçin ve bu kümenin yapılandırma listesine bakın.
  3. Özel Git deposunu kullanan yapılandırmayı seçin.
  4. Açılan bağlam penceresinde, pencerenin alt kısmında Depo ortak anahtarını kopyalayın.

GitHub kullanarak ortak anahtar ekleme

Aşağıdaki seçeneklerden birini kullanın:

  • 1. Seçenek: Ortak anahtarı kullanıcı hesabınıza ekleyin (hesabınızdaki tüm depolara uygulanır):

    1. GitHub'ı açın ve sayfanın sağ üst köşesindeki profil simgesine tıklayın.
    2. Ayarlar’a tıklayın.
    3. SSH ve GPG tuşlarına tıklayın.
    4. Yeni SSH anahtarı'ne tıklayın.
    5. Bir Başlık girin.
    6. Ortak anahtarı iki yanındaki tırnak işaretleri olmadan yapıştırın.
    7. SSH anahtarı ekle'ye tıklayın.
  • 2. Seçenek: Ortak anahtarı Git deposuna dağıtım anahtarı olarak ekleyin (yalnızca bu depoya uygulanır):

    1. GitHub’ı açın ve deponuza gidin.
    2. Ayarlar’a tıklayın.
    3. Anahtarları dağıt'a tıklayın.
    4. Dağıtım anahtarı ekle'ye tıklayın.
    5. Bir Başlık girin.
    6. Yazma erişimine izin ver’i işaretleyin.
    7. Ortak anahtarı iki yanındaki tırnak işaretleri olmadan yapıştırın.
    8. Anahtar ekle'ye tıklayın.

Azure DevOps deposunu kullanarak ortak anahtar ekleme

Aşağıdaki adımları kullanarak anahtarı SSH anahtarlarınıza ekleyin:

  1. Sağ üst kısımdaki Kullanıcı Ayarları'nın altında (profil görüntüsünün yanında), SSH ortak anahtarları'na tıklayın.
  2. + Yeni Anahtar’ı seçin.
  3. Bir ad girin.
  4. Ortak anahtarı iki yanındaki tırnak işaretleri olmadan yapıştırın.
  5. Ekle'ye tıklayın.

Kubernetes yapılandırmasını doğrulama

Örneği yükledikten flux sonra config-agent Git deposunda tutulan kaynakların kümeye akmaya başlaması gerekir. Ad alanlarının, dağıtımların ve kaynakların aşağıdaki komutla oluşturulduğunu denetleyin:

kubectl get ns --show-labels
NAME              STATUS   AGE    LABELS
azure-arc         Active   24h    <none>
cluster-config    Active   177m   <none>
default           Active   29h    <none>
itops             Active   177m   fluxcd.io/sync-gc-mark=sha256.9oYk8yEsRwWkR09n8eJCRNafckASgghAsUWgXWEQ9es,name=itops
kube-node-lease   Active   29h    <none>
kube-public       Active   29h    <none>
kube-system       Active   29h    <none>
team-a            Active   177m   fluxcd.io/sync-gc-mark=sha256.CS5boSi8kg_vyxfAeu7Das5harSy1i0gc2fodD7YDqA,name=team-a
team-b            Active   177m   fluxcd.io/sync-gc-mark=sha256.vF36thDIFnDDI2VEttBp5jgdxvEuaLmm7yT_cuA2UEw,name=team-b

, , team-bitopsve cluster-config ad alanlarının team-aoluşturulduğunu görebiliriz.

operatör flux , yapılandırma kaynağı tarafından yönlendirildiği gibi ad alanına dağıtıldı cluster-config :

kubectl -n cluster-config get deploy  -o wide
NAME             READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES                         SELECTOR
cluster-config   1/1     1            1           3h    flux         docker.io/fluxcd/flux:1.16.0   instanceName=cluster-config,name=flux
memcached        1/1     1            1           3h    memcached    memcached:1.5.15               name=memcached

Keşfetmeye devam edin

Aşağıdakileri kullanarak yapılandırma deposunun bir parçası olarak dağıtılan diğer kaynakları keşfedebilirsiniz:

kubectl -n team-a get cm -o yaml
kubectl -n itops get all

Kaynakları temizleme

Azure CLI veya Azure portal kullanarak yapılandırmayı silin. Delete komutunu çalıştırdıktan sonra yapılandırma kaynağı Azure'da hemen silinir. Kümeden ilişkili nesnelerin tam silinmesi 10 dakika içinde gerçekleşmelidir. Yapılandırma kaldırıldığında başarısız durumdaysa, ilişkili nesnelerin tam silinmesi bir saate kadar sürebilir.

Kapsamı olan namespace bir yapılandırma silindiğinde, mevcut iş yüklerinin bozulmasını önlemek için ad alanı Azure Arc tarafından silinmez. Gerekirse, kullanarak kubectlbu ad alanını el ile silebilirsiniz.

az k8s-configuration delete --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --cluster-type connectedClusters

Not

Kümede izlenen Git deposundan yapılan dağıtımların sonucu olan değişiklikler, yapılandırma silindiğinde silinmez.

Sonraki adımlar

GitOps ile CI/CD uygulamayı öğrenmek için sonraki öğreticiye ilerleyin.