k8s

k8s部署SpringBoot docker镜像服务

Posted by Kaka Blog on December 17, 2020

之前已经将SpringBoot服务打包成docker镜像,并上传到阿里云docker镜像仓库,本文主要实现怎么通过k8s部署SpringBoot服务。

首先,生成密钥,因为拉取docker镜像需要登录,不然会提示docker login

kubectl create secret docker-registry regcred --docker-server=registry.cn-shenzhen.aliyuncs.com --docker-username=xxxxxx --docker-password=xxxxxx --docker-email=xxxxxx
  • regcred: 指定密钥的键名称, 可自行定义
    • –docker-server: 指定 docker 仓库地址
    • –docker-username: 指定 docker 仓库账号
    • –docker-password: 指定 docker 仓库密码
    • –docker-email: 指定邮件地址(选填)

创建yaml文件:

apiVersion: v1
kind: Service                          
metadata:
  name: mall-server #名称
  labels:
    app: mall-server #标注
spec:
  type: NodePort
  ports:
  - port: 9999
    nodePort: 31999
  selector:
    app: mall-server
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: application.properties
data:
  DEPLOYMENT_ENV: dev
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mall-server
  labels:
    app: mall-server                                          
spec:
  replicas: 3                                          #Pod副本的期待数量
  selector:
    matchLabels:
      app: mall-server                                         #符合目标的Pod拥有此标签
  template:                                            #根据此模板创建Pod的副本(实例)
    metadata:
      labels:
        app: mall-server                                     #Pod副本拥有的标签,对应RC的Selector
    spec:
      imagePullSecrets:
      - name: regcred
      containers:                                      #Pod内容器的定义部分
      - name: mall-server                                    #容器的名称
        image: registry.cn-shenzhen.aliyuncs.com/fangweijun/mall-server:1.0              #容器对应的Docker image
        imagePullPolicy: Always
        ports: 
        - containerPort: 9999                          #容器应用监听的端口号
        env:
        - name: active
          valueFrom:
            configMapKeyRef:
              name: application.properties
              key: DEPLOYMENT_ENV
  • 配置文件里面参数可通过ConfigMap配置,以前用docker-compose.yml是用environment.active: dev
  • imagePullSecrets声明拉取镜像时需要指定密钥
  • nodePort对外的端口
  • port对内的端口

cd到yaml的目录,运行:kubectl create -f docker-mall.yaml

运行:kubectl get pods,可查看运行的pod列表。

可以用命令kubectl describe pod mall-server-6ccc68dc5f-fmvnk查看某个pod的启动日志来调试。

另外可以用命令kubectl logs mall-server-6ccc68dc5f-fmvnk(mall-server-6ccc68dc5f-fmvnk代表pod名称)查看pod的命令行日志,相当于在cmd运行jar包的命令行输出。

可以运行kubectl get services查看到新的service。