1 容器交付流程

1.1 开发阶段

● 编写代码。
● 测试。
● 编写Dockerfile。

1.2 持续集成

● 代码编译、打包。
● 制作镜像。
● 将镜像上传到镜像仓库。

1.3 应用部署

● 环境准备。
● 创建Pod、Service、Ingress。

1.4 运维

● 监控。
● 故障排查。
● 应用升级及优化。
● ……

2 k8s中部署Java项目的流程

● ① 通过Dockerfile制作镜像。
● ② 将镜像推送到镜像仓库,比如阿里云镜像仓库等。
● ③ Pod控制器部署镜像。
● ④ 创建Service或Ingress对外暴露应用。
● ⑤ 对集群进行监控、升级等。

3 k8s中部署Java项目

3.1 前提说明

● 本人是在Windows进行开发的,部署在Linux(CentOS7)中的k8集群。

3.2 准备Java项目,并将项目进行打包

3.2.1 概述

● 准备一个Java项目,将Java项目进行打包,本次使用SpringBoot项目为例,使用的JDK的版本是11。

3.2.2 准备工作

● JDK 11 。
● Maven 3.6x。

3.2.3 演示的SpringBoot项目

● pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>springboot2</artifactId>
    <version>1.0</version>
    <name>springboot2</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>11</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

● HelloController.java

package com.example.springboot2.web;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author 许大仙
 * @version 1.0
 * @since 2021-01-12 09:18
 */
@RestController
public class HelloController {

    @RequestMapping(value = "/hello")
    public String hello() {
        return "hello";
    }

}

● 启动类:

package com.example.springboot2;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Springboot2Application {

    public static void main(String[] args) {
        SpringApplication.run(Springboot2Application.class, args);
    }
}

3.2.4 使用Maven进行打包

打包命令:

mvn clean install

在这里插入图片描述

3.2.5 在项目的根目录下新建Dockerfile文件

Dockerfile:

FROM openjdk
VOLUME /tmp
COPY ./target/springboot2-1.0.jar springboot2-1.0.jar
RUN bash -c "touch /springboot2-1.0.jar"
# 声明时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
#声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务
EXPOSE 8080
ENTRYPOINT ["java","-jar","/springboot2-1.0.jar"]

在这里插入图片描述

3.3 制作镜像

● 将整个项目通过ftp上传到k8s集群所在的服务器中(其实完全可以只上传jar包和Dockerfile文件)。
在这里插入图片描述
● 进入springboot2目录:

cd springboot2

在这里插入图片描述
使用docker build构建镜像:

# springboot是镜像的名称
docker build -t springboot2 .

3.4 推送镜像

● 阿里云创建命名空间:

在这里插入图片描述
在这里插入图片描述
● 阿里云创建镜像仓库:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
● 登录阿里云Docker Registry:

sudo docker login --username=阿里云账号 registry.cn-hangzhou.aliyuncs.com

在这里插入图片描述
● 查看上传的Docker镜像的id:

docker images

在这里插入图片描述
● 给镜像打tag:

sudo docker tag bc56e4a83ff7 registry.cn-hangzhou.aliyuncs.com/k8s-test-123/springboot2:latest

在这里插入图片描述
● 推送镜像:

sudo docker push registry.cn-hangzhou.aliyuncs.com/k8s-test-123/springboot2:latest

3.5 部署镜像暴露应用

创建deployment.yaml文件,内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: springboot2
  name: springboot2
spec:
  replicas: 3
  selector:
    matchLabels:
      app: springboot2
  template:
    metadata:
      labels:
        app: springboot2
    spec:
      containers:
      - image: registry.cn-hangzhou.aliyuncs.com/k8s-test-123/springboot2:latest
        name: springboot2

创建Deployment:

kubectl create -f deployment.yaml

在这里插入图片描述
● 查看Deployment和Pod:

kubectl get deploy,pod

在这里插入图片描述
● 创建service.yaml文件,内容如下:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: springboot2
  name: svc
spec:
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
    nodePort: 30091
  selector:
    app: springboot2
  type: NodePort

创建Service:

kubectl create -f service.yaml

在这里插入图片描述
查看Service:

kubectl get service
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐