在 Kubernetes 集群中部署 Java 项目
在 Kubernetes 集群中部署 Java 项目
1.1 k8s 部署 java 项目流程
- 制作镜像【Dockerfile】
- 上传到镜像仓库【Dockerhub、阿里云、网易】
- 控制器部署镜像【Deployment】
- 对外暴露应用【Service、Ingress】
- 运维【监控、升级】
1.2 制作 Jar 包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| project/ └── demojenkins ├── demojenkins.iml ├── Dockerfile ├── HELP.md ├── mvnw ├── mvnw.cmd ├── pom.xml ├── src │ ├── main │ └── test ## 使用 java 和 Maven 进行打包 ## 使用 java (springboot)进行打包 └── target # jar 包 ├── classes ├── generated-sources ├── generated-test-sources ├── maven-archiver ├── maven-status ├── surefire-reports ├── demojenkins.jar ## jar 包
|
1.3 制作镜像 Dockerfile
1 2 3 4
| FROM openjdk:8-jdk-alpine VOLUME /tmp ADD ./target/demojenkins.jar demojenkins.jar ENTRYPOINT ["java","-jar","/demojenkins.jar", "&"]
|
打包镜像:
1 2
| cd javaproject/demojenkins/ docker build -t java-demo-01:latest .
|
测试镜像容器:
1
| docker run -d -p 8111:8111 java-demo-01:latest -t
|
上传到镜像仓库:(本地仓库)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| # mkdir -p /data/myregistry docker pull registry:latest docker run -d -p 5000:5000 --name my_registry --restart=always -v /data/myregistry:/var/lib/registry registry:latest
# # cat > /etc/docker/daemon.json << EOF { "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"], "insecure-registries": ["192.168.60.151:5000"] } EOF # systemctl restart docker # 3 台机器上执行 docker start my_registry # 主节点上执行(因为私人仓库在主节点上)
|
测试本地私有仓库:
1 2
| docker tag java-demo-01 192.168.60.151:5000/test/java-demo-01:v1 docker push 192.168.60.151:5000/test/java-demo-01:v1
|
1.4 部署项目
1 2 3 4 5 6 7 8 9 10
| kubectl create deployment java01 --image=192.168.60.151:5000/test/java-demo-01:v1 --dry-run -o yaml > java01.yaml kubectl create -f java01.yaml kubectl get pod -o wide kubectl expose deployment java01 --port=8111 --target-port=8111 --type=NodePort
# [root@k8smaster test]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE java01 NodePort 10.109.195.123 <none> 8111:31954/TCP 15s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d
|
其实不一定非要部署 jar 包
部署其他服务也是一样的,比如部署 nginx,将 index.html 换掉。(学会这个,其他的都会了)
总结一下要点:
制作项目的 docker 镜像
将镜像上传到 docker 仓库
使用 k8s 部署项目
完 …….