azure k8s netcore 程序初次部署

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

念想

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

开始使用Azure

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

准备步骤

Azure CLIdocker

KubeCtlshell

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

安装Azure CLI很简单,按照官网的教程就能够。api

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

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

建立ACR

Azure Container Registry (ACR)就是一个docker的仓库中心,相似于docker hub,ACR的建立能够参考上面分享的国外连接,很简单;ide

建立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>

转载请注明出处:http://www.javashuo.com/article/p-wceqjdbr-dp.html

相关文章
相关标签/搜索