k8s部署web项目
本篇k8s版本为1.18, 容器运行时为docker
注: kubernetes从1.24版本开始, 移除了对docker的支持, 采用containerd作为容器运行时
一、准备镜像
-
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 .
选项:
tips
:当使用Dockerfile
构建镜像时,所在的目录一定要使用一个干净的目录(最好新建一个),以免目录下有其他文件(构建会加载当前目录下所有文件,导致磁盘爆满)。 -
启动镜像
docker run -d -p 18080:8080 --name myweb -v /home/tomcat/logs:/usr/local/apache-tomcat-9.0.64/logs --restart=always myweb:v1
选项:
-
打包镜像
docker save myweb:v1 -o /app/myweb.tar
MySQL镜像就不多介绍了, 如果k8s集群有外网环境或者有自己的仓库源直接跳过此处
docker pull mysql:版本号
拉取镜像, 然后使用docker save
命令将镜像输出到文件即可
二、Work节点导入镜像
三、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
原文地址:https://blog.csdn.net/m0_67075643/article/details/129956541
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_22188.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。