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.
- Azure-service-principal: maak een service-principal, noteer de volgende waarden: appId, displayName, wachtwoord en tenant.
Ansible installeren: Voer een van de volgende opties uit:
- Ansible installeren en configureren op een virtuele Linux-machine
- Configureer Azure Cloud Shell en maak een virtuele machine met Ansible als u geen toegang hebt tot een virtuele Linux-machine.
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 enclient_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
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
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 endebug
sectie van het playbook worden de resultaten weergegeven wanneer de opdracht is voltooid.
- Vanwege de