24、利用 Azure CLI 与 Kubernetes 部署微服务
本文介绍了如何利用 Azure CLI 和 Kubernetes 部署微服务。内容涵盖 Azure CLI 的安装与认证、通过 AKS 连接 Kubernetes 集群、构建并发布 Docker 镜像到容器注册表、创建 Kubernetes 部署配置以及将微服务部署到云集群的具体步骤。同时,还提供了部署流程的总结、关键步骤解析、常见问题解决方法及生产部署的注意事项,帮助读者掌握完整的微服务云端部署
利用 Azure CLI 与 Kubernetes 部署微服务
1. 使用 Azure CLI
使用 Azure 门户用户界面是在 Azure 上创建基础设施的便捷方式。但为了将 kubectl 连接到基于云的集群,我们需要使用 Azure CLI 工具。以下是使用 Azure CLI 的步骤:
1. 安装 Azure CLI
- 访问 安装说明 ,选择适合你平台的安装方式并完成安装。
- 安装后,在终端中运行以下命令测试:
az --version
- 撰写本文时,使用的版本是 2.51.0,未来版本应向后兼容。
- Azure CLI 认证
- 在使用 Azure CLI 之前,需在终端中使用以下命令进行认证:
az login
- 运行该命令会打开浏览器,你可以在其中登录 Azure 账户。若未自动打开浏览器,按输出中的说明操作。若没有可用浏览器或浏览器无法打开,使用 `az login --use-device-code`。
- `az login` 命令完成后,会显示 JSON 格式的 Azure 订阅列表。若刚注册 Azure,可能只有一个订阅;若用于工作,可能会列出多个订阅。
- 认证信息会本地保存,之后可直接对 Azure 账户执行其他命令,无需每次都登录。可使用以下命令查看当前使用的订阅:
az account show
- 还可查看所有订阅列表:
az account list
- 若需更改当前工作订阅,使用以下命令设置新的默认订阅:
az account set --subscription=<subscription-id>
- 替换 `<subscription-id>` 为你想设置为默认的订阅 ID。更改后,再次运行 `az account show` 确认。
- 将 kubectl 连接到 Kubernetes
- 安装并认证 Azure CLI 后,可使用
aks get-credentials子命令下载凭证,将kubectl连接到 Azure 上的 Kubernetes 集群。 - 命令示例:
- 安装并认证 Azure CLI 后,可使用
az aks get-credentials --resource-group bmdk1 --name bmdk1
- 你需要使用自己的资源组和集群名称。通用命令格式为:
az aks get-credentials --resource-group <resource-group> --name <cluster>
- 可在 [这里](http://mng.bz/yZeo) 查看 `aks get-credentials` 子命令的文档。
- 配置好 `kubectl` 后,可使用以下命令检查连接的集群:
kubectl config current-context
- 查看连接上下文列表:
kubectl config get-contexts
- 切换连接上下文:
kubectl config use-context <context-name>
- 连接到 Kubernetes 集群后,可使用以下命令测试连接:
kubectl get pods
kubectl get pods --namespace kube-system
2. 部署到生产集群
完成 Kubernetes 集群创建后,准备将微服务部署到集群,步骤如下:
1. 需要容器注册表
- 要部署到基于云的集群,微服务的镜像必须发布到云容器注册表。若之前创建的容器注册表仍可用,可直接复用;否则,通过 Azure 门户创建。
2. 将镜像发布到容器注册表
- 发布镜像前,先构建镜像。在终端中执行以下命令:
cd chapter-6/example-2
docker build -t video-streaming:1 --file Dockerfile-prod .
- 注意 `docker build` 命令末尾的 `.` 不能遗漏。
- 给镜像打标签,需插入容器注册表的 URL:
docker tag video-streaming:1 <registry-url>/video-streaming:1
- 每次构建和发布微服务的新版本时,记得增加版本号。
- 发布镜像前,登录容器注册表:
docker login <registry-url>
- 然后将镜像推送到容器注册表:
docker push <registry-url>/video-streaming:1
- 若推送镜像时遇到问题,检查标签是否正确。
- 将容器注册表连接到 Kubernetes 集群
- 部署微服务前,需将容器注册表和 Kubernetes 集群连接,使集群能从注册表拉取镜像而无需认证。
- 示例命令:
az aks update --resource-group bmdk1 --name bmdk1 --attach-acr bmdk1
- 通用命令格式:
az aks update --resource-group <resource-group> --name <cluster> --attach-acr <registry>
- 若未连接容器注册表和集群,集群将无法从注册表拉取微服务镜像。若遇到 `ErrImagePull` 或 `ImagePullBackOff` 错误,说明此步骤未正确完成。可在 [这里](http://mng.bz/amG9) 查看 `aks update` 命令的更多信息。
- 创建 Kubernetes 部署配置
- 以下是生产部署的 Kubernetes 配置示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: video-streaming
spec:
replicas: 1
selector:
matchLabels:
app: video-streaming
template:
metadata:
labels:
app: video-streaming
spec:
containers:
- name: video-streaming
image: bmdk1.azurecr.io/video-streaming:1
imagePullPolicy: IfNotPresent
env:
- name: PORT
value: "4000"
---
apiVersion: v1
kind: Service
metadata:
name: video-streaming
spec:
selector:
app: video-streaming
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 4000
- 与本地部署配置的区别:
- 部署的镜像为刚发布到容器注册表的镜像,需将 URL 替换为自己的容器注册表 URL。
- 镜像拉取策略设置为 `IfNotPresent`,即集群中不存在镜像时从容器注册表拉取。
- 服务类型设置为 `LoadBalancer`,Azure 会创建负载均衡器并分配 IP,可从外部访问微服务。使用 `LoadBalancer` 类型时需谨慎,虽便于测试,但会使微服务暴露在外。
- 将微服务部署到 Kubernetes
- 部署到云集群与本地 Kubernetes 实例的操作相同:
cd chapter-6/example-2
kubectl apply -f scripts/deploy.yaml
- `-f` 参数指定要在集群中创建对象的配置文件。
- 部署完成后,运行以下命令检查创建的对象:
kubectl get pods
kubectl get deployments
kubectl get services
- 若部署微服务遇到问题,可参考相关调试内容。
- 测试已部署的微服务
- 微服务部署后,需测试其是否正常运行。设置服务类型为
LoadBalancer后,会分配外部可访问的 IP。 - 使用以下命令查看 IP 地址:
- 微服务部署后,需测试其是否正常运行。设置服务类型为
kubectl get services
- 示例输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP
video-streaming LoadBalancer 10.0.221.252 20.127.176.147 80:32545/TCP
- 从输出中提取 IP 地址,在浏览器中访问 `http://<IP>/video` 测试微服务。若视频能播放,说明微服务正常工作。
- 删除部署
- 测试完成后,可删除部署以清理集群:
kubectl delete -f scripts/deploy.yaml
- 可再次运行 `kubectl get pods`、`kubectl get deployments` 和 `kubectl get services` 确认所有创建的对象已删除。可多次练习部署和删除微服务,每次更改代码并重建镜像时,记得增加版本号。
- 销毁基础设施
- 完成云 Kubernetes 集群的实验后,可删除集群以节省免费试用额度。若无需保留特定的容器注册表或集群,可通过 Azure 门户删除。打开 Azure 门户,找到集群页面(通过“所有资源”查找),点击页面顶部的“删除”按钮,会删除集群及相关资源(如节点)。同样,可删除容器注册表。
3. Azure CLI 工具回顾
Azure CLI 工具用于从终端创建和配置 Azure 云资源。以下是本章使用的 CLI 命令回顾:
| 命令 | 描述 |
| — | — |
| az --version | 查看 Azure CLI 版本 |
| az login | 登录 Azure 账户 |
| az account show | 查看当前默认订阅 |
| az account list | 查看所有订阅列表 |
| az account set --subscription=<subscription-id> | 设置新的默认订阅 |
| az aks get-credentials --resource-group <resource-group> --name <cluster> | 下载凭证并连接 kubectl 到 Kubernetes 集群 |
| az aks update --resource-group <resource-group> --name <cluster> --attach-acr <registry> | 连接容器注册表和 Kubernetes 集群 |
可从 Azure CLI 文档页面 了解更多信息。
通过以上步骤,我们构建了微服务的 Docker 镜像并发布到容器注册表,创建了 Kubernetes 集群并将微服务部署到其中,这与生产环境的工作方式非常接近,后续基础设施的创建和微服务的部署将实现自动化。目前仅部署了一个微服务,但每一步都让我们更接近 FlixTube 微服务应用的完整部署。
利用 Azure CLI 与 Kubernetes 部署微服务(续)
4. 操作流程总结与流程图
为了更清晰地展示从使用 Azure CLI 到部署微服务的整个过程,我们可以将上述步骤总结为以下流程图:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px
A([开始]):::startend --> B(安装 Azure CLI):::process
B --> C(Azure CLI 认证):::process
C --> D(连接 kubectl 到 Kubernetes):::process
D --> E(创建容器注册表):::process
E --> F(构建并发布镜像到容器注册表):::process
F --> G(连接容器注册表到 Kubernetes 集群):::process
G --> H(创建 Kubernetes 部署配置):::process
H --> I(部署微服务到 Kubernetes):::process
I --> J(测试已部署的微服务):::process
J --> K{测试是否通过?}:::decision
K -->|是| L(删除部署):::process
K -->|否| M(调试部署问题):::process
M --> I
L --> N(销毁基础设施):::process
N --> O([结束]):::startend
这个流程图展示了从准备工作到最终清理的完整操作流程,帮助我们更好地理解各个步骤之间的关系。
5. 关键步骤详细解析
- Azure CLI 认证的重要性 :Azure CLI 认证是后续操作的基础,通过
az login命令登录 Azure 账户后,本地会保存认证信息,这使得我们在后续使用 Azure CLI 执行各种操作时无需每次都重新登录,提高了操作效率。同时,通过az account show和az account list命令,我们可以清晰地了解当前使用的订阅信息,确保操作在正确的订阅环境下进行。 - 容器注册表与 Kubernetes 集群的连接 :将容器注册表连接到 Kubernetes 集群是部署微服务的关键步骤。通过
az aks update --attach-acr命令,我们可以让集群直接从注册表拉取镜像,避免了复杂的认证配置。这不仅简化了部署过程,还提高了镜像拉取的效率。但需要注意的是,在生产环境中,可能需要根据具体的安全策略和部署需求进行更细致的配置。 - 服务类型为 LoadBalancer 的使用场景 :在测试微服务时,将服务类型设置为
LoadBalancer可以方便我们从外部访问微服务,进行功能测试。但在生产环境中,这种方式会使微服务暴露在外,存在一定的安全风险。因此,在实际应用中,我们需要根据具体情况选择合适的服务类型,如ClusterIP或使用其他安全措施来保护微服务。
6. 常见问题及解决方法
- 镜像推送失败 :如果在执行
docker push命令时遇到问题,常见原因是镜像标签设置错误。需要确保标签中的容器注册表 URL 与实际使用的一致。可以通过检查docker tag命令的输出,确认标签是否正确。 - 集群无法拉取镜像 :若集群出现
ErrImagePull或ImagePullBackOff错误,可能是容器注册表与 Kubernetes 集群未正确连接。需要检查az aks update --attach-acr命令是否正确执行,确保集群能够直接从注册表拉取镜像。 - 部署配置错误 :在创建 Kubernetes 部署配置时,可能会因为配置文件中的参数设置错误导致部署失败。例如,镜像 URL 未正确替换为自己的容器注册表 URL,或者服务类型设置不当等。需要仔细检查配置文件,确保各项参数正确。
7. 总结与展望
通过使用 Azure CLI 和 Kubernetes,我们可以高效地部署和管理微服务。从安装 Azure CLI、认证账户,到构建镜像、连接容器注册表和集群,再到部署和测试微服务,每一个步骤都紧密相连,共同构成了一个完整的微服务部署流程。
在未来的实践中,我们可以进一步优化这个流程,例如使用自动化工具实现基础设施的创建和微服务的部署,提高部署效率和准确性。同时,需要更加关注安全问题,合理配置服务类型和安全策略,确保微服务在生产环境中的稳定运行。
希望本文能够帮助你更好地理解和掌握利用 Azure CLI 与 Kubernetes 部署微服务的方法,让你在实际项目中能够更加得心应手地进行微服务的部署和管理。
更多推荐


所有评论(0)