用k8s和docker从零部署项目
k8s和docker实战
·
一、环境提前安装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文件进行重启。
更多推荐
已为社区贡献1条内容
所有评论(0)