四 k8s里面部署java项目

一 创建nfs(maste节点操作,两个node节点也需要安装)

1 首先安装一个nfs服务器,配置共享目录,

[[email protected] ~]$ cat /etc/exports
/home/yx/hnf *(rw,no_root_squash)
 然后启动nfs

2 然后在master上面创建一个nfs pv的动态供给,需要三个文件class.yaml deployment.yaml rbac.yaml

这三个文件去网上下载 https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client/deploy
rbac是让nfs有权限访问apiserver,其中需要更改的地方是deploynment.yaml里面的nfsip地址和nfs所共享的目录

kubectl create -f rbac.yaml
kubectl create -f class.yaml
kubectl create -f deployment.yaml #第一次创建的时候回提示存在,不知道什么原因,然后删除,再次创建即可

最后查看是否创建成功

[[email protected] nfs]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-89bb89db6-gwdhn 1/1 Running 0 4m46s

二 自己搭建dockerhub私有仓库,或者注册公有仓库,下面的操作在node节点上操作

1拉取项目代码

1 拉取代码,通过git
git clone https://github.com/lizhenliang/tomcat-java-demo.git
2 编译,要进入到项目那个目录里面
yum install maven 安装编译所需要的命令
mvn clean package
第一次需要很长的时间

3 镜像打包
需要先登录  docker login  用户名和密码就是你注册时候的用户名和密码
sudo docker build -t huningfei/tomcat .
sudo docker push huningfei/tomcat:latest   #上传到dockerhub的公有仓库

三 创建java项目的yaml文件(master上面)

1 创建命名空间 namespace

namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: test

2 创建deployment 先创建secret认证 ,否则不能下载镜像

因为我的镜像上传到了dockerhub的公有仓库,如果是私有的,后面还需要跟 --docker-server=dockerhub-ip地址

认证:

kubectl create secret docker-registry  registry-pull-secret --docker-username=huningfei --docker-password=password [email protected] -n test
## 查看是否创建成功

[[email protected] java-demo]$ kubectl get secret -n test
NAME                   TYPE                                  DATA   AGE
default-token-t2xwp    kubernetes.io/service-account-token   3      3m4s
registry-pull-secret   kubernetes.io/dockerconfigjson        1      34s

deployment.yaml 创建指定的pod

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: tomcat-java-demo
  namespace: test
spec:
  replicas: 3
  selector:
    matchLabels:
      project: www
      app: java-demo
  template:
    metadata:
      labels:
        project: www
        app: java-demo
    spec:
      imagePullSecrets:
      - name: registry-pull-secret
      containers:
      - name: tomcat
        image: huningfei/tomcat:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
          name: web
          protocol: TCP
        resources:
          requests:
            cpu: 0.5
            memory: 1Gi
          limits:
            cpu: 1
            memory: 2Gi
        livenessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 60
          timeoutSeconds: 20
        readinessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 60
          timeoutSeconds: 20

创建deployment

kubectl create -f deployment.yaml   #创建

[[email protected] java-demo]$ kubectl get pods -n test  #查看是否创建成功
NAME                                READY   STATUS    RESTARTS   AGE
tomcat-java-demo-755456cdd6-49rcc   0/1     Running   0          61s
tomcat-java-demo-755456cdd6-khvsc   0/1     Running   0          61s
tomcat-java-demo-755456cdd6-n67dt   0/1     Running   0          61s

发现三个tomct容器创建成功了

3 创建service,把端口映射出去

kubectl create -f service.yaml

apiVersion: v1
kind: Service
metadata:
  name: tomcat-java-demo
  namespace: test
spec:
  selector:
    project: www
    app: java-demo
  ports:
  - name: web
    port: 80
    targetPort: 8080

4 创建ingress,为了使用域名访问(创建这个文件的是要提前部署好ingress mandatory.yaml)

kubectl create -f ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tomcat-java-demo
  namespace: test
spec:
  rules:
    - host: java.ctnrs.com
      http:
        paths:
        - path: /
          backend:
            serviceName: tomcat-java-demo
            servicePort: 80

5 最后查看pod和svc

kubectl get pod,svc -n test
NAME                                    READY   STATUS    RESTARTS   AGE
pod/tomcat-java-demo-755456cdd6-49rcc   1/1     Running   0          6m13s
pod/tomcat-java-demo-755456cdd6-khvsc   1/1     Running   0          6m13s
pod/tomcat-java-demo-755456cdd6-n67dt   1/1     Running   0          6m13s

NAME                       TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/tomcat-java-demo   ClusterIP   10.0.0.98    <none>        80/TCP    48s

#查看ingress在那个node上面
[[email protected] java-demo]$ kubectl get pods -n ingress-nginx -o wide
NAME                                        READY   STATUS    RESTARTS   AGE    IP               NODE             NOMINATED NODE
nginx-ingress-controller-7d8dc989d6-sfqcd   1/1     Running   0          2d5h   192.168.18.105   192.168.18.105   <none>

6 创建mysql,数据库没必要让外网访问,所以不产生ip

mysql.yaml

kubectl create -f mysql.yaml

apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: test
spec:
  ports:
  - port: 3306
    name: mysql
  clusterIP: None
  selector:
    app: mysql-public

---

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: db
  namespace: test
spec:
  serviceName: "mysql"
  template:
    metadata:
      labels:
        app: mysql-public
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"
        - name: MYSQL_DATABASE
          value: test
        ports:
        - containerPort: 3306
        volumeMounts:
        - mountPath: "/var/lib/mysql"
          name: mysql-data
  volumeClaimTemplates:
  - metadata:
      name: mysql-data
    spec:
      accessModes: ["ReadWriteMany"]
      storageClassName: "managed-nfs-storage"
      resources:
        requests:
          storage: 2Gi

7 查看pv

kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                  STORAGECLASS          REASON   AGE
pvc-73253e56-b425-11e9-b2ea-000c29bfd03f   2Gi        RWX            Delete           Bound    test/mysql-data-db-0   managed-nfs-storage            26m

8 进入数据库,导入表结构

kubectl exec -it db-0 bash -n test

然后把sql文件导入到数据库中,scp -r /home/yx/tomcat-java-demo/db/tables_ly_tomcat.sql 到maste上面
然后用kubeclt 直接拷贝到容器里面
kubectl cp /tmp/tables_ly_tomcat.sql db-0:/ -n test #db-0是pod的名字
最后在登陆到数据库中,source即可导入

9 更改数据库的ip,也就是mysql pod的名字

vim tomcat-java-demo/src/main/resources/application.yml

前面是pod的名字,然后是service名字(serviceName),最后是namespace命名空间

10 改完之后需要重新构建镜像

 mvn clean package
然后sudo docker build -t huningfei/tomcat:1.0 .
推送 sudo docker push huningfei/tomcat:1.0   也可以指定别的版本,如2.0

然后可以去dockhub上面查看

11 滚动更新pod

如果镜像名字有变化,需要先更改deployment.yaml

没有则直接 kubectl apply -f deployment.yaml
然后查看是否在滚动更新
kubectl get pods -n test
下面这种情况说明在滚动更新,等最下面那个启动完成之后,原来的就删除掉一个

12 最后绑定域名,浏览器查看java.ctnrs.com

#查看域名
[[email protected] java-demo]$ kubectl get ingress -n test
NAME               HOSTS            ADDRESS   PORTS   AGE
tomcat-java-demo   java.ctnrs.com             80      139m

最后访问域名即可,测试功能是否正常

原文地址:https://blog.51cto.com/825536458/2428407

时间: 2024-10-08 22:38:26

四 k8s里面部署java项目的相关文章

Reahat5.5安装jdk、tomcat并部署Java项目

1 下载并安装jdk 虚拟机中安装Redhat5.5 64位企业版, 这里以jdk-7u75-linux-x64.tar.gz为例 在网上下载到这个版本的jdk,或者点击此处下载(访问密码 375a) 以root用户上传到linux系统,并授予其执行的权限 # mkdir /usr/java # cd /usr/java # tar -xvzf jdk-7u75-linux-x64.tar.gz # mv jdk1.7.0_75/ jdk7 # ls -l total 139056 drwxr-

Linux(ubuntu/centos) 部署Java项目 外加安装jdk+tomcat+Mysql

这是我第一次写博文,我希望我写的文本能够帮助到大家,这能让我感到很满足! 本次分享的文章 主要解决 Linux下(ubuntu+centos) 部署Java项目 当然也包括安装jdk+tomcat+mysql 准备环境: 系统环境:

在linux上部署Java项目

在linux上部署Java项目 查看tomcat的运行状态 ps -auxwf | grep java 或者查看 端口的占用,具体端口看自己的配置 netstat -lnpt | grep 8080 启动和关闭 打开 ./startup.sh 关闭 ./shutdown.sh 查看MySql的运行状态 /etc/init.d/mysqld status #已添加到系统服务,以下命令可以查看 service mysqld status 或者过滤进程名或者端口(参考自己的设置) ps -aux |

Linux上部署Java项目

一.在Linux上安装jdk 下载:登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选择对应jdk版本下载.(可在Windows上下载完成后,通过ftp文件夹共享到Linux上) 登陆linux:su root 获取root用户权限,当前工作目录不变(需要root密码)或sudo -i 不需要root密码直接切换成root(需要当前用户密码) 在user目录下建立ja

jenkins 部署java 项目

jenkins 部署java 项目 java 的项目是需要编译和打包的 编译和打包用maven完成,所以需要进行安装maven 本次的实验,我们采用git 私有仓库的形式,涉及到秘钥的配置 准备工作: 自己的git仓库  已经搭建完毕 生成秘钥对 下载zrlog 的源码 下载的文件进行解压https://github.com/94fzb/zrlog/archive/master.zip 然后用git push到git 私有仓库中 下载源代码 [[email protected] caosm]#

git jenkins 部署java项目

1.Java项目部署基本概述:  1.什么是Java项目?  2.为什么Java项目需要使用Maven编译?  3.手动实现Java项目构建?  4.手动实现Java项目架构图? 源码包   jar包  war包    1.JAVA源码包--编译--> war --编译的过程中需要依赖--> jar包    2.JAVA源码包也可以编译生成 jar包  (需要被依赖才会启用   -->不能独立运行)    3.有的jar可以独立运行   java -jar xx.jar 手动部署Java

windows一键部署java项目

因为公司需求,要在windows的环境上做一键部署启动java项目,同时还要支持从安装界面动态修改配置文件的IP地址.就像安装软件一样将jdk,tomcat,mysql,influxdb,nginx安装并配置到系统上,顺便还要初始化一下数据.花了一周的时间,这里记录我的踩坑日志. 准备工作 磨刀不误砍柴工,选择好工具可以事半功倍. 一).Inno Setup,一款为Windows程序提供的免费安装程序,通过它可以将需要的文件压缩打包成exe安装程序,然后像安装程序一样解压到另外一个环境中.官网地

Ant入门教程之部署Java项目

Ant可以代替使用javac.java和jar等命令来执行java操作,从而达到轻松的构建和部署Java工程的目的. 1.利用ant的javac命令来编译Java程序 Ant的javac命令用于实现编译Java程序的功能.下面来看一个简单的例子:首先我们建立名为 JavaPro的Java项目, 建立src目录为源代码目录,在src目录下建立TestAnt.java这个类文件.该类文件的内容如下: package com.home; public class TestAnt{ public sta

Centos7安装Tomcat 、JDK达到部署Java项目环境

我们先安装JDK,然后在安装Tomcat 用wget命令先下载安装包 [[email protected] ~]# wget https://www.reucon.com/cdn/java/jdk-8u45-linux-x64.tar.gz [[email protected] ~]#tar zxvfjdk-8u45-linux-x64.tar.gz –C /usr/local (解压到/usr/local目录下) [[email protected] ~]#cd /etc/profile.d/