云原生—构建—发布—部署—Spring Boot Dubbo 微服务—K8S
前置说明
上篇文章,通过 Kind和Helm 搭建了本地开发环境,部署了 Redis/Zookeeper/MySQL 服务,
本篇把本地开发的 Spring Boot Dubbo 微服务应用,一键构建打标发布镜像,并部署到 K8S.
一键构建打标发布镜像
拉镜像
runImage and builder
paketobuildpacks/run:base-cnb
paketobuildpacks/builder:base
pullPolicy = "IF_NOT_PRESENT"
runImage = "paketobuildpacks/run:base-cnb"
builder = "paketobuildpacks/builder:base"
打标镜像
imageName
imageName = "registry.cn-shenzhen.aliyuncs.com/uid13/${
project.name}:${
project.version}"
发布镜像到 Aliyun
docker {
publishRegistry {
url = "registry.cn-shenzhen.aliyuncs.com"
username = "你的账号"
password = "你的密码"
}
}
publish = true
备注
若不想发布,直接在 K8S 用,则执行
kind load docker-image demo-app:1.0-SNAPSHOT --name default
Dependency Mappings
构建镜像,默认会下载:
https://github.com/bell-sw/Liberica/releases/download/17.0.1+12/bellsoft-jre17.0.1+12-linux-amd64.tar.gz
https://github.com/anchore/syft/releases/download/v0.33.0/syft_0.33.0_linux_amd64.tar.gz
https://repo.spring.io/release/org/springframework/cloud/spring-cloud-bindings/1.8.0/spring-cloud-bindings-1.8.0.jar
在国内,这些文件是需要科学上网才能成功下载的,而 CNB(Cloud Native Builder) 提供了 Dependency Mappings 改变下载地址.
file 协议,从本地下载
创建自定义目录结构
PS D:\IdeaProjects\reproduce-demo> tree /f cnb
卷 Data 的文件夹 PATH 列表
卷序列号为 000000BD EE47:E3A1
D:\IDEAPROJECTS\REPRODUCE-DEMO\CNB
└─bindings
├─binary
│ bellsoft-jre17.0.1+12-linux-amd64.tar.gz
│ spring-cloud-bindings-1.8.0.jar
│ syft_0.33.0_linux_amd64.tar.gz
│
└─mapping
3ac79e13f80582bb2289ded782d1d43aafcb7041be08cc9f2e8796b4f3f6262d
9b937fe5dfe37547cef0b5952f38ef098d8cb6307763e4c4036eff315614bb93
c75ef3152817c28c7049d7e0052dfba3ed461a7151984e594b656c0be927888e
type
科学上网下载放入 cnb/bindings/binary,mapping 下创建 type 文件,内容为 dependency-mapping
获取 sha256Hex
import cn.hutool.core.io.FileUtil;
import cn.hutool.crypto.digest.DigestUtil;
import lombok.extern.slf4j.Slf4j;
import java.io.File;
import java.util.List;
@Slf4j
public class PrintData {
public static void main(String[] args) {
String path = "D:\\IdeaProjects\\reproduce-demo\\cnb\\bindings\\binary";
List<File> files = FileUtil.loopFiles(path);
files.forEach(file -> {
String sha256Hex = DigestUtil.sha256Hex(file);
log.info("File: {}, sha256Hex: {} \n", file.getName(), sha256Hex);
});
}
}
14:14:11.031 [main] INFO com.lab.util.PrintData - File: bellsoft-jre17.0.1+12-linux-amd64.tar.gz, sha256Hex: 9b937fe5dfe37547cef0b5952f38ef098d8cb6307763e4c4036eff315614bb93