以下都是我在2018年12月份做的实验,今天才发布出来。

念想

首先是了解一些关于K8s的一些基础概念,推荐查看一下这个链接,非常适合入门k8s。是因为K8S的环境搭建比较复杂(最主要是懒),其实也有比较简单的方式,有一些本地单例部署的方式,如Minikube以及Kubeadm-dind。但是为了更快的了解k8s,所以选择了云平台,在查看了一些国外分享的链接之后,准备开始使用azure的。

开始使用Azure

初次使用Azure,Azure首页就有大大的标题写明了可以试用一个月以及200$的额度。没有使用国内的Azure,直接在azure的官网注册并使用了,用的visa信用卡,说是扣1$用来验证信用卡,后面会退还,但是不知道为啥现在还没有退给我,还有不知道为什么扣了我10块钱,懒得纠结了,就放在那了。注册通过之后后面可以通过访问 portal.azure.com 进入控制台,按照上面的链接,开始下面的一步步操作;

准备步骤

Azure CLI

KubeCtl

docker for windows(我是在Windows操作的)

安装Azure CLI很简单,按照官网的教程就可以。

KubeCtl稍微折腾了一下,其实是我没怎么注意,根据官网的也就可以了,我的系统是Windows 10,不过由于是阉割版,powershell的版本是4.0,按照第一个方式操作Powershell的PSGallery,发现不可以运行Install-Script命令,被迫舍弃。换了另一个方式,使用Chocolatey下载并配置KubeCtl,执行kubectl version命令发现可以正常执行。

docker for windows的安装也是很简单的,直接去官网下载运行就可以,可能需要设置一下环境变量;

创建ACR

Azure Container Registry (ACR)就是一个docker的仓库中心,类似于docker hub,ACR的创建可以参考上面分享的国外链接,很简单;

创建AKS

这一步非常重要,也是我耗时最久的一个地方,被坑的最大的一个地方是因为我总是想着用离国内较近的区域(Location),我选择的区域基本上都是日本西部,但是AKS的资源组区域目前还不支持日本西部,目前只支持eastus, westeurope, centralus, canadacentral, canadaeast这些区域(参考链接),按照上面分享的国外链接去操作之后总会提示部署失败,报错的详情是

{"code":"DeploymentFailed","message":"至少一个资源部署操作失败。请列出部署操作显示详细信息。有关用法详细信息,请参阅 https://aka.ms/arm-debug。","details":[{"code":"BadRequest","message":"{\r\n \"error\": {\r\n \"code\": \"BadRequest\",\r\n \"message\": \"The Service Principal in ServicePrincipalProfile could not be validated. Please see https://aka.ms/acs-sp-help for more details. (The client 'guid' with object id 'guid' does not have authorization to perform action 'Microsoft.Authorization/roleAssignments/read' over scope '/subscriptions/guid/resourceGroups/dotnetTryAcsCluster/providers/Microsoft.Authorization'.)\"\r\n }\r\n}"}]}

在UI环境操作了很多次每次都是报上面的错误(微软的官方教程我也试了),经验告诉我,这条路肯定走不下去了,于是我抛弃了上面的分享链接的教程。再次老老实实看一下微软的官方教程,这一次我选择的是使用CLI去创建,不再使用UI界面,一步步操作下去,终于看到了部署成功后的JSON,非常开心。之后按照教程下载凭证然后在本地操作aks;

docker 部署

docker镜像我也是偷懒使用了netcore官方的示例,clone下来之后按照readme生成aspnetapp镜像,生成之后可以通过命令行(docker images)查看。再次根据国外分享的链接,对这个镜像打两个标签(其实只要打一个标签,或者不打标签,他多打一个标签是为了证明acr中docker的分层存储的UnionFS功能,打标签是为了让你能区分版本号),打好标签再次按照教程所述去acr获取你要上传仓库的密码,然后上传即可,之后的操作基本上都是按照教程操作下去,不过也有一些要注意的。

注意点

教程上写的k8s的本地UI链接为:http://127.0.0.1:8001/ui ,实际上这个链接打开之后根本看不见什么东西,只有

Error: 'tls: oversized record received with length 20527'
Trying to reach: 'https://10.244.0.6:9090/'

这么一个报错,真正可用的链接是 http://localhost:8001/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy

后记

想继续操作实现持续部署的功能,大概为以下步骤:

  1. docker 重新build已经编译好的代码(或者有CI工具生成),并且打个tag(例如aspnetapp:3),推送到acr;
  2. 结合国外分享的教程以及微软官网的,重新部署的时候,修改Deploy.xml中的image参数,修改为对应的镜像tag,接着根据微软的教程,使用kubectl get pod,查看运行中的pod,接着准备执行以下指令
kubectl set image deployment azure-vote-front azure-vote-front=<acrLoginServer>/azure-vote-front:v2

这里面有个与我部署的地方有个不一样的地方,他这里默认的deployments.extensions的名字和container的名字是一致的,然而我的不一样,这时候需要仔细的查看一下Deploy.xml中的参数了,我这边的deployments.extensions的名字是aspnetapp-deployment,container的名字是aspnetapp,所以我的执行命令是这样的:

kubectl set image deployment aspnetapp-deployment aspnetapp=<acrLoginServer>/azure-vote-front:v2

使用命令记录

给镜像打标签
docker tag aspnetapp dotnettryacr.azurecr.io/myservice/aspnetapp:1 推送docker镜像
docker push dotnettryacr.azurecr.io/myservice/aspnetapp:3 docker登录acr
docker login dotnettryacr.azurecr.io -u dotnettryacr -p awhdXW6nZa6EUjxPNLbLsUrjJQM30wK+ kubectl连接到aks cluster
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster 如果有自定义的secret-key
az acs kubernetes get-credentials –resource-group=pascalnaberacs –name=myacscluster –ssh-key-file “C:\blogpost\opensshprivatekey” aks连接acr
kubectl create secret docker-registry acrconnection —docker-server=https://dotnettryacr.azurecr.io —docker-username=dotnettryacr —docker-password=awhdXW6nZa6EUjxPNLbLsUrjJQM30wK+ —docker-email=briswhite@hotmail.com ask连接acr方式2 获取aks服务主体的clientid
az aks show --resource-group myResourceGroup --name myAKSCluster --query "servicePrincipalProfile.clientId" --output tsv 获取acr的资源ID(acrID)
az acr show --name <acrName> --resource-group myResourceGroup --query "id" --output tsv 创建aks和acr之间的连接
az role assignment create --assignee <clientID> --role Reader --scope <acrID>

转载请注明出处:https://www.cnblogs.com/briswhite/p/11344034.html

azure k8s netcore 程序初次部署的更多相关文章

  1. jenkins + supervisor + ansible 实现netcore程序的多机一键部署

    上一篇我们简单的说到了使用jenkins+supervisor实现了一个单机版的多副本部署,但是在更多的场景下还是需要netcore程序的多机一键部署,那么多 机器间如何分发呢? 肯定不能使用scp这 ...

  2. Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(二)

    Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(一) 接上一篇 3. Nginx配置反向代理 3.1 cnetos 安装nginx 首先,我们需要在服务器上安装N ...

  3. Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(一)

    环境 本地 win7 服务器:Virtual Box 上的Centos ssh工具: Xshell 文件传输: xftp 1.在本地创建asp.net core应用发布 1.1 使用Vs2017 新建 ...

  4. 使用PowerShell自动部署ASP.NetCore程序到IIS

    Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能.有关于更多PowerShell的信息,可参阅百度词条 接 ...

  5. .net core i上 K8S(四).netcore程序的pod管理,重启策略与健康检查

    上一章我们已经通过yaml文件将.netcore程序跑起来了,但还有一下细节问题可以分享给大家. 1.pod管理 1.1创建pod kubectl create -f netcore-pod.yaml ...

  6. .net core i上 K8S(二)运行简单.netcore程序

    上一章我们搭建了k8s集群,这一章我们开始在k8s集群上运行.netcore程序 1.kubectl run 在我的Docker系列教程里,我曾往docker hub中推送过一个镜像“webdokce ...

  7. Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践

    原文:Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践 环境 本地 win7 服务器:Virtual Box 上的Centos ssh工具: Xshell 文件传输 ...

  8. netcore程序部署 ubuntu 16.0.4 报错 The type initializer for 'System.Net.Http.CurlHandler'的解决方案

    最近业务扩展需要把netcore程序部署到ubuntu 16.0.4上,因为代码里面用到了HttpClient 请求. 部署ubuntu后一直报错 参考地址:https://github.com/do ...

  9. .NetCore程序在Linux上面部署的实现

    我们知道.NetCore能够实现跨平台的根本就是内置Kestrel服务器实现请求处理和不同操作系统上反向代理的实现.在windows操作系统上IIS反向代理配置非常简单.但是Linux上就较为麻烦了. ...

随机推荐

  1. TypeScript算法与数据结构-队列和循环队列

    本文涉及的源码,均在我的github.有两部分队列和循环队列.有问题的可以提个issue,看到后第一时间回复 1. 队列(Queue) 队列也是一种线性的数据结构, 队列是一种先进先出的数据结构.类似 ...

  2. 玩转SpringBoot之整合Mybatis拦截器对数据库水平分表

    利用Mybatis拦截器对数据库水平分表 需求描述 当数据量比较多时,放在一个表中的时候会影响查询效率:或者数据的时效性只是当月有效的时候:这时我们就会涉及到数据库的分表操作了.当然,你也可以使用比较 ...

  3. 数字IC前后端设计中的时序收敛(三)--Hold违反的修复方法

    本文转自:自己的微信公众号<数字集成电路设计及EDA教程>(二维码见博文底部) 里面主要讲解数字IC前端.后端.DFT.低功耗设计以及验证等相关知识,并且讲解了其中用到的各种EDA工具的教 ...

  4. 删除git中缓存的用户名和密码

    我们使用Git命令去clone Gitlab仓库的代码时,第一次弹框提示输入账号密码的时候输错了,然后后面就一直拒绝,不再重复提示输入账号密码,怎么破? git报错信息 运行一下命令缓存输入的用户名和 ...

  5. Nginx+Tomat8负载后,利用Redis实现Tomcat8的session共享

    网上相应的文章应该都介绍,这里只特别记录下笔者在实操的过程出现的问题.此文件只针对tomcat 8 版本,之前版本可略过. tomcat 8 中的context.xml文件修改,增加以下配置. Jav ...

  6. jira设置问题关闭之后不能继续编辑和添加备注

    设置工作流中的Closed步骤的工作流属性值,增加两个: jira.permission.comment.user:(空) jira.issue.editable:false Closed这个步骤之后 ...

  7. Java设计模式学习笔记(五) 单例模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 使用单例模式的原因 以Windows任务管理器为例,在Windows系统中,任务管理器是唯 ...

  8. markdown插入表格语法

    markdown插入表格语法 举例 如表格标题为,姓名,班级,成绩 标题内的内容为,yang,a班,100 我们要在markdow文件中插入表格 如 姓名|班级|成绩 -|-|- yang|a班|10 ...

  9. Hadoop值Partition分区

    分区操作 为什么要分区? 要求将统计结果按照条件输出到不同文件中(分区).比如:将统计结果按 照手机归属地不同省份输出到不同文件中(分区) 默认 partition 分区 /** 源码中:numRed ...

  10. Windows 设置自启动计划任务(非登录启动)

    原因:服务器会不定期重启,且重启后无人看管,不会有人去登录系统.导致我们做的一些开机启动程序失效,进而系统瘫痪. 解决方法: 自己理解,想要达到目的有两种方式:系统服务 & 计划任务配置. 计 ...