Delen via


Zelfstudie: Azure CNI-netwerken configureren in Azure Kubernetes Service (AKS) met behulp van Ansible

Belangrijk

Ansible 2.8 (of hoger) is vereist om de voorbeeldplaybooks in dit artikel uit te voeren.

Met Azure Kubernetes Service (AKS) kunt u eenvoudig een beheerd Kubernetes-cluster implementeren in Azure. AKS verkleint de complexiteit en de operationele overhead die gepaard gaan met het beheer van Kubernetes door veel van deze taken naar Azure over te hevelen. Azure handelt als een gehoste Kubernetes-service cruciale taken voor u af zoals statuscontrole en onderhoud. De Kubernetes-modellen worden beheerd door Azure. U beheert en onderhoudt alleen de agentknooppunten. Als beheerde Kubernetes-service is AKS gratis. U betaalt alleen voor de agentknooppunten binnen uw clusters; niet voor de masters.

Met AKS kunt u een cluster implementeren met behulp van de volgende netwerkmodellen:

  • Kubenet-netwerken : netwerkresources worden doorgaans gemaakt en geconfigureerd als het AKS-cluster wordt geïmplementeerd.
  • Azure CNI-netwerken : AKS-cluster is verbonden met bestaande VNET-resources (virtual network) en configuraties.

Zie Netwerkconcepten voor toepassingen in AKS voor meer informatie over netwerken met uw toepassingen in AKS.

In dit artikel leert u het volgende:

  • Een AKS-cluster maken
  • Azure CNI-netwerken configureren

Vereisten

  • Azure-abonnement: als u nog geen abonnement op Azure hebt, maakt u een gratis Azure-account aan voordat u begint.

Een virtueel netwerk en een subnet maken

De voorbeeldplaybookcode in deze sectie wordt gebruikt voor het volgende:

  • Een virtueel netwerk maken
  • Een subnet maken binnen het virtuele netwerk

Sla het volgende playbook op als vnet.yml:

- name: Create vnet
  azure_rm_virtualnetwork:
      resource_group: "{{ resource_group }}"
      name: "{{ name }}"
      address_prefixes_cidr:
          - 10.0.0.0/8

- name: Create subnet
  azure_rm_subnet:
      resource_group: "{{ resource_group }}"
      name: "{{ name }}"
      address_prefix_cidr: 10.240.0.0/16
      virtual_network_name: "{{ name }}"
  register: subnet

Een AKS-cluster maken in het virtuele netwerk

De voorbeeldplaybookcode in deze sectie wordt gebruikt voor het volgende:

  • Maak een AKS-cluster binnen een virtueel netwerk.

Sla het volgende playbook op als aks.yml:

- name: List supported kubernetes version from Azure
  azure_rm_aks_version:
      location: "{{ location }}"
  register: versions

- name: Create AKS cluster within a VNet
  azure_rm_aks:
      resource_group: "{{ resource_group }}"
      name: "{{ name }}"
      dns_prefix: "{{ name }}"
      kubernetes_version: "{{ versions.azure_aks_versions[-1] }}"
      agent_pool_profiles:
        - count: 3
          name: nodepool1
          vm_size: Standard_D2_v2
          vnet_subnet_id: "{{ vnet_subnet_id }}"
      linux_profile:
          admin_username: azureuser
          ssh_key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
      service_principal:
          client_id: "{{ lookup('ini', 'client_id section=default file=~/.azure/credentials') }}"
          client_secret: "{{ lookup('ini', 'secret section=default file=~/.azure/credentials') }}"
      network_profile:
          network_plugin: azure
          docker_bridge_cidr: 172.17.0.1/16
          dns_service_ip: 10.2.0.10
          service_cidr: 10.2.0.0/24
  register: aks

Hier volgen enkele belangrijke opmerkingen die u moet overwegen bij het werken met het voorbeeldplaybook:

  • Gebruik de azure_rm_aks_version module om de ondersteunde versie te vinden.

  • Dit vnet_subnet_id is het subnet dat in de vorige sectie is gemaakt.

  • Het playbook wordt geladen ssh_key van ~/.ssh/id_rsa.pub. Als u deze wijzigt, gebruikt u de indeling met één regel, te beginnen met 'ssh-rsa' (zonder de aanhalingstekens).

  • De client_id waarden en client_secret waarden worden geladen van ~/.azure/credentials, wat het standaardreferentiebestand is. U kunt deze waarden instellen op uw service-principal of deze waarden laden vanuit omgevingsvariabelen:

    client_id: "{{ lookup('env', 'AZURE_CLIENT_ID') }}"
    client_secret: "{{ lookup('env', 'AZURE_SECRET') }}"
    

Het voorbeeldplaybook uitvoeren

De voorbeeldplaybookcode in deze sectie wordt gebruikt om verschillende functies te testen die in deze zelfstudie worden weergegeven.

Sla het volgende playbook op als aks-azure-cni.yml:

---
- hosts: localhost
  vars:
      resource_group: aksansibletest
      name: aksansibletest
      location: eastus
  tasks:
     - name: Ensure resource group exists
       azure_rm_resourcegroup:
           name: "{{ resource_group }}"
           location: "{{ location }}"

     - name: Create vnet
       include_tasks: vnet.yml

     - name: Create AKS
       vars:
           vnet_subnet_id: "{{ subnet.state.id }}"
       include_tasks: aks.yml

     - name: Show AKS cluster detail
       debug:
           var: aks

Hier volgen enkele belangrijke opmerkingen die u moet overwegen bij het werken met het voorbeeldplaybook:

  • Wijzig de waarde in de aksansibletest naam van de resourcegroep.
  • Wijzig de waarde in uw aksansibletest AKS-naam.
  • Wijzig de waarde in de eastus locatie van de resourcegroep.

Voer het playbook uit met behulp van de ansible-playbook-opdracht:

ansible-playbook aks-azure-cni.yml

Nadat u het playbook hebt uitgevoerd, ziet u uitvoer die vergelijkbaar is met de volgende resultaten:

PLAY [localhost] 

TASK [Gathering Facts] 
ok: [localhost]

TASK [Ensure resource group exists] 
changed: [localhost]

TASK [Create vnet] 
included: /home/devops/aks-cni/vnet.yml for localhost

TASK [Create vnet] 
changed: [localhost]

TASK [Create subnet] 
changed: [localhost]

TASK [Create AKS] 
included: /home/devops/aks-cni/aks.yml for localhost

TASK [List supported kubernetes version from Azure] 
 [WARNING]: Azure API profile latest does not define an entry for
ContainerServiceClient

ok: [localhost]

TASK [Create AKS cluster with vnet] 
changed: [localhost]

TASK [Show AKS cluster detail] 
ok: [localhost] => {
    "aks": {
        "aad_profile": {},
        "addon": {},
        "agent_pool_profiles": [
            {
                "count": 3,
                "name": "nodepool1",
                "os_disk_size_gb": 100,
                "os_type": "Linux",
                "storage_profile": "ManagedDisks",
                "vm_size": "Standard_D2_v2",
                "vnet_subnet_id": "/subscriptions/BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB/resourceGroups/aksansibletest/providers/Microsoft.Network/virtualNetworks/aksansibletest/subnets/aksansibletest"
            }
        ],
        "changed": true,
        "dns_prefix": "aksansibletest",
        "enable_rbac": false,
        "failed": false,
        "fqdn": "aksansibletest-0272707d.hcp.eastus.azmk8s.io",
        "id": "/subscriptions/BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB/resourcegroups/aksansibletest/providers/Microsoft.ContainerService/managedClusters/aksansibletest",
        "kube_config": "..."
        },
        "location": "eastus",
        "name": "aksansibletest",
        "network_profile": {
            "dns_service_ip": "10.2.0.10",
            "docker_bridge_cidr": "172.17.0.1/16",
            "network_plugin": "azure",
            "network_policy": null,
            "pod_cidr": null,
            "service_cidr": "10.2.0.0/24"
        },
        "node_resource_group": "MC_aksansibletest_aksansibletest_eastus",
        "provisioning_state": "Succeeded",
        "service_principal_profile": {
            "client_id": "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA"
        },
        "tags": null,
        "type": "Microsoft.ContainerService/ManagedClusters",
        "warnings": [
            "Azure API profile latest does not define an entry for ContainerServiceClient",
            "Azure API profile latest does not define an entry for ContainerServiceClient"
        ]
    }
}

PLAY RECAP 
localhost                  : ok=9    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Resources opschonen

  1. Sla de volgende code op als delete_rg.yml.

    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group - "{{ name }}"
          azure_rm_resourcegroup:
            name: "{{ name }}"
            state: absent
          register: rg
        - debug:
            var: rg
    
  2. Voer het playbook uit met behulp van de ansible-playbook-opdracht . Vervang de tijdelijke aanduiding door de naam van de resourcegroep die u wilt verwijderen. Alle resources in de resourcegroep worden verwijderd.

    ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
    

    Belangrijkste punten:

    • Vanwege de register variabele en debug sectie van het playbook worden de resultaten weergegeven wanneer de opdracht is voltooid.

Volgende stappen