教程:使用 Ansible 在 Azure 中配置 Azure Kubernetes 服务 (AKS) 群集

重要

运行本文中的示例 playbook 需要 Ansible 2.8(或更高版本)。

可使用 Azure Kubernetes 服务 (AKS) 在 Azure 中轻松地部署托管的 Kubernetes 群集。 AKS 通过将大量管理工作量卸载到 Azure,来降低管理 Kubernetes 所产生的复杂性和操作开销。 作为一个托管 Kubernetes 服务,Azure 可以自动处理运行状况监视和维护等关键任务。 Kubernetes 主节点由 Azure 管理。 用户仅管理和维护代理节点。 作为托管型 Kubernetes 服务,AKS 是免费的 - 只需支付群集中代理节点的费用,不需要支付主节点的费用。

AKS 可配置为使用 Microsoft Entra ID 进行用户身份验证。 配置后,可以使用 Microsoft Entra 身份验证令牌登录到 AKS 群集。 RBAC 可基于用户标识或目录组成员身份。

在本文中,学习如何:

  • 创建 AKS 群集
  • 配置 AKS 群集

先决条件

  • Azure 订阅:如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
  • Azure 服务主体创建服务主体,记下以下值:appId、displayName、密码和租户 。

创建托管的 AKS 群集

示例 playbook 会创建资源组,并在资源组中创建 AKS 群集。

将以下 playbook 保存为 azure_create_aks.yml

- name: Create Azure Kubernetes Service
  hosts: localhost
  connection: local
  vars:
    resource_group: myResourceGroup
    location: eastus
    aks_name: myAKSCluster
    username: azureuser
    ssh_key: "your_ssh_key"
    client_id: "your_client_id"
    client_secret: "your_client_secret"
    aks_version: aks_version
  tasks:
  - name: Create resource group
    azure_rm_resourcegroup:
      name: "{{ resource_group }}"
      location: "{{ location }}"
  - name: Create a managed Azure Container Services (AKS) cluster
    azure_rm_aks:
      name: "{{ aks_name }}"
      location: "{{ location }}"
      resource_group: "{{ resource_group }}"
      dns_prefix: "{{ aks_name }}"
      kubernetes_version: "{{aks_version}}"
      linux_profile:
        admin_username: "{{ username }}"
        ssh_key: "{{ ssh_key }}"
      service_principal:
        client_id: "{{ client_id }}"
        client_secret: "{{ client_secret }}"
      agent_pool_profiles:
        - name: default
          count: 2
          vm_size: Standard_D2_v2
      tags:
        Environment: Production

运行 playbook 之前,请参阅以下说明:

  • tasks 中的第一部分定义了 eastus 位置中名为 myResourceGroup 的资源组。
  • tasks 中的第二部分定义了 myResourceGroup 资源组中名为 myAKSCluster 的 AKS 群集。
  • 对于 your_ssh_key 占位符,请以单行格式输入你的 RSA 公钥 - 以 "ssh-rsa" 开头(不含引号)。
  • 对于 aks_version 占位符,请使用 az aks get-versions 命令。

使用 ansible-playbook 运行 playbook

ansible-playbook azure_create_aks.yml

运行 playbook 会显示如下所示的结果:

PLAY [Create AKS] 

TASK [Gathering Facts] 
ok: [localhost]

TASK [Create resource group] 
changed: [localhost]

TASK [Create an Azure Container Services (AKS) cluster] 
changed: [localhost]

PLAY RECAP 
localhost                  : ok=3    changed=2    unreachable=0    failed=0

缩放 AKS 节点

前一部分中的示例 playbook 定义了两个节点。 可通过修改 agent_pool_profiles 块中的 count 值来调整节点数量。

将以下 playbook 保存为 azure_configure_aks.yml

- name: Scale AKS cluster
  hosts: localhost
  connection: local
  vars:
    resource_group: myResourceGroup
    location: eastus
    aks_name: myAKSCluster
    username: azureuser
    ssh_key: "your_ssh_key"
    client_id: "your_client_id"
    client_secret: "your_client_secret"
  tasks:
  - name: Scaling an existed AKS cluster
    azure_rm_aks:
        name: "{{ aks_name }}"
        location: "{{ location }}"
        resource_group: "{{ resource_group }}"
        dns_prefix: "{{ aks_name }}"
        linux_profile:
          admin_username: "{{ username }}"
          ssh_key: "{{ ssh_key }}"
        service_principal:
          client_id: "{{ client_id }}"
          client_secret: "{{ client_secret }}"
        agent_pool_profiles:
          - name: default
            count: 3
            vm_size: Standard_D2_v2

运行 playbook 之前,请参阅以下说明:

  • 对于 your_ssh_key 占位符,请以单行格式输入你的 RSA 公钥 - 以 "ssh-rsa" 开头(不含引号)。

使用 ansible-playbook 运行 playbook

ansible-playbook azure_configure_aks.yml

运行 playbook 会显示如下所示的结果:

PLAY [Scale AKS cluster] 

TASK [Gathering Facts] 
ok: [localhost]

TASK [Scaling an existed AKS cluster] 
changed: [localhost]

PLAY RECAP 
localhost                  : ok=2    changed=1    unreachable=0    failed=0

删除托管的 AKS 群集

示例 playbook 会删除 AKS 群集。

将以下 playbook 保存为 azure_delete_aks.yml

- name: Delete a managed Azure Container Services (AKS) cluster
  hosts: localhost
  connection: local
  vars:
    resource_group: myResourceGroup
    aks_name: myAKSCluster
  tasks:
  - name:
    azure_rm_aks:
      name: "{{ aks_name }}"
      resource_group: "{{ resource_group }}"
      state: absent

使用 ansible-playbook 运行 playbook

ansible-playbook azure_delete_aks.yml

运行 playbook 会显示如下所示的结果:

PLAY [Delete a managed Azure Container Services (AKS) cluster] 

TASK [Gathering Facts] 
ok: [localhost]

TASK [azure_rm_aks] 

PLAY RECAP 
localhost                  : ok=2    changed=1    unreachable=0    failed=0

后续步骤