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

开发 前端
今天的内容给大家介绍下如何利用阿里云提供的免费私人容器镜像服务,来实现对个人项目容器镜像的管理,以及通过k8s集群来发布阿里云私人容器镜像服务中管理的服务。

[[422218]]

今天的内容给大家介绍下如何利用阿里云提供的免费私人容器镜像服务,来实现对个人项目容器镜像的管理,以及通过k8s集群来发布阿里云私人容器镜像服务中管理的服务。本文适合个人及创业团队学习/使用基于容器、镜像仓库、k8s等云原生技术时的参考。

创建阿里云个人版容器镜像实例

一般来说大型企业都会自己搭建内部私有镜像仓库(例如Harbor),但对于小公司来说也可以直接使用云服务提供的容器镜像服务。接下来以阿里云免费提供的个人版容器镜像服务,演示容器镜像服务的具体使用。步骤如下:

(1)、登录阿里云,点击->控制台->找到“容器镜像服务”,如下图所示:

如果入口比较难找,可以直接在阿里云搜索框搜索“容器镜像服务”。阿里云提供收费的企业版实例,也提供限制使用的个人版实例。这里选择个人版实例。

(2)、创建成功后,设置镜像仓库登陆密码。如下图所示:

提示:

设置一个自己能记住的密码,例如我这里设置的是“wudimanong”。

(3)密码设置成功后,点击“创建镜像仓库”,最终效果如下图所示:

选择本地仓库,后面通过本地构建直接将Docker镜像推送至阿里云私有镜像仓库。

之后就可以根据提示登录该阿里云镜像仓库,并向其中Push镜像了。

配置k8s集群与镜像仓库的连接

创建私有镜像仓库之后,为了安全设置了用户名及密码,如果k8s集群需要从镜像仓库拉取镜像,则每次都需要登陆是很麻烦的,所以可以进行相关设置。

Kubernetes 集群使用 docker-registry 类型的 Secret 来通过容器仓库的身份验证,进而提取私有映像。

创建Secret,命名为 regcred:

  1. # kubectl create secret docker-registry regcred  --docker-server=registry.cn-hangzhou.aliyuncs.com --docker-username=jqadmin --docker-password=wudimanong 
  2. secret/regcred created 

提示:

上述账号密码为你自己创建镜像仓库时设置的。

打包Docker镜像

打包Docker镜像需要编写Dockerfile文件,可以参考相关资料。这里我写了一个Java项目可以参考,通过工程构建就能直接将Docker镜像打包。

项目地址(GitHub):

https://github.com/manongwudi/springboot-k8s-demo

下载项目后本地可以编译构建,完成后打包的本地镜像如下图所示:

将镜像上传至阿里云私有镜像仓库

接下来演示登录阿里云私有镜像仓库,并将本地构建的Docker容器镜像上传。步骤如下:

(1)本地登陆阿里云镜像仓库(本地需要安装Docker环境),命令如下:

  1. $ docker login --username=jqadmin registry.cn-hangzhou.aliyuncs.com 
  2. Password:  
  3. Login Succeeded 

提示:

账号密码为创建阿里云仓库时设置的

(2)将前面构建的Docker镜像上传至阿里云私有仓库。命令如下:

  1. $ docker push registry.cn-hangzhou.aliyuncs.com/wudimanong/springboot-k8s-demo:latest 
  2. The push refers to repository [registry.cn-hangzhou.aliyuncs.com/wudimanong/springboot-k8s-demo] 
  3. 500e5779c8d2: Pushed  
  4. 925523484e00: Pushed  
  5. 344fb4b275b7: Pushed  
  6. bcf2f368fe23: Pushed  
  7. latest: digest: sha256:ba3930f5374ed4cfd2c39cb590c3f772c89cd73abe7bd321838fd453d11309fe size: 1159 

(3)此时回到阿里云仓库的界面,就能看到上传的镜像了,如下图所示:

将阿里云镜像仓库的镜像发布至k8s集群

接下来演示,如何将已经上传阿里云私有镜像仓库的服务发布至k8s集群,这里需要在k8s发布文件中进行一些配置。具体如下:

(1)创建发布文件。

  1. apiVersion: apps/v1 
  2. kind: Deployment 
  3. metadata: 
  4.   name: springboot-k8s-demo 
  5. spec: 
  6.   selector: 
  7.     matchLabels: 
  8.       app: springboot-k8s-demo 
  9.   replicas: 1 
  10.   #设置滚动升级策略 
  11.   #Kubernetes在等待设置的时间后才开始进行升级,例如5s 
  12.   minReadySeconds: 5 
  13.   strategy: 
  14.     type: RollingUpdate 
  15.     rollingUpdate: 
  16.       #在升级过程中最多可以比原先设置多出的Pod数量 
  17.       maxSurge: 1 
  18.       #在升级过程中Deployment控制器最多可以删除多少个旧Pod,主要用于提供缓冲时间 
  19.       maxUnavailable: 1 
  20.   template: 
  21.     metadata: 
  22.       labels: 
  23.         app: springboot-k8s-demo 
  24.     spec: 
  25.       #设置的阿里云私有镜像仓库登陆信息的secret(对应2.1.2的设置) 
  26.       imagePullSecrets: 
  27.       - name: regcred 
  28.       containers: 
  29.         - name: springboot-k8s-demo 
  30.           image: registry.cn-hangzhou.aliyuncs.com/wudimanong/springboot-k8s-demo:latest 
  31.           env: 
  32.             - name: SERVER_PORT 
  33.               value: "8080" 
  34.             - name: SPRING_PROFILES_ACTIVE 
  35.               value: test 
  36. --- 
  37. apiVersion: v1 
  38. kind: Service 
  39. metadata: 
  40.   name: springboot-k8s-demo 
  41.   labels: 
  42.     svc: springboot-k8s-demo 
  43. spec: 
  44.   selector: 
  45.     app: springboot-k8s-demo 
  46.   ports: 
  47.     - name: http 
  48.       #Service在集群中暴露的端口(用于Kubernetes服务间的访问) 
  49.       port: 8080 
  50.       #Pod上的端口(与制作容器时暴露的端口一致,在微服务工程代码中指定的端口) 
  51.       targetPort: 8080 
  52.       #K8s集群外部访问的端口(外部机器访问) 
  53.       nodePort: 30002 
  54.   type: NodePort 

标红的部分,就是设置k8s对阿里云容器镜像仓库的连接——使用存储在"secret"资源中的镜像仓库的账号及密码。

(2)执行发布命令。

  1. # kubectl apply -f springboot-k8s-demo.yaml  
  2. deployment.apps/springboot-k8s-demo created 
  3. service/springboot-k8s-demo created 

(3)查看并测试应用部署是否成功。

  1. # kubectl get po -o wide 
  2. NAME                                   READY   STATUS    RESTARTS   AGE   IP              NODE       NOMINATED NODE   READINESS GATES 
  3. springboot-k8s-demo-7f7f8db4cc-hd8j2   1/1     Running   0          41s   10.201.17.147   k8s-node   <none>           <none> 
  4. test-ds-nginx-qdj6n                    1/1     Running   0          80m   10.201.17.143   k8s-node   <none>           <none> 

可以看到,部署的Java应用已经成功启动。接下来模拟调用下该服务的测试接口:

  1. # curl 10.201.17.147:8080/devops/test 
  2. 自动化发布示范工程测试接口返回->OK! 

 

可以成功访问,说明应用部署成功!

 

责任编辑:武晓燕 来源: 无敌码农
相关推荐

2022-02-18 10:47:47

微服务k8s项目

2022-01-02 08:42:50

架构部署容器

2023-09-06 08:12:04

k8s云原生

2023-08-03 08:36:30

Service服务架构

2021-11-04 07:49:58

K8SStatefulSetMySQL

2021-08-26 07:20:05

云原生K8sSpringboot

2021-08-13 07:00:41

云原生k8sspringboot

2022-11-06 21:31:11

云原生Sentinel集群模式

2022-04-22 13:32:01

K8s容器引擎架构

2023-03-01 07:42:12

HBase编排部署数据

2023-11-06 07:16:22

WasmK8s模块

2020-08-10 08:07:59

IstioK8s微服务

2023-08-07 08:27:43

混合云K8S容器

2020-12-22 07:42:05

云原生开源项目k8s

2023-07-11 07:12:21

Hadoop部署mysql

2023-07-10 07:22:16

2018-08-23 11:01:00

华为云

2022-04-29 10:40:38

技术服务端K8s

2021-03-11 12:31:33

K8sCoreDNSDNS服务器

2023-02-27 07:40:00

点赞
收藏

51CTO技术栈公众号