之前已经将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。