【k8s】springboot项目迁移至k8s

一、迁移思路:

1、构建镜像;
1.准备基础镜像;
2.代码执行maven编译; jar包; (jenkins来完成;)
3.docker编译动作;(启停脚本;设定参数;)
4、构建;
5、通过kubernetes调度起来;
Deployment+service+ingress;  configmap.secret、pvc、pv;

二、本地交付springboot步骤:

安装java1.8 、 maven3.8(略)

wget https://linux.oldxu.net/springboot-helloworld-jar.tar.gz
tar xf springboot-helloworld-jar.tar.gz

#编译 & 运行
cd springboot-helloworld/
mvn clean package
java -jar -Xms100m -Xmx200m target/demo-service-1.0.jar

#访问站点
192.168.79.34:8080

在这里插入图片描述

三、springboot迁移至k8s

在这里插入图片描述

3.1 编写Dockerfile & entrypoint.sh & 构建/上传/docker运行

全路径:/root/k8sFile/project/springbootDemo/springboot-helloworld

#Dockerfile 
FROM openjdk:8-jre-alpine
COPY target/*.jar /demo-service.jar
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
EXPOSE 8080
ENTRYPOINT ["/bin/sh","-c","/entrypoint.sh"]
#entrypoint.sh
JAVA_OPTS="-Xms${XMS_OPTS:-200m} -Xmx${XMX_OPTS:-200m}"
SKY_OPTS=""       #链路追踪参数
MONITOR_OPTS=""   #prometheus参数
SENTINEL_OPTS=""  #限流参数
java -jar ${JAVA_OPTS} /demo-service.jar
#构建镜像 & 上传
docker login harbor.oldxu.net
docker build -t harbor.oldxu.net/base/spring:v1.0 .
docker push harbor.oldxu.net/base/spring:v1.0

docker pull harbor.oldxu.net/base/spring:v1.0

#docker运行测试
docker run -itd -P --name spring1 harbor.oldxu.net/base/spring:v1.0

#传参:
#错误写法:XMX_OPTS="-Xms100m -Xmx100m"
#docker run -itd -P -e XMX_OPTS="-Xms100m -Xmx100m" --name spring2 harbor.oldxu.net/base/spring:v1.0

docker run -itd -P -e JAVA_OPTS="-Xms100m -Xmx100m" --name spring2 harbor.oldxu.net/base/spring:v1.0

在这里插入图片描述

3.2 编写yaml(dp 、svc 、 ingress)

docker login harbor.oldxu.net
kubectl create secret docker-registry harbor-login --docker-server=xx.xx.net \
--docker-username=xx--docker-password=xx

dp.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: springboot
spec:
  replicas: 3
  selector:
    matchLabels:
      app: spring
  template:
    metadata:
      labels:
        app: spring
    spec:
      imagePullSecrets:
      - name: harbor-login
      containers:
      - name: springboot
        image: harbor.oldxu.net/base/spring:v1.0
        ports:
        - name: http
          containerPort: 8080
        
        env:   #传递初始堆内存和最大堆内存占用
        - name: XMS_OPTS
          valueFrom:
            resourceFieldRef:
              resource: requests.memory
        - name: XMX_OPTS
          valueFrom:
            resourceFieldRef:
              resource: limits.memory
         
        resources:
          requests:
            memory: 150Mi
          limits:
            memory: 300Mi
            
        readinessProbe:             #就绪探针;如果端口不存活,则从负载均衡中移除
          tcpSocket:
            port: http #http是一个名字;它会获取这个名字对应的端口;          
          initialDelaySeconds: 10
          failureThreshold: 3
        livenessProbe:    # 存活探针;获取url,状态码不对那么则触发重启操作
          httpGet:
            path: /
            port: http
          initialDelaySeconds: 10
          failureThreshold: 3
svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: spring-svc
spec:
  selector:
    app: spring
  ports:
  - port: 8080
    targetPort: 8080
ingress.yaml
由于用的是k8s v1.18.0,ingress旧版本写法。 井号注释的是新版ingress写法。
#apiVersion: networking.k8s.io/v1
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: springboot-ingress
spec:
  ingressClassName: "nginx"
  rules:
  - host: "springboot.oldxu.net"
    http:
      paths:
      - path: /
        #pathType: prefix
        backend:
          serviceName: spring-svc
          servicePort: 8080 
          #service:
            #name: spring-svc
            #port:
            #  number: 8080

访问
在这里插入图片描述

其他

#test.sh
JAVA_OPTS="-Xms${XMS_OPTS:-200m} -Xmx${XMX_OPTS:-200m}"
#java -jar $JAVA_OPTS /demo-service.jar
echo -e "值: $JAVA_OPTS"
传参改变值:
XMS_OPTS=512m XMX_OPTS=1024m ./test.sh


#查看实际跑的java项目的-Xms -Xmx是什么值
[root@node4 ~]# docker exec -it 43bf045df8ab ps
PID   USER     TIME  COMMAND
    1 root      0:00 {busybox} ash /entrypoint.sh
    7 root      0:15 java -jar -Xms200m -Xmx200m /demo-service.jar
   40 root      0:00 sh
   47 root      0:00 ps
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes(简称k8s)是一个容器编排平台,可以帮助我们管理和部署容器化的应用程序。 下面是在 Kubernetes 上部署 Spring Boot 项目的一般步骤: 1. 将 Spring Boot 项目打包成 Docker 镜像,并上传到 Docker 镜像仓库。 2. 创建一个 Kubernetes 集群。 3. 在 Kubernetes 中创建一个 Deployment 对象,用于部署 Spring Boot 应用程序。Deployment 对象可以指定要运行的容器镜像,副本数量等。 4. 在 Kubernetes 中创建一个 Service 对象,用于将外部请求路由到 Deployment 中的容器。可以将 Service 暴露为 NodePort、LoadBalancer 或 ClusterIP。 这里提供一个简单的示例命令: ``` # 1. 打包 Spring Boot 项目 mvn clean package # 2. 构建 Docker 镜像 docker build -t your-docker-repo/spring-boot-app:v1 . # 3. 上传 Docker 镜像到 Docker 镜像仓库 docker push your-docker-repo/spring-boot-app:v1 # 4. 创建一个 Deployment 对象 kubectl create deployment spring-boot-app --image=your-docker-repo/spring-boot-app:v1 --replicas=3 # 5. 创建一个 Service 对象 kubectl expose deployment spring-boot-app --type=LoadBalancer --port=8080 --target-port=8080 ``` 这个示例中,我们将 Spring Boot 应用程序打包成 Docker 镜像,并上传到 Docker 镜像仓库中。然后,我们使用 kubectl 命令来创建一个 Deployment 对象和一个 Service 对象,来部署和暴露 Spring Boot 应用程序。 需要注意的是,这里只是一个简单的示例,实际场景中可能需要更加复杂的配置和操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值