练习 - 使用 GitOps 和 Flux 将示例应用程序部署到群集
在本练习中,我们将使用 GitOps 和 Flux 将容器化 Linux 应用程序部署到已启用 Arc 的 AKS 边缘软件包群集。
创建演示应用程序 GitHub 存储库分支
如果还没有 GitHub 帐户,可立即创建一个。
导航到 Azure Arc 快速启动应用存储库,然后依次选择“分支”和“创建分支”,以将其分叉到你自己的 GitHub 帐户。
通过导航到帐户存储库并选择“azure-arc-jumpstart-apps”存储库,确认已成功创建分支。 存储库 URL 外观应如下所示:
https://github.com/<your-github-username>/azure-arc-jumpstart-apps
部署应用
在 Azure 门户中,导航到已启用 Arc 的 AKS 边缘软件包群集,然后在“设置”下选择“GitOps”。 让我们创建群集级配置和命名空间级配置。
选择“创建”,然后将以下值用于群集级别配置:
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 上可见后,然后再创建命名空间级配置(如果符合性处于挂起状态,则可以继续创建下一个配置)。选择“创建”,然后将以下值用于命名空间级别配置:
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 未启用 刷新配置表并等待配置安装完毕且合规。
在 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
要查看应用程序,请打开浏览器并导航到分配给
ingress-nginx-controller
服务的 EXTERNAL-IP 地址。 在前面的示例中,分配给服务的 IP 地址为 192.168.0.4。
更新应用程序
我们配置了 GitOps 和 Flux,以监视分支存储库主分支中的更改。 让我们对应用程序进行更改,并了解 GitOps 的响应方式。
在 azure-arc-jumpstart-apps 存储库的分支中,导航到“hello-arc > 版本 > 应用 > hello-arc.yaml”。
通过选择“编辑”来更改此 YAML 文件。 将“replicaCount”更改为“5”。 将“值”更改为“部署到 AKS 边缘软件包 GitOps!”。
通过依次选择“提交更改...”和“提交更改”来提交更改。
使用
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 拉取一次更改。
刷新应用程序以查看反映为滚动更新的此更改。
清理 Azure 资源
在本模块的学习过程中,你创建了 Azure 资源。 如果将来不需要使用这些资源,请通过在 Azure Cloud Shell 中运行 az group delete 和 az 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 资源和服务主体。