k8s部署web项目
本篇k8s版本为1.18, 容器运行时为docker
注: kubernetes从1.24版本开始, 移除了对docker的支持, 采用containerd作为容器运行时
一、准备镜像
-
准备包含web项目的tomcat压缩包,jdk压缩包
-
在上一步的目录下编写dockerfile文件
vim dockerfile
FROM centos:7 ADD apache-tomcat-9.0.64.tar.gz /usr/local/ ADD jdk-8u291-linux-x64.tar.gz /usr/local/ # 定义工作目录 ENV MYPATH /usr/local WORKDIR $MYPATH # 设置JAVA_HOME 环境变量 ENV JAVA_HOME /usr/local/jdk1.8.0_291 # 设置CLASSPATH 环境变量 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.64 ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.64 # 设置PATH ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin # 暴露端口 EXPOSE 8080 # 指定容器启动后执行的命令 CMD /usr/local/apache-tomcat-9.0.64/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.64/logs/catalina.out
-
构建镜像
docker build -t myweb:v1 .
选项:
-
-t
给镜像加一个Tag -
myweb
镜像名称 -
v1
镜像版本号 -
.
表示当前目录,即Dockerfile所在目录
tips
:当使用Dockerfile
构建镜像时,所在的目录一定要使用一个干净的目录(最好新建一个),以免目录下有其他文件(构建会加载当前目录下所有文件,导致磁盘爆满)。输出Successfully tagged myweb:v1后使用
docker images
命令查看镜像 -
-
启动镜像
docker run -d -p 18080:8080 --name myweb -v /home/tomcat/logs:/usr/local/apache-tomcat-9.0.64/logs --restart=always myweb:v1
选项:
-
--name
: 容器名称 -
-d
: 后台启动 -
-p
: 映射端口 -
--restart=always
: 容器自启(默认为no) -
-v
: 目录挂载
测试访问
-
-
打包镜像
docker save myweb:v1 -o /app/myweb.tar
docker save 用来保存镜像
格式:
docker save 镜像名:版本号 -o /路径/保存的包名.tar
选项:
-o
: 输出到文件
MySQL镜像就不多介绍了, 如果k8s集群有外网环境或者有自己的仓库源直接跳过此处
如果是内网环境
docker pull mysql:版本号
拉取镜像, 然后使用docker save
命令将镜像输出到文件即可
二、Work节点导入镜像
-
将上一步导出的镜像上传到work节点中
-
将镜像文件加载到docker镜像中
docker load -i myweb.tar
docker load 用于加载镜像文件
格式:
docker load -i 镜像文件
选项:
-i
: 指定导入的文件
三、master节点编写yaml文件并创建资源
1.创建deployment资源
vim deploy.yaml
#控制器定义
apiVersion: apps/v1 #指定api版本标签
kind: Deployment #定义资源类型
metadata:
name: myweb #定义资源名称
spec:
replicas: 1 #定义副本数量
selector:
matchLabels: #定义标签选择器,与被控制对象绑定
name: myweb
#被控制对象
template:
metadata: #定义标签选择器
labels:
name: myweb
spec:
containers: #定义容器属性
- name: myweb #镜像名称,一个name定义一个容器,多个容器使用`-`区分
image: myweb:v1 #镜像地址
imagePullPolicy: IfNotPresent #拉取策略
ports:
- name: myweb #端口名称
containerPort: 8080 #容器端口
protocol: TCP #端口协议
resources: #资源管理
limits:
cpu: 500m
memory: 1024Mi
requests:
cpu: 200m
memory: 1024Mi
- name: mysql
image: mysql:5.7
resources:
requests:
memory: 1Gi
cpu: 500m
limits:
memory: 1Gi
cpu: 500m
ports:
- name: mysql
containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: root #设置root密码
args:
- --character-set-server=utf8mb4 #字符集为utf8
- --collation-server=utf8mb4_unicode_ci
- --lower_case_table_names=1 #不区分大小写
volumeMounts: #定义数据卷目录,没有自动创建
- name: vol-mysql-data
mountPath: /var/lib/mysql
volumes: #定义数据卷挂载目录
- name: vol-mysql-data
hostPath:
path: /usr/lib/mysql
#通过yaml文件创建实例
kubectl apply -f deploy.yaml
#查看pods的详细信息
kubectl describe pods myweb
2.创建service资源
vim svc.yaml
apiVersion: v1
kind: Service
metadata:
name: myweb-svc
spec:
ports:
- name: myweb #端口名称,一个name定义一个端口
nodePort: 31369 #集群对外暴露端口,通过nodeip:nodePort访问
port: 18080 #集群内部访问端口,通过ClusterIP:prot访问
protocol: TCP
targetPort: 8080 #目标端口,也就是容器的端口
- name: mysql
nodePort: 31379
port: 13306
protocol: TCP
targetPort: 3306
selector:
name: myweb #指定label标签的pod绑定
type: NodePort #services类型,默认ClusterIP,NodePort时可指定端口
kubectl apply -f svc.yaml
3.查看创建的资源
kubectl get pods,svc -o wide
通过集群中的任意节点+NodePort访问文章来源:https://www.toymoban.com/news/detail-661218.html
文章来源地址https://www.toymoban.com/news/detail-661218.html
到了这里,关于k8s内网环境部署web项目(tomcat+mysql)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!