练习 - 使用 GitOps 和 Flux 将示例应用程序部署到群集

已完成

在本练习中,我们将使用 GitOps 和 Flux 将容器化 Linux 应用程序部署到已启用 Arc 的 AKS 边缘软件包群集。

创建演示应用程序 GitHub 存储库分支

如果还没有 GitHub 帐户,可立即创建一个

  1. 导航到 Azure Arc 快速启动应用存储库,然后依次选择“分支”和“创建分支”,以将其分叉到你自己的 GitHub 帐户

    Screenshot of Azure Arc Jumpstart Apps repository.

  2. 通过导航到帐户存储库并选择“azure-arc-jumpstart-apps”存储库,确认已成功创建分支。 存储库 URL 外观应如下所示:

    https://github.com/<your-github-username>/azure-arc-jumpstart-apps
    

部署应用

在 Azure 门户中,导航到已启用 Arc 的 AKS 边缘软件包群集,然后在“设置”下选择“GitOps”。 让我们创建群集级配置和命名空间级配置。

Screenshot of AKS Edge Essentials Kubernetes Azure Arc resource in Azure portal, with GitOps highlight.

  1. 选择“创建”,然后将以下值用于群集级别配置:

    Attribute 输入
    基础知识
    配置名称 config-nginx
    命名空间 ingress-nginx
    范围 群集
    类型 Flux v2
    Source
    源类型 Git 存储库
    存储库 URL <分支的 URL>
    引用类型 分支
    分支 main
    存储库类型 公用
    同步间隔 1
    同步超时 10
    Kustomizations
    Kustomizations 选择“创建”
    实例名称 nginx
    路径 ./nginx/release
    同步间隔 10
    同步超时 10
    删除 Enabled
    Force 未启用

    注意

    请先等待 config-nginx 已成功创建并在 Azure 门户 GitOps 上可见后,然后再创建命名空间级配置(如果符合性处于挂起状态,则可以继续创建下一个配置)。

  2. 选择“创建”,然后将以下值用于命名空间级别配置:

    Attribute 输入
    基础知识
    配置名称 config-helloarc
    命名空间 hello-arc
    范围 命名空间
    类型 Flux v2
    Source
    源类型 Git 存储库
    存储库 URL <分支的 URL>
    引用类型 分支
    分支 main
    存储库类型 公用
    同步间隔 1
    同步超时 10
    Kustomizations
    Kustomizations 选择“创建”
    实例名称 app
    路径 ./hello-arc/releases/app
    同步间隔 10
    同步超时 10
    删除 Enabled
    Force 未启用
  3. 刷新配置表并等待配置安装完毕且合规。

    Screenshot of cluster-level and namespace-level configurations in Azure portal.

  4. 在 VM 中,使用 kubectl 检查服务是否正在运行:

    kubectl get svc -n ingress-nginx
    kubectl get pods -n hello-arc
    

    以下示例输出显示服务正在运行:

    PS C:\akseeLearn> kubectl get svc -n ingress-nginx
    NAME                                 TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
    ingress-nginx-controller             LoadBalancer   10.43.136.240   192.168.0.4   80:31838/TCP,443:30386/TCP   18m
    ingress-nginx-controller-admission   ClusterIP      10.43.11.51     <none>        443/TCP                      18m
    PS C:\akseeLearn> kubectl get pods -n hello-arc
    NAME                         READY   STATUS    RESTARTS   AGE
    hello-arc-7c66864f8d-662b7   1/1     Running   0          12m
    hello-arc-7c66864f8d-fdbkc   1/1     Running   0          12m
    hello-arc-7c66864f8d-prb2v   1/1     Running   0          12m
    
  5. 要查看应用程序,请打开浏览器并导航到分配给 ingress-nginx-controller 服务的 EXTERNAL-IP 地址。 在前面的示例中,分配给服务的 IP 地址为 192.168.0.4

    Screenshot of Windows VM with linux sample application running in the browser.

更新应用程序

我们配置了 GitOps 和 Flux,以监视分支存储库主分支中的更改。 让我们对应用程序进行更改,并了解 GitOps 的响应方式。

  1. 在 azure-arc-jumpstart-apps 存储库的分支中,导航到“hello-arc > 版本 > 应用 > hello-arc.yaml”

  2. 通过选择“编辑”来更改此 YAML 文件。 将“replicaCount”更改为“5”。 将“值”更改为“部署到 AKS 边缘软件包 GitOps!”

  3. 通过依次选择“提交更改...”和“提交更改”来提交更改。

    Screenshot of application changes in the GitHub repository.

  4. 使用 kubectl 查看即将停用的旧 Pod 和即将上线的新 Pod:

    kubectl get pods -n hello-arc -w
    

    以下示例输出显示了即将停用的旧 Pod 和即将上线的新 Pod:

    PS C:\akseeLearn> kubectl get pods -n hello-arc -w
    NAME                         READY   STATUS    RESTARTS   AGE
    hello-arc-699dff9888-5mcjs   1/1     Running   0          19m
    hello-arc-699dff9888-qrsfw   1/1     Running   0          19m
    hello-arc-699dff9888-xm82r   1/1     Running   0          19m
    hello-arc-699dff9888-mpdxt   0/1     Pending   0          0s
    hello-arc-699dff9888-mpdxt   0/1     Pending   0          0s
    hello-arc-699dff9888-cvkgf   0/1     Pending   0          0s
    hello-arc-699dff9888-cvkgf   0/1     Pending   0          0s
    hello-arc-699dff9888-mpdxt   0/1     ContainerCreating   0          0s
    hello-arc-699dff9888-cvkgf   0/1     ContainerCreating   0          0s
    hello-arc-699dff9888-cvkgf   0/1     Running             0          1s
    hello-arc-699dff9888-mpdxt   0/1     Running             0          1s
    hello-arc-699dff9888-mpdxt   1/1     Running             0          2s
    hello-arc-699dff9888-cvkgf   1/1     Running             0          2s
    

    注意

    由于我们在创建配置时将“同步间隔”设置为“1 分钟”,因此 Flux 将会每分钟从 GitHub 拉取一次更改

  5. 刷新应用程序以查看反映为滚动更新的此更改。

    Screenshot of Windows VM with updated linux sample application running in the browser.

清理 Azure 资源

在本模块的学习过程中,你创建了 Azure 资源。 如果将来不需要使用这些资源,请通过在 Azure Cloud Shell 中运行 az group deleteaz ad sp delete 命令来删除该资源组和服务主体:

az group delete --name "aksedge-training" --force-deletion-types Microsoft.Compute/virtualMachines
az ad sp delete --id "<your-service-principal-ID>"

重要

为了避免产生不必要的费用,必须移除本模块中所使用的 Azure 资源和服务主体。