jenkins+kubernetes(k8s)发布Java项目
记录一下学习k8s+jenkins发布项目的过程,期间遇到很多坑。希望能让刚接触的童鞋少走弯路。
准备工作
本篇只介绍发布的过程,在这之前有很多必要的工作要做:
- k8s集群搭建 ,我自己搭的是3个节点的集群;
- harbor搭建 ,docker镜像私仓;
机器列表
host | ip | 描述 |
---|---|---|
centos7docker | 192.168.147.129 | harbor私仓机器 |
k8smaster | 192.168.147.130 | k8smaster节点 |
k8sworker1 | 192.168.147.131 | k8s节点 |
k8sworker2 | 192.168.147.132 | k8s节点 |
镜像列表
镜像名称 | 依赖的镜像 | 描述 |
---|---|---|
jenkins/jenkins:lts | 无 | jenkins官方镜像 |
centos7docker:443/aliang-xyl/jenkins:lts | jenkins/jenkins:lts | 自制jenkins镜像 |
centos:7 | 无 | centos7官方镜像 |
centos7docker:443/aliang-xyl/java8:jdk-8u231 | centos:7 | 自制java服务基础镜像 |
centos7docker:443/aliang-xyl/provider-docker-demo:e161850 | centos7docker:443/aliang-xyl/java8:jdk-8u231 | java服务镜像 |
创建一个java项目
创建一个Java项目,结构如下:
项目Dockerfile文件内容, 用于项目打包成镜像
# 基于哪个镜像, 这个是我自定义的镜像,可根据实际情况更改
FROM centos7docker:443/aliang-xyl/java8:jdk-8u231
ARG JAR_FILE
ADD target/provider-docker-demo.jar /provider-docker-demo.jar
# 配置容器启动后执行的命令
ENTRYPOINT ["java","-Ddemo.test=test", "-Xmn256M", "-Xms1G", "-Xmx1G", "-XX:MetaspaceSize=512M","-jar","/provider-docker-demo.jar"]
k8s.ymal文件内容
apiVersion: v1
kind: Service
metadata:
name: provider-docker-demo
namespace: default
labels:
app: provider-docker-demo
spec:
type: NodePort
ports:
- port: 30001
nodePort: 30001 #service对外开放端口
selector:
app: provider-docker-demo
---
apiVersion: apps/v1
kind: Deployment #对象类型
metadata:
name: provider-docker-demo #名称
labels:
app: provider-docker-demo #标注
spec:
replicas: 1 #运行容器的副本数,修改这里可以快速修改分布式节点数量
selector:
matchLabels:
app: provider-docker-demo
template:
metadata:
labels:
app: provider-docker-demo
spec:
containers: #docker容器的配置
- name: provider-docker-demo
image: centos7docker:443/aliang-xyl/provider-docker-demo:<BUILD_TAG> # pull镜像的地址 ip:prot/dir/images:tag
imagePullPolicy: IfNotPresent #pull镜像时机,
ports:
- containerPort: 30001 #容器对外开放端口
volumeMounts:
- mountPath: logs/privider-demo
name: provider-docker-demo-logs
volumes:
- name: provider-docker-demo-logs
hostPath:
path: /home/logs/privider-docker-demo
自定义基础docker镜像Dockerfile,定制一个Java服务运行的基础镜像
# centos:7是官方镜像
FROM centos:7
# jdk信息
ADD jdk-8u231-linux-x64.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_231
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
# 更改系统语言,不更改的话java服务中中文会出现乱码
RUN yum -y install kde-l10n-Chinese telnet && \
yum -y install glibc-common &&\
yum clean all && \
localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
ENV LC_ALL=zh_CN.utf8
ENV LANG=zh_CN.utf8
ENV LANGUAGE=zh_CN.utf8
# 更改时区
RUN echo 'Asia/Shanghai' >/etc/timezone
创建基础镜像