当前位置: 首页 > 科技观察

利用阿里云免费镜像仓库,实现微服务的K8s部署

时间:2023-03-20 12:38:42 科技观察

使用阿里云免费的镜像仓库实现K8s部署微服务Publish服务托管在阿里云私有容器镜像服务中。本文适合作为个人和创业团队学习/使用基于容器、镜像仓库、k8s的云原生技术的参考。创建阿里云个人版容器镜像实例。一般而言,大型企业会自建内部私有镜像仓库(如Harbor),但小型企业也可以直接使用云服务提供的容器镜像服务。接下来使用阿里云免费提供的容器镜像服务个人版来演示容器镜像服务的具体使用。步骤如下:(1)登录阿里云,点击->控制台->找到“容器镜像服务”,如下图:如果入口不好找,可以直接搜索“容器镜像服务”镜像服务”在阿里云搜索框中。阿里云提供付费的企业版实例,以及有限使用的个人版实例。这里选择个人版实例。(2)创建成功后,设置镜像仓库的登录密码。如下图所示:提示:设置一个自己能记住的密码,比如我这里设置的是“wudimanong”。(3)密码设置成功后,点击“创建镜像仓库”,最终效果如下图:选择本地仓库,然后通过本地构建直接将Docker镜像推送到阿里云私有镜像仓库.之后就可以根据提示登录阿里云镜像仓库,将镜像推送给它了。配置k8s集群与镜像仓库的连接创建私有镜像仓库后,为了安全,设置用户名和密码。k8s集群如果需要从镜像仓库拉取镜像,每次都要登录很麻烦,可以进行相关设置。Kubernetes集群使用docker-registry类型的Secret向容器注册表进行身份验证以拉取私有镜像。创建一个Secret,并命名为regcred:#kubectlcreatesecretdocker-registryregcred--docker-server=registry.cn-hangzhou.aliyuncs.com--docker-username=jqadmin--docker-password=wudimanongsecret/regcredcreated注意:以上账号密码为创建镜像仓库时自己设置。打包Docker镜像打包Docker镜像需要编写Dockerfile,可以参考相关资料。这里我写了一个Java工程供参考,通过工程构建直接打包Docker镜像即可。项目地址(GitHub):https://github.com/manongwudi/springboot-k8s-demo下载项目后,可以在本地编译构建。完成后,打包好的本地镜像如下图所示:上传镜像到阿里云私有镜像仓库并连接接下来,我们将演示如何登录阿里云私有镜像仓库,上传本地构建的Docker容器镜像。步骤如下:(1)本地登录阿里云镜像仓库(本地需要安装Docker环境),命令如下:$dockerlogin--username=jqadminregistry.cn-hangzhou.aliyuncs.com密码:登录成功(2)将之前构建的Docker镜像上传到阿里云私有仓库。命令如下:$dockerpushregistry.cn-hangzhou.aliyuncs.com/wudimanong/springboot-k8s-demo:latestThepushreferstorepository[registry.cn-hangzhou.aliyuncs.com/wudimanong/springboot-k8s-demo]500e5779c8d2:Pushed925523484e00:Pushed344fb4b275b7:Pushedbcf2f368fe23:Pushedlatest:digest:sha256:ba3930f5374ed4cfd2c39cb590c3f772c89cd73abe7bd321838fd453d11309fesize:1159(3)NowgobacktotheinterfaceofAlibabaCloudwarehouse,andyoucanseetheuploadedimage,as如下图:发布阿里云镜像仓库镜像到k8s集群然后演示,如何发布已经上传到阿里云私有镜像的服务仓库到k8s集群,这里需要在k8s发布文件中做一些配置。具体如下:(1)创建发布文件。apiVersion:apps/v1kind:Deploymentmetadata:name:springboot-k8s-demospec:selector:matchLabels:app:springboot-k8s-demoreplicas:1#设置滚动升级策略#Kubernetes等待设定时间后开始升级,比如5sminReadySeconds:5strategy:type:RollingUpdaterollingUpdate:#在升级过程中,可以设置的最大Pod数量比原来设置的多maxSurge:1#在升级过程中,Deploymentcontroller可以删除最大数量的旧Pod,主要是用于提供缓冲时间maxUnavailable:1template:metadata:labels:app:springboot-k8s-demospec:#设置阿里云私有镜像仓库登录信息的secret(对应2.1.2的设置)imagePullSecrets:-name:regcredcontainers:-name:springboot-k8s-demoimage:registry.cn-hangzhou.aliyuncs.com/wudimanong/springboot-k8s-demo:latestenv:-name:SERVER_PORTvalue:"8080"-name:SPRING_PROFILES_ACTIVEvalue:test---apiVersion:v1kind:服务元数据:名称:springboot-k8s-demolabels:svc:springboot-k8s-demospec:selector:app:springboot-k8s-demoports:-name:http#集群中的服务暴露端口(用于Kubernetes服务之间的访问)port:8080#Pod上的端口(和做容器时暴露的端口和微服务工程代码中指定的端口一样)targetPort:8080#K8s集群外部访问端口(外机访问)nodePort:30002type:NodePort红色标记的部分是设置k8s到阿里云容器镜像仓库连接—&mdasH;使用“秘密”资源(2)中保存的镜像仓库的账号和密码执行发布命令。#kubectlapply-fspringboot-k8s-demo.yamldeployment.apps/springboot-k8s-democreatedservice/springboot-k8s-democreated(3)查看测试应用部署是否成功。#kubectlgetpo-owideNAMEREADYSTATUSRESTARTSAGEIPNODENOMINATEDNODEREADINESSGATESspringboot-k8s-demo-7f7f8db4cc-hd8j21/1Running041s10.201.17.147k8s-nodetest-ds-nginx-qdj6n1/1Running080m10.201.17.143k8s-node可以看到,部署的Java应用程序已经成功启动。接下来模拟调用服务的测试接口:#curl10.201.17.147:8080/devops/test自动化发布演示项目的测试接口返回->OK!可以访问成功,说明应用部署成功!