前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

简介

作者头像
小世界的野孩子
发布2022-10-28 10:16:42
9860
发布2022-10-28 10:16:42
举报

简介

       上一篇文章讲解了如何使用Azure DevOps持续部署应用到Azure Kubernetes上。但是部署是否成功?会不会遇到什么问题?项目运行中是否会出现问题?我们该怎么样查看这些问题,并且对问题进行针对性解决?这就是今天要讲的。

Aks_Core部署流程

       在讲遇到的问题之前我们可以先看看如何在AKS环境上部署Net Core应用资源。

1、  先决条件

Aks部署.Net Core项目需要条件:

1、本地安装docker环境(生成docker镜像,推送镜像到容器注册表)

2、本地安装Azure CLI(连接Azure 并执行相关命令)

2、  部署流程

a)      本地生成Docker镜像

                 i.          修改编辑Dockerfile文件(Linux环境和Windows环境生成镜像的文件内容不一样)

                ii.          本地运行生成镜像命令

代码语言:javascript
复制
            docker build -t <镜像名> .

               iii.          本地docker部署镜像测试运行

代码语言:javascript
复制
            docker run -d –name=<运行名> -p 5001:80 <镜像名>

b)      创建资源组

                 i.          切换环境:

代码语言:javascript
复制
            国际版-az cloud set -n AzureCloud。国内版-az cloud set -n AzureChinaCloud

                ii.          通过cmd登录到Azure:

代码语言:javascript
复制
            az login (根据浏览器弹出的页面进行验证)

               iii.          创建资源组(可以通过页面Azure创建,也可通过命令运行:)

代码语言:javascript
复制
            az group create --name < 资源组名称 > --location eastus

c)       在资源组中创建容器注册表并推送镜像

                 i.          创建容器注册表

代码语言:javascript
复制
            az acr create --resource-group <资源组名称> --name <acrName> --sku Basic

                ii.          获取容器注册表登录服务器

代码语言:javascript
复制
            az acr list --resource-group <资源组名称> --query "[].{acrLoginServer:loginServer}" --output table

               iii.          通过docker命令标记本地镜像

代码语言:javascript
复制
            docker tag 镜像名:版本 <acrLoginServer>/镜像名:版本

               iv.          登录到容器注册表

代码语言:javascript
复制
            az acr login --name <acrName>

                v.          推送镜像到容器注册表

代码语言:javascript
复制
            docker push <acrLoginServer>/<镜像名>:版本

               vi.          检查镜像是否推送成功

代码语言:javascript
复制
            az acr repository list --name <acrName> --output table

d)      创建K8S群集并且连接

           i.      创建Kubernetes群集(通过azure页面创建或者通过命令创建:)

代码语言:javascript
复制
     az aks create \

        --resource-group <资源组名称> \

        --name <Kuberbetes群集名称> \

        --node-count 2 \

        --generate-ssh-keys \

        --attach-acr <acrName>

                ii.          如果使用kubectl命令找不到的话就需要安装kubectl

代码语言:javascript
复制
           az aks install-cli

               iii.          通过azure页面上的Kubernetes链接连接到Kubernetes

               iv.          通过获取群集节点命令验证Kubernetes是否连接成功

代码语言:javascript
复制
          kubectl get nodes

e)      创建编辑yaml文件并部署

                 i.          创建更新yaml文件

                ii.          使用kubectl命令创建Kubernetes对象

代码语言:javascript
复制
          kubectl appy -f  <yaml文件名>

               iii.          使用kubectl命令监视查看service运行状况

代码语言:javascript
复制
          kubectl get service azure-vote-front --watch

安装Azure CLI

       我们需要下载Azure CLI:安装适用于 Windows 的 Azure CLI | Microsoft Learn

然后依次安装就行了。安装成功在CMD窗口检验是否成功即可。

连接Kubernetes

1、 进入Microsoft Azure 管理页面,并选择创建的Kubernetes 服务。

2、 选择概述页面、点击点击连接会出现以下界面

3、 打开Windows CMD命令窗口输入az login,并且在弹出的登录页面进行登录验证(注意Azure 是国内版还是国外版的,需要对应切换环境)。

4、 输入第2步的两个连接命令,依次输入。

5、 输入kubectl get pods -n <命名空间名>来查询pod信息。

查看Pod描述和日志

       上面我们讲了怎么连接到Azure Kubernetes服务并且查询Pods信息,下面我们看下怎么查看Pod更具体的信息来分析Pod状态。

       在应用部署的时候,特别是在最开始的时候,特别容易碰到部署不成功的情况。例如Pod出现ErrImagePull或者ImagePullBackOff、或者出现CrashLoopBackOff等等,那么我们就需要查询Pod的描述或者日志等等来定位到错误信息。

1、 保持上面的kubernetes 连接,并且在CMD里面输入kubectl describe pod <pod名称>  -n <命名空间名称>查看描述

2、 Kubectl logs -f  <pod名称> -n <命名空间名称> 查看日志

例如我这里部署一个demo,镜像配置一个不存在的镜像。就会出现ImagePullBackOff的都问题,我们可以查看描述

例如对于CrashLoopBackOff的情况一般是启动后又失败了,这时候我们可能更需要查看log日志来定位信息了,一般问题是在程序启动时报错。例如数据库连接、redis连接、接入第三方连接报错等等

查看资源消耗情况

       上面我们看了怎么查询定位应用部署中遇到的问题,现在我们来看看在应用运行中可能会遇到那些问题。在程序运行中可能会遇到部署的程序资源耗尽然后导致Pod假死或者重启的情况、也有可能怎么节点甚至是Kubernetes服务资源耗尽的情况。这次我们主要针对如何查询资源信息。

1、 查询node 资源情况。Kubectl top node

2、 查询Pod资源情况kubectl top pod -n <命名空间名称>

  在Kubernetes服务中心部署可以使用自带的负载均衡。第一种情况是节点池资源充足,但是对应Pod的资源消耗殆尽甚至超过了。这就是在配置Pod的yaml文件中的资源限制配置问题了。yaml文件中resources配置中的requests最低需求和limits最大限制。第二种就是node节点的资源直接消耗殆尽了。一般这时候就需要看看是否需要增加配置,同时也需要检查应用程序,再看看具体是CPU还是内存了,是否有代码造成了内存泄漏。优化长时间处理的代码。

进入Pod中查看文件

       进入Pod的命令kubectl exec -ti <Pod名称>-n <> sh。跟进入docker镜像内部相似进入进去后输入ls命令发现其实就是打包之前的应用程序。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • Aks_Core部署流程
  • 安装Azure CLI
  • 连接Kubernetes
  • 查看Pod描述和日志
  • 查看资源消耗情况
  • 进入Pod中查看文件
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档