一、环境提前安装jdk和maven环境

参考文章:https://blog.csdn.net/weixin_43981131/article/details/128335689

二、将项目进行打包

执行命令:mvn clean package -Dmaven.test.skip=true
在这里插入图片描述

三、编写Dockerfile文件

# 指定基础镜像
FROM openjdk
# 打标签指定信息
LABEL author="lihaiming" version="v1.0"
# 创建用户需要root权限,所以先切换为root用户
USER root
# 设置环境变量
ENV LANG=zh_CN.UTF-8
ENV USNAME=lihaiming
ENV USERID=601
# 创建用户组和用户
RUN groupadd ${USNAME} -g ${USERID}; \
    useradd ${USNAME} -u ${USERID} -g ${USNAME} -d /${USNAME}; \
    chown -R ${USNAME}:${USNAME} /${USNAME} && chmod -R 755 /${USNAME};
# 将宿主机文件拷贝到容器内
COPY --chown=lihaiming:lihaiming ./target/dockerfile-0.0.1-SNAPSHOT.jar /lihaiming/jar/output/
# 切换执行用户
USER ${USNAME}
# 设置工作目录
WORKDIR /lihaiming/jar/output
# 容器内应用暴露的端口
EXPOSE 8080
# 设置应用启动命令
ENTRYPOINT ["/bin/bash","-c","java -jar /lihaiming/jar/output/dockerfile-0.0.1-SNAPSHOT.jar"]

在这里插入图片描述

四、通过Dockerfile文件构建镜像

#-f指定Dockerfile文件,-t指定生成的镜像名称和版本,最后的.代表上下文路径。
docker build -f Dockerfile -t app:3.0 . 

五、查看镜像docker images命令

如果我们使用的是本地自己生成的镜像,我们要保证在k8s的工作节点上必须都有对应的镜像才行,因为远程镜像仓库没有我们自己打的镜像,会拉取报错。

六、编写k8s的部署文件

6.1 imagePullPolicy,用于设置镜像拉取策略,kubernetes支持配置三种拉取策略:
  • Always:总是从远程仓库拉取镜像(一直远程下载)
  • IfNotPresent:本地有则使用本地镜像,本地没有则从远程仓库拉取镜像(本地有就本地 本地没远程下载)
  • Never:只使用本地镜像,从不去远程仓库拉取,本地没有就报错 (一直使用本地)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dev-deployment-app
  namespace: dev
spec:
  replicas: 3
  selector:
    matchLabels:
      app: app-pod
  template:
    metadata:
      labels:
        app: app-pod
    spec:
      containers:
      - name: java-app
        image: app:3.0
        imagePullPolicy: Never #指定镜像拉取策略为不使用远程拉取
        ports:
          - containerPort: 8080

6.2 如果服务想要被外部浏览器访问,可以创建NodePort类型的service
apiVersion: v1
kind: Service
metadata:
  name: service-nodeport
  namespace: dev
spec:
  selector:
    app: app-pod
  type: NodePort # service类型
  ports:
  - port: 8080
    nodePort: 30002 # 指定绑定的node的端口(默认的取值范围是:30000-32767), 如果不指定,会默认分配
    targetPort: 8080
    

七、用k8s部署项目

上述两个文件的起名为: app.yaml和app-service.yaml
部署命令:

kubectl apply -f app.yaml
kubectl apply -f app-service.yaml

查看状态:

kubectl get deploy,rs,pods,svc -n dev

通过状态来看都处于正常Running状态
在这里插入图片描述

八、浏览器访问部署好的项目

浏览器输入:Node工作节点ip加service暴露的nodePort: 30002端口
访问成功!!!如果发现浏览器不能访问到,可以删除pod和service然后根据yaml文件进行重启。
在这里插入图片描述

Logo

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

更多推荐