通过私有Docker仓库在K8S环境上部署应用程序教程

通过私有Docker仓库在K8S环境上部署应用程序教程

  • 需求描述

最近项目组在做了一个自助缴费相关的车道项目,根据前期架构设计、部署安装模式设计、自动升级设计、负载均衡设计相关思路。最终敲定的需求是要在一个无外网的内部局域网服务器群上进行K8S(Kubernetes)环境部署,然后在这个K8S环境上通过构建私有的Docker镜像仓库来进行业务程序的部署升级负载均衡。

目前主要以在公司的kubeedge测试环境上进行部署操作的演示。

Host Name

IP

CPU

Memory

OS

备注

kubeedge-k8s-master-1

192.162.130.87

1x2

4G

CentOS 7

 公司虚拟服务器

kubeedge-k8s-worker-001

192.162.130.88

1x2

4G

CentOS 7

 公司虚拟服务器

kubeedge-cloudcore-1

192.162.130. 89

1x2

4G

CentOS 7

 公司虚拟服务器

kubeedge-edgecore-001

192.162.123.101

2x4

8G

CentOS 7

物理机

kubeedge-edgecore-002

192.162.123.102

2x4

8G

CentOS 7

物理机

kubeedge-proxy-1

192.162.123.217

1x1

1G

Windows

物理机

整个测试环境有三台物理机服务器,三台虚拟服务器。针对如何安装kubeedge边缘云集群环境这里不再介绍。本文主要介绍如何让在kubeedge环境上部署业务程序。

业务系统名称

对外暴露端口

部署的节点服务器

备注

计费服务(duty-auto)

8087

edgecore-001、edgecore-002

 

特情服务(duty-manual)

8081

edgecore-001、edgecore-002

 

特情处理前端服务(duty-sp)

8081

edgecore-001、edgecore-002

 

图片及流水上传服务(duty-gate)

8080

edgecore-001、edgecore-002

 

部署私有Docker仓库

5000

kubeedge-k8s-worker-001

 

....

 

 

 

业务程序主要部署在edgecore-001、edgecore-002这个两个边缘节点上。

  • 主要部署操作流程

1、流程概述

整个部署流程主要分为以下3个大的步骤:

(1)在kubeedge-k8s-worker-001节点服务器上安装私有Docker仓库

(2)对要目标程序进行Docker镜像处理,将duty-auto、duty-manul等程序打包成Docker镜像,推送到指定的Docker仓库。

(3)在kubernetes环境上通过自动获取私有仓库目标镜像进行业务程序需部署。

2、worker-001节点安装私有Docker仓库

在这里我们使用Docker官方提供的Registry作为我们的私有仓库。使用Registry搭建私有仓库相对比较简单。所谓私有仓库,也就是在本地(局域网)搭建的一个类似公共仓库的东西,搭建好之后,我们可以将镜像提交到私有仓库中。这样我们既能使用 Docker 来运行我们的项目镜像,也避免了商业项目暴露出去的风险。

在这里我们将仓库服务器部署在kubeedge-k8s-worker-001节点上,在master节点去下载这些镜像。

主机名

角色

备注

kubeedge-k8s-worker-001

192.162.130.88:5000

registry-server(镜像仓库服务器)

部署registry容器

kubeedge-edgecore-001

kubeedge-edgecore-002 

registry-consumer(镜像仓库客户端)

从registry服务器上下载镜像

2.1 首先下载Registry镜像并启动创建本地私有仓库

docker pull registry

然后,运行一个Registry镜像仓库的容器实例,也就是创建一个我们自己的私有仓库。默认使用5000端口作为似有仓库请求端口。

docker run -d -v /edc/images/registry:/var/lib/registry -p 5000:5000

--restart=always --name xdp-registry registry

执行完创建实例的语句后,可以在客户端查看仓库中的所有镜像。

curl http://192.162.130.88:5000/v2/_catalog

我这个仓库里目前已经上传了两个镜像。

注:在进行以下操作之前我们需要给每个可能会访问到Docker仓库的客户端服务器进行配置一下私有仓库的可信任设置让我们可以通过HTTP直接访问。

在客户端服务器上需要在 /etc/docker文件下修改daemon.json文件。在insecure-registries标签后增加一行 "your-server-ip:5000"

在本次部署测试环境中两个边缘节点kubeedge-edgecore-001 kubeedge-edgecore-002是需要向仓库下载镜像,所以要在这两个节点上增加这个配置。

PS:如果不设置可信任源,又没有配置HTTPS证书,那么会遇到这个错误:error: Get https://ip:port/v1/_ping: http: server gave HTTP response to HTTPS client.

2.2 构建程序镜像上传到Docker仓库

   (1) 首先选择一个带有Docker环境的机器,(这里我选择的是kubeedge-edgecore-001,在操作过程中可以选择任何一个内网内的机器)用来手动打Docker镜像。

(2)在这个机器上创建一个单独的文件夹docker,同时在这个文件夹下创建一个Dockerfile文件。并将要打包的Jar复制到相同目录下。

(3)编写Dockerfile文件内容

#指定以openjdk:8-alpine为基础镜像,来构建此镜像,可以理解为运行的需要基础环境

FROM openjdk:8-jdk-alpine

#WORKDIR指令用于指定容器的一个目录, 容器启动时执行的命令会在该目录下执行。 WORKDIR /duty

#将当前duty-auto-1.0.0-SNAPSHOT.jar 复制到容器根目录下并重命名为docker-duty-auto.jar

ADD duty-auto-1.0.0-SNAPSHOT.jar docker-duty-auto.jar

#指定容器需要映射到宿主机器的端口

EXPOSE 8087

#设置container启动时执行的操作

ENTRYPOINT ["java","-jar","/duty-auto-1.0.0-SNAPSHOT.jar","-Dfile.encoding=utf-8"]

(4)编写好Dockerfile文件内容后开始执行docker build命令进行镜像构建。

docker build -f Dockerfile -t docker_duty_auto:v1.1 .

#docker_duty_auto:构建出来的镜像名称;

#v1.1:镜像版本号

注意:命令最后的“.”千万不能省略。

(5)使用docker images 命令查看构建好的镜像

(6)给我们需要上传到Docker仓库的镜像设置TAG(这一步不可省略)

#docker tag 镜像名称:镜像版本 私有镜像仓库地址:端口/镜像名称:镜像版本

docker tag docker_duty_auto:v1.1 192.162.130.88:5000/docker_duty_auto:v1.1

(7)将构建好的镜像推送到指定仓库

docker push 192.162.130.88:5000/docker_duty_auto:v1.1

(8)可以远程查看我们的仓库有没有推送上去的镜像

curl http://192.162.130.88:5000/v2/docker_duty_auto/tags/list

 

3、在K8S环境上部署我们的应用程序

这一步的最关键就是配置K8S的部署yam文件。首先我们需要在kubeedge-k8s-master-1服务器root根目录下创建对应服务的部署yam文件。

这里主要介绍duty-auto.yaml文件。具体每个字段含义这里也不做过多解释,下一节附上详解。

apiVersion: apps/v1

kind: Deployment

metadata:

  labels:

    k8s-app: duty-auto

  name: duty-auto

  namespace: ah-station

spec:

  replicas: 2

  selector:

    matchLabels:

      k8s-app: duty-auto

  template:

    metadata:

      labels:

        k8s-app: duty-auto

      name: duty-auto

    spec:

      nodeSelector:

        kubernetes.io/os: linux

        node: edgecore      

      containers:

      - name: ah-station

        image: 192.162.130.88:5000/docker_duty_auto:v1.0

        imagePullPolicy: IfNotPresent

        ports:

        - containerPort: 8087

          protocol: TCP

        livenessProbe:

          failureThreshold: 3

          tcpSocket:

            port: 8087

          initialDelaySeconds: 180

          periodSeconds: 10

          successThreshold: 1

          timeoutSeconds: 30

        resources:

          requests:

            cpu: 100m

            memory: 512Mi

          limits:

            cpu: 1000m

            memory: 1Gi

---        

apiVersion: v1

kind: Service

metadata:

  labels:

    k8s-app: duty-auto

  name: duty-auto

  namespace: ah-station

spec:

  type: LoadBalancer

  selector:

    k8s-app: duty-auto

  ports:

  - name: duty-auto

    port: 8087

    protocol: TCP

    targetPort: 8087

  externalIPs:

  - 192.162.123.101

  - 192.162.123.102

 

配置好duty-auto.yaml文件后,我们在kubeedge-k8s-master-1节点上使用 kubectl apply -f duty-auto.yaml 命令执行部署操作。

执行成功后通过浏览器访问dashboard管理面板可以看到指定的程序容器已经部署到相应节点上了。

https://dashboard.kubeedge-k8s/#

这样我们整个部署便宣告完成了。可以在访问对应节点的应用程序了。

  • 辅助介绍

1、yam文件详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值