k8s部署web项目

本篇k8s版本为1.18, 容器运行时为docker
: kubernetes从1.24版本开始, 移除了对docker支持, 采用containerd作为容器运行时

一、准备镜像

  1. 准备包含web项目tomcat压缩包,jdk压缩包

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7JvWKSP3-1680597266913)(images/image-20230321150545441-16805972329092.png)]

  2. 在上一步目录编写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
    
  3. 构建镜像

    docker build -t myweb:v1 .
    

    选项:

    tips:当使用Dockerfile构建镜像时,所在的目录一定要使用一个干净的目录(最好新建一个),以免目录下有其他文件构建加载当前目录下所有文件,导致磁盘爆满)。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tAU7bGHn-1680597266915)(images/image-20230321151843654.png)]

    输出Successfully tagged myweb:v1后使用docker images命令查看镜像

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GaXvMzdj-1680597266917)(images/image-20230321152127777.png)]

  4. 启动镜像

    docker run -d -p 18080:8080 --name myweb -v /home/tomcat/logs:/usr/local/apache-tomcat-9.0.64/logs --restart=always myweb:v1
    

    选项:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eYAWGWMY-1680597266918)(images/image-20230321152801566.png)]

    测试访问

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KqV2m7wF-1680597266921)(images/image-20230321153127215.png)]

  5. 打包镜像

    docker save myweb:v1 -o /app/myweb.tar
    

    docker save 用来保存镜像

    格式: docker save 镜像名:版本号 -o /路径/保存包名.tar

    选项: -o: 输出文件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CDvyBKTk-1680597266921)(images/image-20230321153802978.png)]

MySQL镜像就不多介绍了, 如果k8s集群外网环境或者有自己仓库源直接跳过此处

如果是内网环境

docker pull mysql:版本拉取镜像, 然后使用docker save命令将镜像输出文件即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W2sXvhOl-1680597266922)(images/image-20230321155131202.png)]

二、Work节点导入镜像

  1. 将上一步导出的镜像上传到work节点

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VQTBICRN-1680597266923)(images/image-20230404151254138.png)]

  2. 镜像文件加载docker镜像中

    docker load -i myweb.tar
    

    docker load 用于加载镜像文件

    格式: docker load -i 镜像文件

    选项: -i: 指定导入文件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fcjVrst4-1680597266924)(images/image-20230404151929284.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x8uFOItO-1680597266925)(images/image-20230404152016432.png)]

三、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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ejz2GGia-1680597266925)(images/image-20230404161411208.png)]

#查看pods的详细信息
kubectl describe pods myweb

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jSfvyhth-1680597266926)(images/image-20230404161346960.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mN50HdU0-1680597266927)(images/image-20230404162808350.png)]

3.查看创建的资源

kubectl get pods,svc -o wide

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jNqRFQ4C-1680597266928)(images/image-20230404162931760.png)]

通过集群中的任意节点+NodePort访问

[外链图片转存中...(img-mN50HdU0-1680597266927)]

原文地址:https://blog.csdn.net/m0_67075643/article/details/129956541

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_22188.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注