J.V.'s Blog

k8s部署SpringBoot应用

k8s部署SpringBoot应用。

myapp.yaml 文件

vim myapp.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: myapp-configmap
  labels:
    app: myapp-configmap
data:
  SPRING_PROFILES_ACTIVE: test
  TZ: Asia/Shanghai
  SPRING_DATASOURCE_HOST: xxx.xxx.xxx.xxx
  SPRING_DATASOURCE_PORT: "3306"
---
apiVersion: v1
kind: Secret
metadata:
  name: myapp-secret
type: Opaque
data:
  SPRING_DATASOURCE_USERNAME: cm9vdA== # echo -n 'root' | base64
  SPRING_DATASOURCE_PASSWORD: cm9vdA== # echo -n 'root' | base64
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myapp-pvc
  namespace: default
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  storageClassName: nfs-csi
---
apiVersion: v1
kind: Service
metadata:
  name: myapp-svc
  namespace: default
  labels:
    app: myapp-svc
spec:
  type: NodePort
  ports:
    - name: server
      port: 8080
      targetPort: 8080
      nodePort: 30080
  selector:
    app: myapp-pod
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
  labels:
    app: myapp-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp-pod
  template:
    metadata:
      labels:
        app: myapp-pod
    spec:
      containers:
        - name: myapp #容器名称,必须字段,名称唯一且对象创建后不可以被修改
          image: myapp:latest
          imagePullPolicy: Always # 镜像下载策略( Always:总是去仓库下载;Never:从不去仓库下载;IfNotPresent:如果本地没有就去仓库下载。默认是"IfNotPresent" 但是,如果镜像的标签是latest,则总会是"Always,并且对象一旦被创建,这个字段不允许被改变)
          ports:
            - name: server # 端口名称
              containerPort: 8080 # 容器监听端口
              # hostPort: 8080 # 容器所在主机需要监听的端口号,默认与 Container 相同
              protocol: TCP # 端口协议,支持 TCP 和 UDP,默认 TCP
          envFrom:
            - configMapRef:
                name: myapp-configmap
            - secretRef:
                name: myapp-secret
          volumeMounts:
            - name: nfs
              mountPath: /app/log # 容器内日志路径
              subPath: log
          lifecycle:
            preStop:
              exec:
                command: ["sh", "-c", "sleep 10"] # 优雅关闭 https://docs.spring.io/spring-boot/docs/current/reference/html/deployment.html#deployment.cloud.kubernetes
      volumes:
        - name: nfs
          persistentVolumeClaim:
            claimName: myapp-pvc

部署

kubectl apply -f myapp.yaml

#SpringBoot #k8s #开发