上一篇文章讲解了如何使用Azure DevOps持续部署应用到Azure Kubernetes上。但是部署是否成功?会不会遇到什么问题?项目运行中是否会出现问题?我们该怎么样查看这些问题,并且对问题进行针对性解决?这就是今天要讲的。
在讲遇到的问题之前我们可以先看看如何在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:安装适用于 Windows 的 Azure CLI | Microsoft Learn
然后依次安装就行了。安装成功在CMD窗口检验是否成功即可。

1、 进入Microsoft Azure 管理页面,并选择创建的Kubernetes 服务。
2、 选择概述页面、点击点击连接会出现以下界面

3、 打开Windows CMD命令窗口输入az login,并且在弹出的登录页面进行登录验证(注意Azure 是国内版还是国外版的,需要对应切换环境)。
4、 输入第2步的两个连接命令,依次输入。
5、 输入kubectl get pods -n <命名空间名>来查询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的命令kubectl exec -ti <Pod名称>-n <> sh。跟进入docker镜像内部相似进入进去后输入ls命令发现其实就是打包之前的应用程序。

生命不息、战斗不止!
欢迎大家扫描下方二维码,和我一起共同学习进步!

对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle
是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD