16、深入了解Azure Arc启用的Kubernetes:功能、架构与操作指南

Azure Arc赋能Kubernetes详解

深入了解Azure Arc启用的Kubernetes:功能、架构与操作指南

1. 概述

Azure Arc是一种云解决方案,可满足组织的本地和多云管理需求,它将Azure功能扩展到Azure外部的环境。Azure Arc启用的Kubernetes(Arc K8s)允许将运行在本地或非Azure云的Kubernetes集群连接到Azure,为任何地方运行的工作负载带来统一的Azure管理体验。

1.1 关键概念

在Arc K8s集群中,有多个重要的配置参数:
- Operator Instance name
- Operator namespace
- Repository URL
- Operator scope (Namespace/Cluster)
- Operator type
- Operator params
- Helm (Enabled/Disabled)

每个Arc K8s集群可以有多个sourceControlConfigurations,这些配置可以作用于命名空间或集群级别,适用于有多环境或多租户需求的组织。

1.2 可用区域

目前,Azure Arc启用的Kubernetes在以下特定区域可用:
- East US
- West Europe
- West Central US
- South Central US
- Southeast Asia
- UK South
- West US 2
- Australia East
- East US 2
- North Europe
- Central US
- US Gov Virginia
- France Central
- Korea Central
- Japan East
- East Asia

微软会随着时间增加更多支持的区域,建议查看官方文档获取最新信息。

1.3 支持的Kubernetes发行版

Azure Arc启用的Kubernetes支持任何经过云原生计算基金会(CNCF)认证的Kubernetes发行版,例如:
- Kind
- MicroK8s
- Rancher K3s
- AKS (Azure Kubernetes Service)
- AKS on Azure Stack HCI
- EKS (Amazon Elastic Kubernetes Service)
- GKE (Google Kubernetes Engine)
- ACK (Alibaba Cloud Container Service for Kubernetes)
- Azure Red Hat OpenShift

2. 功能与优势

2.1 核心功能

Azure Arc启用的Kubernetes通过扩展和GitOps将许多Azure的原生功能引入到Kubernetes集群,包括:
- 利用Azure Monitor和Microsoft Defender for Cloud进行监控和保护
- 使用Azure Arc和Azure Policy管理集群
- 利用Azure Active Directory RBAC进行授权和访问控制
- 与GitOps(Flux GitOps操作员)集成
- 通过GitOps部署应用程序和配置
- 通过GitOps部署Helm图表
- 部署物联网工作负载到边缘
- 在任何Arc启用的Kubernetes集群上运行Azure App Service、Functions、Event Grid、Azure API Management和Logic Apps
- 通过Microsoft Open Service Mesh在集群上实现服务网格

2.2 与其他产品的比较

产品 特点
Azure Arc K8s 集中管理本地或公共云(包括Azure、GCP、AWS、边缘、物联网和混合环境)的Kubernetes集群,将Azure原生工具和GitOps扩展到外部集群
Rancher 集中管理和预配本地或公共云(包括Azure、GCP和AWS)的Kubernetes集群,将Rancher界面、应用程序目录、GitOps和开源工具扩展到外部集群
Azure Stack Hub/AWS Outposts 支持混合云场景,Azure Stack允许在本地数据中心运行Azure,AWS Outposts允许在本地数据中心运行AWS
Anthos 谷歌提供的托管应用程序平台,将GCP容器服务扩展到任何环境,侧重于将工作负载迁移到GKE上运行的容器

2.3 使用案例

Azure Arc启用的Kubernetes有助于解决以下使用案例:
- 跨Azure、Google Cloud Platform和Amazon Web Services云的应用程序一致性
- 为矿业公司集中管理多个边缘位置的物联网应用程序
- 将Azure PaaS服务引入本地以满足额外的合规性要求

3. 架构解析

Azure Arc启用的Kubernetes是运行在Azure中的PaaS服务,用于管理多个Kubernetes集群,无论它们位于何处。其架构由Azure服务、资源、工具、代理以及在投影Kubernetes集群上运行的多个部署和Pod组成。

3.1 资源提供者

在运行Azure Arc启用的Kubernetes的Azure订阅中,需要以下资源提供者来支持该服务:
- Microsoft.Kubernetes
- Microsoft.KubernetesConfiguration
- Microsoft.ExtendedLocation

3.2 网络要求

投影Kubernetes集群上需要运行Azure Arc启用的Kubernetes代理,为了使代理正常工作,需要在投影Kubernetes集群网络上允许以下网络端口和协议/端点出站URL:
- 端口
- TCP on port 443和TCP on port 9418
- 端点(DNS)允许从投影Kubernetes集群出站
- https://management.azure.com
- https://eastus.dp.kubernetesconfiguration.azure.com
- https://westeurope.dp.kubernetesconfiguration.azure.com
- https://login.microsoftonline.com
- https://mcr.microsoft.com
- https://eus.his.arc.azure.com
- https://weu.his.arc.azure.com

3.3 命名空间和操作员

投影Kubernetes集群加入后,将运行一个名为“azure-arc”的命名空间,并且在该命名空间中有多个操作员作为部署运行:
- config-agent :监控投影Kubernetes集群,在应用sourceControlConfiguration资源时更新合规状态。
- controller-manager :协调Azure Arc组件之间的交互,用于操作其他操作员。
- metrics-agent :收集其他Arc代理的指标,以测量性能并确保其最佳状态。
- cluster-metadata-operator :收集集群和Azure Arc代理的版本、集群元数据和节点计数。
- resource-sync-agent :将cluster-metadata-operator收集的元数据与Azure Arc同步。
- clusteridentityoperator :持有托管服务标识(MSI)证书,供其他操作员与Azure通信。
- flux-logs-agent :作为sourceControlConfiguration的一部分,收集Flux操作员的日志。

3.4 运行的Pod

在“azure-arc”命名空间中,还会有一些Pod运行,例如:
- cluster-metadata-operator-b88f6695d-rf998
- clusteridentityoperator-6459fd778c-4wx66
- config-agent-6cc967f5-kd8b8
- controller-manager-557d758b9f-f69vw
- flux-logs-agent-5db8bff9d4-gktl4
- metrics-agent-997cf95d5-h96gd
- resource-sync-agent-587b999567-4kz64

4. 连接Kubernetes集群到Azure Arc

在使用Azure Arc启用的Kubernetes之前,需要将外部Kubernetes集群连接到Azure Arc,具体步骤如下:

4.1 准备工作

在连接之前,需要完成以下先决条件:
1. 创建Azure服务主体(SP) :在Azure订阅中创建一个具有对Microsoft.Kubernetes/connectedClusters资源类型读写权限的服务主体。可以使用以下命令在Azure Cloud Shell中创建:

az ad sp create-for-rbac --name <SPNNAME> --role contributor --scope /subscriptions/<SUBSCRIPTIONID>

创建后,务必将输出复制到安全的地方,示例输出如下:

{
  "appId": "138r8633-v9g3-4f90-80d9-hg7924c823f9",
  "displayName": " SPNNAME ",
  "name": "http:// SPNNAME",
  "password": "5g2c85va-43ds-31f0-o6c6-rbg2c5av472g",
  "tenant": "9uh4qq35-q432-4j2v-h20r-6o24b11p53TW"
}
  1. 注册资源提供者 :在Azure订阅中注册以下资源提供者:
az provider register --namespace Microsoft.Kubernetes
az provider register --namespace Microsoft.KubernetesConfiguration
az provider register --namespace Microsoft.ExtendedLocation
  1. 安装Helm :根据不同的平台,有多种安装Helm的方法,建议参考官方安装指南:https://helm.sh/docs/intro/install
  2. 安装或更新Azure CLI :将Azure CLI安装或更新到2.15.0或更高版本,可以在Windows、macOS和Linux环境中安装,也可以作为Docker容器运行,或者使用预安装在Azure Cloud Shell中的版本。安装指南:https://docs.microsoft.com/en-us/cli/azure/install-azure-cli
  3. 安装Azure Arc K8s CLI扩展 :安装用于管理外部Kubernetes集群的扩展:
az extension add --name connectedk8s
az extension add --name k8s-configuration

4.2 连接集群

完成准备工作后,按照以下步骤连接Kubernetes集群到Azure Arc:
1. 使用服务主体登录Azure订阅 :在外部Kubernetes集群所在的shell中运行以下命令:

az login --service-principal --username SPID --password SPPWD --tenant SPTENANTID
  1. 创建资源组 :为投影Kubernetes集群创建一个资源组:
az group create –location LOCATIONHERE --name RGNAME --subscription SUBSCRIPTIONID
  1. 连接集群 :将外部Kubernetes集群连接到Azure Arc K8s:
az connectedk8s connect --name ARCK8SCLUSTERNAME --resource-group RGNAME --location LOCATIONHERE --tags ’Environment=dev-arc-cluster1’

连接成功后,投影Kubernetes集群将在Azure门户中显示为一个资源,具有标签、Azure资源管理器ID和托管标识。

5. 使用Azure Arc和Azure Monitor监控Kubernetes集群

监控投影Kubernetes集群及其上运行的容器对于确保环境健康至关重要。Azure Monitor Container Insights可以为连接到Azure Arc启用的Kubernetes的投影Kubernetes集群提供监控。

5.1 功能概述

Azure Monitor for Containers可以提供性能可见性,收集投影Kubernetes节点和容器的内存和CPU利用率指标。目前,它不支持实时数据。具体功能包括:
- 监控Kubernetes集群及其节点的性能
- 识别在节点上运行的容器及其平均处理器和内存利用率
- 确定容器在控制器或Pod中的位置
- 了解集群在平均和最重负载下的行为
- 与Prometheus集成,通过查询查看从节点和Kubernetes收集的应用程序和工作负载指标

5.2 先决条件

在启用Azure Monitor Container Insights监控之前,需要满足以下先决条件:
- 配置了Azure Monitor for Containers的Log Analytics工作区
- 至少是Azure订阅中Azure Contributor角色的成员
- 是配置了Azure Monitor for Containers的Log Analytics工作区的Log Analytics Contributor角色的成员
- 是Azure Arc集群资源的Contributor角色的成员
- 具有Log Analytics reader角色权限
- 用于为指定Kubernetes集群安装Azure Monitor for Containers图表的HELM客户端
- 允许以下Microsoft监控端点通过任何防火墙:
- .ods.opinsights.azure.com
-
.oms.opinsights.azure.com
- dc.services.visualstudio.com
- *.monitoring.azure.com
- login.microsoftonline.com
- 所有端口443

5.3 接入方法

有三种方法可以将投影Kubernetes集群接入Azure Monitor Container Insights:

5.3.1 从Azure Monitor刀片
  1. 在Azure门户中,导航到“Monitor”刀片,选择“Insights”菜单下的“Containers”选项。
  2. 选择“Unmonitored clusters”选项卡,查看可以启用监控的Azure Arc启用的Kubernetes集群。
  3. 点击要启用监控的集群旁边的“Enable”链接。
  4. 选择Log Analytics工作区并选择“Configure”按钮继续。
5.3.2 从投影K8s集群资源刀片
  1. 在Azure门户中,选择要监控的投影Kubernetes集群。
  2. 选择资源刀片的“Monitoring”部分下的“Insights (preview)”项。
  3. 在接入页面上,选择“Configure Azure Monitor”按钮。
  4. 选择要发送指标和日志数据的Log Analytics工作区。
  5. 选择“Configure”按钮部署Azure Monitor Container Insights集群扩展。
5.3.3 从投影K8s集群资源
  1. 下载“enable monitoring AKA OMS”脚本:
curl -o enable-monitoring.sh -L https://aka.ms/enable-monitoring-bash-script
  1. 获取Azure Arc连接集群的Azure资源ID:
export azureArcClusterResourceId=$(az resource show --resource-group PROJECTEDK8SRESOURCEGROUP --name PROJECTEDK8SCLUSTERNAME --resource-type "Microsoft.Kubernetes/connectedClusters" --query id -o tsv)
  1. 从当前KubeContext获取投影Kubernetes集群的凭据:
export kubeContext="$(kubectl config current-context)"
  1. 运行启用监控脚本:
bash enable-monitoring.sh --resource-id $azureArcClusterResourceId --client-id SPNID --client-secret SPNPASSWORD --tenant-id TENANTID --kube-context $kubeContext

通过以上步骤,你可以全面了解Azure Arc启用的Kubernetes的功能、架构、连接方法和监控方式,为在不同环境中管理Kubernetes集群提供有力支持。

6. 利用Azure Arc和GitOps部署配置与应用

GitOps是一种将Git作为声明性基础设施和应用程序交付的单一事实来源的实践。在Azure Arc启用的Kubernetes中,结合GitOps可以实现自动化的配置和应用部署。

6.1 核心概念

在使用GitOps与Azure Arc启用的Kubernetes时,有几个关键的配置参数:
- Operator Instance name :操作员实例名称,用于标识特定的操作员实例。
- Operator namespace :操作员所在的命名空间。
- Repository URL :存储配置和应用定义的Git仓库URL。
- Operator scope (Namespace/Cluster) :操作员的作用范围,可以是命名空间级别或集群级别。
- Operator type :操作员的类型。
- Operator params :操作员的参数。
- Helm (Enabled/Disabled) :是否启用Helm进行部署。

6.2 工作流程

以下是利用GitOps和Azure Arc启用的Kubernetes部署配置和应用的工作流程:

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px

    A(定义配置和应用):::process --> B(推送到Git仓库):::process
    B --> C(Azure Arc K8s Agent监控仓库):::process
    C --> D{有变更?}:::process
    D -- 是 --> E(拉取变更):::process
    E --> F(应用到Kubernetes集群):::process
    D -- 否 --> C(继续监控):::process

6.3 具体操作

  1. 创建sourceControlConfiguration资源 :在Kubernetes集群中创建一个sourceControlConfiguration资源,指定Git仓库的URL和其他配置参数。
apiVersion: kubernetesconfiguration.azure.com/v1
kind: SourceControlConfiguration
metadata:
  name: my-gitops-config
  namespace: azure-arc
spec:
  repositoryUrl: https://github.com/myorg/myrepo.git
  operatorInstanceName: my-operator
  operatorNamespace: azure-arc
  operatorParams: --git-branch=main
  operatorScope: Cluster
  helmOperator:
    enabled: true
  1. 应用资源 :使用 kubectl 将上述资源应用到Kubernetes集群。
kubectl apply -f my-gitops-config.yaml
  1. 验证部署 :在Azure门户或使用 kubectl 检查配置和应用是否成功部署到Kubernetes集群。

7. 安全与合规性

Azure Arc启用的Kubernetes提供了一系列安全和合规性功能,帮助用户保护其Kubernetes集群和工作负载。

7.1 安全功能

  • Azure Active Directory RBAC :利用Azure Active Directory进行基于角色的访问控制,确保只有授权用户可以访问Kubernetes集群。
  • Microsoft Defender for Cloud :集成Microsoft Defender for Cloud,提供实时威胁检测和防护。
  • Azure Policy :使用Azure Policy定义和实施安全策略,确保集群和工作负载符合组织的安全标准。

7.2 合规性支持

Azure Arc启用的Kubernetes支持多种合规性标准,例如:
| 合规性标准 | 说明 |
| ---- | ---- |
| GDPR | 支持欧盟通用数据保护条例,保护用户数据隐私。 |
| HIPAA | 符合美国健康保险流通与责任法案,适用于医疗保健行业。 |
| SOC | 满足服务组织控制标准,确保服务的安全性和可靠性。 |

7.3 操作步骤

  1. 配置Azure Active Directory RBAC
    • 在Azure门户中创建Azure Active Directory组和角色。
    • 将这些组和角色映射到Kubernetes集群的角色和角色绑定。
  2. 启用Microsoft Defender for Cloud
    • 在Azure门户中启用Microsoft Defender for Cloud。
    • 配置 Defender for Cloud 以监控Kubernetes集群。
  3. 应用Azure Policy
    • 在Azure门户中定义和分配Azure Policy。
    • 定期检查集群的合规性状态。

8. 成本与定价

Azure Arc启用的Kubernetes的定价具有独特性,目前在管理Azure Arc启用的服务器和Kubernetes集群时,不收取额外费用。

8.1 免费功能

Azure Arc控制平面功能(包括服务器和Kubernetes)是免费提供的,这些功能包括:
- 连接服务器和Kubernetes集群到Azure。
- 通过Azure管理组和标签进行资源组织。
- 通过资源图进行搜索和索引。
- 通过Azure RBAC和Azure订阅进行访问和安全控制。
- 通过ARM模板和Azure扩展进行环境和自动化配置。

8.2 其他成本考虑

虽然Azure Arc启用的Kubernetes本身免费,但在使用过程中可能会产生其他成本,例如:
- Azure服务使用费用 :如果使用了其他Azure服务(如Azure Monitor、Microsoft Defender for Cloud等),将按照相应的服务定价收费。
- 网络成本 :确保Kubernetes集群与Azure之间的网络连接可能会产生一定的网络费用。

8.3 成本优化建议

  • 合理规划资源使用 :根据实际需求合理配置Kubernetes集群的资源,避免资源浪费。
  • 定期审查服务使用情况 :定期审查使用的Azure服务,停用不必要的服务。

9. 未来发展趋势

Azure Arc启用的Kubernetes是一个不断发展的技术,未来有几个值得关注的发展趋势。

9.1 功能增强

微软将继续为Azure Arc启用的Kubernetes添加更多功能和能力,例如:
- 支持更多的Kubernetes发行版和云环境。
- 增强GitOps集成,提供更高级的自动化和部署功能。
- 进一步优化安全和合规性功能。

9.2 生态系统集成

Azure Arc启用的Kubernetes将与更多的开源和商业工具集成,例如:
- 与Prometheus、Grafana等监控工具更紧密地集成。
- 支持更多的CI/CD工具,实现更高效的持续集成和持续部署。

9.3 行业应用拓展

随着技术的成熟,Azure Arc启用的Kubernetes将在更多行业得到应用,例如:
- 金融行业:用于管理分布式金融应用和交易系统。
- 医疗行业:支持医疗数据处理和分析的Kubernetes集群管理。

通过深入了解Azure Arc启用的Kubernetes的功能、架构、操作方法、安全与合规性、成本以及未来发展趋势,用户可以更好地利用这一技术来管理和优化其Kubernetes集群,实现多云和混合云环境下的高效工作负载部署和管理。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值