Oktatóanyag: Kubenet-hálózatkezelés konfigurálása az Azure Kubernetes Service-ben (AKS) az Ansible használatával
Fontos
Az Ansible 2.8 (vagy újabb) szükséges a jelen cikkben szereplő minta forgatókönyvek futtatásához.
Az Azure Kubernetes Service (AKS) egyszerűvé teszi egy felügyelt Kubernetes-fürt üzembe helyezését az Azure-ban. Az AKS egyszerűsíti a Kubernetes kezelését és csökkenti annak működési munkaterhelését azáltal, hogy a felelősség nagy részét az Azure-ra helyezi át. Üzemeltetett Kubernetes-szolgáltatásként az Azure olyan fontos műveleteket bonyolít le, mint az állapotmonitorozás és a karbantartás. A Kubernetes fő csomópontokat az Azure felügyeli. Ön csak az ügynökcsomópontokat felügyeli és tartja karban. Felügyelt Kubernetes-szolgáltatásként az AKS ingyenes – csak a fürtök ügynökcsomópontjaiért kell fizetnie; nem a mesterek számára.
Az AKS használatával üzembe helyezhet egy fürtöt a következő hálózati modellek használatával:
- Kubenet-hálózatkezelés – A hálózati erőforrások általában az AKS-fürt üzembe helyezésekor jönnek létre és vannak konfigurálva.
- Azure Container Networking Interface (CNI) hálózatkezelés – Az AKS-fürt a meglévő virtuális hálózati erőforrásokhoz és konfigurációkhoz csatlakozik.
Az alkalmazások AKS-ben történő hálózatkezeléséről további információt az AKS-ben található alkalmazások hálózati fogalmai című témakörben talál.
Ebben a cikkben az alábbiakkal ismerkedhet meg:
- AKS-fürt létrehozása
- Az Azure Kubenet hálózatkezelésének konfigurálása
Előfeltételek
- Azure-előfizetés: Ha nem rendelkezik Azure-előfizetéssel, első lépésként mindössze néhány perc alatt létrehozhat egy ingyenes fiókot.
- Azure-szolgáltatásnév: Hozzon létre egy egyszerű szolgáltatást, és jegyezze fel a következő értékeket: appId, displayName, password és tenant.
Az Ansible telepítése: Válasszon az alábbi lehetőségek közül:
- Az Ansible telepítése és konfigurálása Linux rendszerű virtuális gépen
- Konfigurálja az Azure Cloud Shellt , és – ha nincs hozzáférése Linux rendszerű virtuális géphez – hozzon létre egy virtuális gépet az Ansible használatával.
Virtuális hálózat és alhálózat létrehozása
Az ebben a szakaszban található forgatókönyvkód a következő Azure-erőforrásokat hozza létre:
- Virtuális hálózat
- A virtuális hálózaton belüli alhálózat
Mentse a következő forgatókönyvet vnet.yml
néven:
- 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
AKS-fürt létrehozása a virtuális hálózaton
Az ebben a szakaszban található forgatókönyvkód létrehoz egy AKS-fürtöt egy virtuális hálózaton belül.
Mentse a következő forgatókönyvet aks.yml
néven:
- name: List supported kubernetes version from Azure
azure_rm_aks_version:
location: "{{ location }}"
register: versions
- name: Create AKS cluster with 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: kubenet
pod_cidr: 192.168.0.0/16
docker_bridge_cidr: 172.17.0.1/16
dns_service_ip: 10.0.0.10
service_cidr: 10.0.0.0/16
register: aks
Az alábbiakban néhány fontos megjegyzést érdemes figyelembe venni a minta forgatókönyv használatakor:
A modul használatával
azure_rm_aks_version
keresse meg a támogatott verziót.Ez
vnet_subnet_id
az előző szakaszban létrehozott alhálózat.A
network_profile
kubenet hálózati beépülő modul tulajdonságait határozza meg.Ez
service_cidr
az AKS-fürt belső szolgáltatásainak IP-címhez való hozzárendelésére szolgál. Ennek az IP-címtartománynak olyan címtérnek kell lennie, amelyet nem használnak az AKS-fürtökön kívül. Azonban ugyanazt a szolgáltatás CIDR-t több AKS-fürthöz is felhasználhatja.A
dns_service_ip
címnek a szolgáltatás IP-címtartományának ".10" címének kell lennie.A
pod_cidr
címnek olyan nagy címtérnek kell lennie, amely nincs a hálózati környezetben máshol használva. A címtartománynak elég nagynak kell lennie ahhoz, hogy elférjen a várhatóan felskálázni kívánt csomópontok száma. Ezt a címtartományt a fürt üzembe helyezése után nem módosíthatja. A CIDR szolgáltatáshoz hasonlóan ennek az IP-tartománynak nem szabad az AKS-fürtön kívül léteznie, de biztonságosan újra felhasználható a fürtök között.A pod IP-címtartományával /24 címteret rendelhet a fürt minden csomóponthoz. Az alábbi példában a
pod_cidr
192.168.0.0/16 az első csomópontot a 192.168.0.0/24-et, a második csomópontot a 192.168.1.0/24-et, a harmadik csomópontot pedig a 192.168.2.0/24 csomópontot rendeli hozzá.A fürt méretezése vagy frissítése során az Azure továbbra is pod IP-címtartományt rendel minden új csomóponthoz.
A forgatókönyv betöltődik
ssh_key
innen~/.ssh/id_rsa.pub
: . Ha módosítja, használja az egysoros formátumot – kezdve az "ssh-rsa" formátummal (idézőjelek nélkül).A
client_id
rendszer betölti azclient_secret
értékeket az alapértelmezett hitelesítőadat-fájlból~/.azure/credentials
. Ezeket az értékeket beállíthatja a szolgáltatásnévre, vagy betöltheti ezeket az értékeket a környezeti változókból:client_id: "{{ lookup('env', 'AZURE_CLIENT_ID') }}" client_secret: "{{ lookup('env', 'AZURE_SECRET') }}"
A hálózati erőforrások társítása
AKS-fürt létrehozásakor létrejön egy hálózati biztonsági csoport és útvonaltábla. Ezeket az erőforrásokat az AKS felügyeli, és a szolgáltatások létrehozásakor és közzéteésekor frissülnek. Társítsa a hálózati biztonsági csoportot és az útvonaltáblát a virtuális hálózati alhálózathoz az alábbiak szerint.
Mentse a következő forgatókönyvet a következőként associate.yml
:
- name: Get route table
azure_rm_routetable_facts:
resource_group: "{{ node_resource_group }}"
register: routetable
- name: Get network security group
azure_rm_securitygroup_facts:
resource_group: "{{ node_resource_group }}"
register: nsg
- name: Parse subnet id
set_fact:
subnet_name: "{{ vnet_subnet_id | regex_search(subnet_regex, '\\1') }}"
subnet_rg: "{{ vnet_subnet_id | regex_search(rg_regex, '\\1') }}"
subnet_vn: "{{ vnet_subnet_id | regex_search(vn_regex, '\\1') }}"
vars:
subnet_regex: '/subnets/(.+)'
rg_regex: '/resourceGroups/(.+?)/'
vn_regex: '/virtualNetworks/(.+?)/'
- name: Associate network resources with the node subnet
azure_rm_subnet:
name: "{{ subnet_name[0] }}"
resource_group: "{{ subnet_rg[0] }}"
virtual_network_name: "{{ subnet_vn[0] }}"
security_group: "{{ nsg.ansible_facts.azure_securitygroups[0].id }}"
route_table: "{{ routetable.route_tables[0].id }}"
Az alábbiakban néhány fontos megjegyzést érdemes figyelembe venni a minta forgatókönyv használatakor:
- Az
node_resource_group
erőforráscsoport neve, amelyben az AKS-csomópontok létrejönnek. - Ez
vnet_subnet_id
az előző szakaszban létrehozott alhálózat.
A minta forgatókönyv futtatása
Ez a szakasz a cikkben létrehozott feladatokat meghívó teljes minta forgatókönyvet sorolja fel.
Mentse a következő forgatókönyvet aks-kubenet.yml
néven:
---
- hosts: localhost
vars:
resource_group: aksansibletest
name: aksansibletest
location: eastus
tasks:
- name: Ensure resource group exist
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: Associate network resources with the node subnet
vars:
vnet_subnet_id: "{{ subnet.state.id }}"
node_resource_group: "{{ aks.node_resource_group }}"
include_tasks: associate.yml
- name: Get details of the AKS
azure_rm_aks_facts:
name: "{{ name }}"
resource_group: "{{ resource_group }}"
show_kubeconfig: user
register: output
- name: Show AKS cluster detail
debug:
var: output.aks[0]
vars
A szakaszban végezze el a következő módosításokat:
resource_group
A kulcs esetében módosítsa az értéket azaksansibletest
erőforráscsoport nevére.name
A kulcs esetében módosítsa az értéket azaksansibletest
AKS-névre.Location
A kulcs esetében módosítsa az értéket azeastus
erőforráscsoport helyére.
Futtassa a teljes forgatókönyvet a ansible-playbook
következő paranccsal:
ansible-playbook aks-kubenet.yml
A forgatókönyv futtatása az alábbi kimenethez hasonló eredményeket jelenít meg:
PLAY [localhost]
TASK [Gathering Facts]
ok: [localhost]
TASK [Ensure resource group exist]
ok: [localhost]
TASK [Create vnet]
included: /home/devops/aks-kubenet/vnet.yml for localhost
TASK [Create vnet]
ok: [localhost]
TASK [Create subnet]
ok: [localhost]
TASK [Create AKS]
included: /home/devops/aks-kubenet/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 [Associate network resources with the node subnet]
included: /home/devops/aks-kubenet/associate.yml for localhost
TASK [Get route table]
ok: [localhost]
TASK [Get network security group]
ok: [localhost]
TASK [Parse subnet id]
ok: [localhost]
TASK [Associate network resources with the node subnet]
changed: [localhost]
TASK [Get details of the AKS]
ok: [localhost]
TASK [Show AKS cluster detail]
ok: [localhost] => {
"output.aks[0]": {
"id": /subscriptions/BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB/resourcegroups/aksansibletest/providers/Microsoft.ContainerService/managedClusters/aksansibletest",
"kube_config": "apiVersion: ...",
"location": "eastus",
"name": "aksansibletest",
"properties": {
"agentPoolProfiles": [
{
"count": 3,
"maxPods": 110,
"name": "nodepool1",
"osDiskSizeGB": 100,
"osType": "Linux",
"storageProfile": "ManagedDisks",
"vmSize": "Standard_D2_v2",
"vnetSubnetID": "/subscriptions/BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB/resourceGroups/aksansibletest/providers/Microsoft.Network/virtualNetworks/aksansibletest/subnets/aksansibletest"
}
],
"dnsPrefix": "aksansibletest",
"enableRBAC": false,
"fqdn": "aksansibletest-cda2b56c.hcp.eastus.azmk8s.io",
"kubernetesVersion": "1.12.6",
"linuxProfile": {
"adminUsername": "azureuser",
"ssh": {
"publicKeys": [
{
"keyData": "ssh-rsa ..."
}
]
}
},
"networkProfile": {
"dnsServiceIP": "10.0.0.10",
"dockerBridgeCidr": "172.17.0.1/16",
"networkPlugin": "kubenet",
"podCidr": "192.168.0.0/16",
"serviceCidr": "10.0.0.0/16"
},
"nodeResourceGroup": "MC_aksansibletest_pcaksansibletest_eastus",
"provisioningState": "Succeeded",
"servicePrincipalProfile": {
"clientId": "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA"
}
},
"type": "Microsoft.ContainerService/ManagedClusters"
}
}
PLAY RECAP
localhost : ok=15 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Clean up resources
Mentse a következő kódot.
delete_rg.yml
--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rg
Futtassa a forgatókönyvet az ansible-playbook paranccsal. Cserélje le a helyőrzőt a törölni kívánt erőforráscsoport nevére. Az erőforráscsoporton belüli összes erőforrás törlődik.
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
Főbb pontok:
register
A forgatókönyv változója ésdebug
szakasza miatt az eredmények a parancs befejeződésekor jelennek meg.
További lépések
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: