K8S部署SpringBoot项目

11 篇文章 2 订阅
11 篇文章 0 订阅

K8S部署SpringBoot项目

环境准备

安装好K8S,没搭建K8S的可查看:kubeadm方式搭建K8S集群RKE搭建K8S【强烈推荐】

Springboot项目打包并构建镜像,不会可查看:docker镜像生成

创建阿里云镜像仓库
`01、登录阿里云Docker Registry
$ docker login --username=benkid52 registry.cn-hangzhou.aliyuncs.com

`02、查看镜像
$ docker images
#========================================================================================
REPOSITORY             TAG                IMAGE ID       CREATED          SIZE
school           latest             879af1da0d2b   35 minutes ago   748MB
#========================================================================================

`03、推送镜像
$ docker tag 879af1da0d2b registry.cn-hangzhou.aliyuncs.com/zhangzhiwei/zzwman123:school
$ docker push registry.cn-hangzhou.aliyuncs.com/zhangzhiwei/zzwman123:school

`注意阿里云仓库如果设置了私有,就得配置K8S秘钥,去配置到yaml中,最后是公开
编写schoolexam.yaml【Deployment】
vi schoolexam.yaml
#========================================================================================
apiVersion: apps/v1  #kubectl api-versions 可以通过这条指令去看版本信息
kind: Deployment # 指定资源类别
metadata: #资源的一些元数据
  name: schoolexam-deployment #deloyment的名称
  labels:
    app: schoolexam-deployment  #标签
spec:
  replicas: 1 #创建pod的个数
  selector:
    matchLabels:
      app: schoolexam-deployment #满足标签为这个的时候相关的pod才能被调度到
  template:
    metadata:
      labels:
        app: schoolexam-deployment
    spec:
      containers:
        - image: registry.cn-hangzhou.aliyuncs.com/zhangzhiwei/zzwman123:school
          imagePullPolicy: IfNotPresent
          name: schoolexam-deployment
          ports:
          - containerPort: 8080
#========================================================================================
运行生成Pod容器
kubectl create -f schoolexam.yaml
#查看执行结果
kubectl get pods
#========================================================================================
NAME                                    READY   STATUS    RESTARTS      AGE
schoolexam-deployment-dbf487b45-p6gmj   1/1     Running   1 (14d ago)   16d

配置项目Service
vi schoolexam-svc.yaml
#========================================================================================
apiVersion: v1
kind: Service
metadata:
  name: schoolexam-svc
spec:
  ports:
  - port: 8080
    targetPort: 8080
    protocol: TCP
  selector:
    app: schoolexam-deployment
#========================================================================================
kubectl apply -f schoolexam-svc.yaml
#查看执行结果
kubectl get svc

K8S部署Nginx

编写Nginx.yaml【Deployment】
vi nginx.yaml
#========================================================================================
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx #为该Deployment设置key为app,value为nginx的标签
  name: nginx
spec:
  replicas: 1
  selector: #标签选择器,与上面的标签共同作用
    matchLabels: #选择包含标签app:nginx的资源
      app: nginx
  template: #这是选择或创建的Pod的模板
    metadata: #Pod的元数据
      labels: #Pod的标签,上面的selector即选择包含标签app:nginx的Pod
        app: nginx
    spec: #期望Pod实现的功能(即在pod中部署)
      containers: #生成container,与docker中的container是同一种
      - name: nginx
        image: nginx:latest #使用镜像nginx: 创建container,该container默认80端口可访问
        ports:
        - containerPort: 81  # 开启本容器的80端口可访问
        volumeMounts:
        - name: config-volume
          mountPath: /etc/nginx/conf.d
      volumes:
      - name: config-volume
        configMap:
          name: nginx-conf
#========================================================================================
kubectl apply -f nginx.yaml
#查看执行结果
kubectl get pods
为nginx的配置文件创建ConfigMap

编写nginx-conf.yaml

vi nginx-conf.yaml
#========================================================================================
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-conf
data:
  default.conf: |-
    server {
      listen 81;
      server_name  localhost;

      location /{
          proxy_pass http://10.42.0.51:8080/;
      }
      
      error_page   500 502 503 504  /50x.html;
      location = /50x.html {
          root   /usr/share/nginx/html;
      }
    }

#========================================================================================
kubectl apply -f nginx-conf.yaml
#查看执行结果
kubectl get configMap
#========================================================================================
NAME               DATA   AGE
nginx-conf         1      14d```

#### 查看配置

```shell
kubectl exec -it nginx-646876dd8b-khp87 -- /bin/bash

cat /etc/nginx/conf.d/default.conf

配置Nginx的Service
vi nginx-svc.yaml
#========================================================================================
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  type: NodePort
  ports:
  - port: 81
    targetPort: 81
    nodePort: 81
    protocol: TCP
  selector:
    app: nginx
#========================================================================================
kubectl apply -f nginx-svc.yaml
#查看执行结果
kubectl get svc
出现问题:

配置完Service之后,云服务器中curl访问IP+端口正常,但外部浏览器访问则超时

原因:

这是天翼云服务器存在80、443等特殊接口,需要备案才能进行使用

简化操作:

Nginx、Nginx的ConfigMap、Nginx的Service,这些可不部署,直接将SpringBoot项目的Service改为NodePort即可进行访问。

Nginx部署的意义

当项目变多的时候,我们可以通过Nginx去配置反向代理,一个端口可以配置多个项目的访问或者使用Ingress去反向代理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值