简介

上一篇文章讲解了如何使用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. Nmap 操作手册 - 完整版

    目录 Nmap - 基础篇 Nmap 安装 RedHat Windows Debina & Ubuntu Others Linux Nmap 参数(简单版) 目标说明 主机发现 扫描技术 端口 ...

  2. ASP.NET Core 6框架揭秘实例演示[30]:利用路由开发REST API

    借助路由系统提供的请求URL模式与对应终结点之间的映射关系,我们可以将具有相同URL模式的请求分发给与之匹配的终结点进行处理.ASP.NET的路由是通过EndpointRoutingMiddlewar ...

  3. 在Centos7上将Apache(httpd)切换为Nginx的过程记录

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_129 近期要上线几个基于tornado+motor的移动端接口服务,众所周知,Apache和tornado天生八字不合,尤其apa ...

  4. 越折腾越好用的 3 款开源 APP

    高中的时候我特别喜欢捣鼓手机,然后我一个哥们儿在我的强烈推荐下买了个 HTC Dream(G1) 手机. G1 作为谷歌的第一个亲儿子,它出厂搭载的是 Android 1.5 系统,但当时已经出到了 ...

  5. Pulsar Summit Asia 2020 中文专场议题出炉!

    关于 Apache Pulsar Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息.存储.轻量化函数式计算为一体,采用计算与存储分离架构设计,支 ...

  6. Debezium的基本使用(以MySQL为例)

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 一.Debezium介绍 摘自官网: Debeziu ...

  7. 基于Go语言的xmind读写库,我主要用来把有道云笔记思维导图转为xmind

    项目地址 xmind 基于go语言的xmind接口 使用方法参考: example 本库主要加载xmind文件为json结构,保存文件时也用的json结构而不是xml结构 本库只做了最基本的主题添加功 ...

  8. ipi发送阻塞导致crash

    3.10的内核, 在子进程退出的时候,发送信号通知父进程,此时是持有父进程的sighand中的spinlock的,然后父进程和该子进程不在一个核上,发送ipi的reschedule中断给对应的核, 但 ...

  9. from表单、css选择器、css组合器、字体样式、背景属性、边框设置、display设置

    目录 一.form表单 1.form表单功能 2.表单使用原理 二.前端基础之css 1.关于css的介绍 2.css语法 3.三种编写CSS的方式 3.1.style内部直接编写css代码 3.2. ...

  10. C语言【10部分】

    输出整数 #include <stdio.h> int main() { int number; // printf() 输出字符串 printf("输入一个整数: " ...