简介

上一篇文章讲解了如何使用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.          本地运行生成镜像命令

            docker build -t <镜像名> .

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

            docker run -d –name=<运行名> -p 5001:80 <镜像名>

b)      创建资源组

i.          切换环境:

            国际版-az cloud set -n AzureCloud。国内版-az cloud set -n AzureChinaCloud

ii.          通过cmd登录到Azure:

            az login (根据浏览器弹出的页面进行验证)

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

            az group create --name < 资源组名称 > --location eastus

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

i.          创建容器注册表

            az acr create --resource-group <资源组名称> --name <acrName> --sku Basic

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

            az acr list --resource-group <资源组名称> --query "[].{acrLoginServer:loginServer}" --output table

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

            docker tag 镜像名:版本 <acrLoginServer>/镜像名:版本

iv.          登录到容器注册表

            az acr login --name <acrName>

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

            docker push <acrLoginServer>/<镜像名>:版本

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

            az acr repository list --name <acrName> --output table

d)      创建K8S群集并且连接

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

     az aks create \

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

        --name <Kuberbetes群集名称> \

        --node-count 2 \

        --generate-ssh-keys \

        --attach-acr <acrName>

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

           az aks install-cli

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

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

          kubectl get nodes

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

i.          创建更新yaml文件

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

          kubectl appy -f  <yaml文件名>

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

          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命令发现其实就是打包之前的应用程序。

    

生命不息、战斗不止!

欢迎大家扫描下方二维码,和我一起共同学习进步!

  

Azure Kubernetes(AKS)部署及查看应用资源的更多相关文章

  1. 使用 Azure CLI 将 IaaS 资源从经典部署模型迁移到 Azure Resource Manager 部署模型

    以下步骤演示如何使用 Azure 命令行接口 (CLI) 命令将基础结构即服务 (IaaS) 资源从经典部署模型迁移到 Azure Resource Manager 部署模型. 本文中的操作需要 Az ...

  2. 有关从经典部署模型迁移到 Azure Resource Manager 部署模型的常见问题

    此迁移计划是否影响 Azure 虚拟机上运行的任何现有服务或应用程序? 不可以. VM(经典)是公开上市的完全受支持的服务. 你可以继续使用这些资源来拓展你在 Azure 上的足迹. 如果我近期不打算 ...

  3. 将微服务部署到 Azure Kubernetes 服务 (AKS) 实践

    本文是对 <.NET Tutorial - Deploy a microservice to Azure> 的翻译和实践.入门级踩坑实践,k8s 大佬请回避,以免耽误您宝贵的时间. 介绍 ...

  4. ASP.NET Core在Azure Kubernetes Service中的部署和管理

    目录 ASP.NET Core在Azure Kubernetes Service中的部署和管理 目标 准备工作 注册 Azure 账户 AKS文档 进入Azure门户(控制台) 安装 Azure Cl ...

  5. Azure Kubernetes Service 入门

    一,引言 上一节,我们使用Azure CLI 创建了Azure Resource Group 和 Azure Container Registry 资源,并且将本地的一个叫 “k8s.net.demo ...

  6. 用集装箱装ASP。带有Docker和Azure Kubernetes服务的NET Core应用程序

    介绍 曾经有一个单一软件应用程序的时代,整个应用程序被打包并部署在作为单个进程运行的单个服务器上.我们都知道,在这个模型中,单点故障可能会导致整个应用程序崩溃. 微服务体系结构的发展是为了解决单片应用 ...

  7. 使用ARM模板在Azure中国大规模部署DCOS集群

    容器技术是目前非常流行的技术,尤其是在以Docker作为容器引擎的推动下,让容器的轻量级,可移植,自包含,隔离性等的上了一个新的台阶,目前谈及Dev/Ops,CI/CD很少能够绕过Docker的. A ...

  8. 简化kubernetes应用部署工具之Helm应用部署

    介绍 微服务和容器化给复杂应用部署与管理带来了极大的挑战.Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernetes的a ...

  9. [译]Kubernetes 分布式应用部署和人脸识别 app 实例

    原文地址:KUBERNETES DISTRIBUTED APPLICATION DEPLOYMENT WITH SAMPLE FACE RECOGNITION APP 原文作者:skarlso 译文出 ...

随机推荐

  1. JVM 系列(4)一看就懂的对象内存布局

    请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · AndroidFamily 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] ...

  2. [BJDCTF2020]Mark loves cat-1|源代码泄露|变量覆盖

    主要考察了:源代码泄露.变量覆盖 共展示了三种获取flag的方式 1.打开题目查看未发现有效信息,查看源代码信息,发现返回的dog信息,结果如下: 2.使用dirmap进行目录扫描,发现了.git/c ...

  3. 我写的蓝宝石留言本php版 v4.5

    蓝宝石留言本php版v4.5采用原生php编写,在php5.6~php7.x下调试通过.本留言本使用了utf-8编码. include/config1.php是数据库连接参数的配置文件, includ ...

  4. Java精进-手写持久层框架

    前言 本文适合有一定java基础的同学,通过自定义持久层框架,可以更加清楚常用的mybatis等开源框架的原理. JDBC操作回顾及问题分析 学习java的同学一定避免不了接触过jdbc,让我们来回顾 ...

  5. PerfView专题 (第八篇):洞察 C# 内存泄漏之寻找静态变量名和GC模式

    一:背景 这篇我们来聊一下 PerfView 在协助 WinDbg 分析 Dump 过程中的两个超实用技巧,可能会帮助我们快速定位最后的问题,主要有如下两块: 洞察内存泄漏中的静态大集合变量名. 验证 ...

  6. JavaScript基础回顾知识点记录2

    js 使用嵌套for循环输出三角形 for(var i=0; i<5; i++){ //正三角 // for(var j=0; j<i+1; j++){ // document.write ...

  7. 【NOI P模拟赛】仙人掌(圆方树,树形DP)

    题面 n n n 个点, m m m 条边. 1 ≤ n ≤ 1 0 5 , n − 1 ≤ m ≤ 2 × 1 0 5 1\leq n\leq 10^5,n-1\leq m\leq 2\times1 ...

  8. HTML初学者小知识2

    网页内嵌 代码以及演示如下 代码 <div id="tab_1"> <iframe src="div.html" height="5 ...

  9. CCC3.0 NFC OWNER PAIRING

    OWNER PAIRING 本篇只介绍所有操作都成功执行的场景,中间如果出现异常,需要翻看规范决定接下来的操作 一些密钥 公私密钥对(Vehicle.PK&Vehicle.SK) Endpoi ...

  10. 第六十七篇:Vue的计算属性

    好家伙, 1.什么是计算属性? 首先它是一种属性,其次他有计算这个特殊的性质, 它是一个依赖于其他属性的属性,当依赖的属性发生变化的时候就会触发我们计算属性的逻辑 它会对这个属性进行计算, 所以说它是 ...