k8s+docker+spring boot搭建web服务
算是一次比较综合的检验了。基本上已经成功跑起来了,但是,存在问题:1,私有仓库的镜像不知道为啥不能拉取,但是到了节点上,又可以手动拉取。2,spring boot的application.yml文件,没有加载上。需要修改。
·
一、打包镜像
1、编写Dockerfile
FROM java:8 #基础镜像
MAINTAINER wayne #作者
COPY springbootDemo.jar /springbootdemo.jar #将当前目录下的springbootDemo.jar打包成docker容器内部根目录下的springbootdemo.jar
EXPOSE 8081 #对外暴漏8081
ENTRYPOINT ["java","-jar","/springbootdemo.jar"] #命令用于指定这个容器启动的时候要运行的命令
2、打包镜像
执行如下命令后,查看镜像
docker build -t springbootdemo:20221016v1 .
3,运行容器
docker run -d -p 8081:8081 --name springbootdemo springbootdemo:20221016v1
4,浏览器验证
二、推送镜像到本地仓库
1、将刚刚的镜像打tag
docker tag springbootdemo:20221016v1 192.168.199.103:5000/springbootdemo:20221016v1
查看是否打成功
2、推送镜像到私有仓库
docker push 192.168.199.103:5000/springbootdemo:20221016v1
等待推送完成即可
三、搭建k8s对应的服务
1,编写配置命令文件
举例说明
#Deployment配置
apiVersion: apps/v1 #版本号
kind: Deployment #类型
metadata:
name: spring-boot-demo-deploy #名称
namespace: dev #所属命名空间
labels: #标签
controller: spring-boot-demo-deploy
spec: #规格描述
replicas: 2 #POD的副本数量
revisionHistoryLimit: 10 #历史rs的版本数量
paused: false #暂停部署
progressDeadlineSeconds: 600 #部署超时时间单位秒
strategy: #策略
type: RollingUpdate #滚动更新
rollingUpdate: #滚动更新的具体配置
maxSurge: 30% #最大额外可存在的副本数
maxUnavailable: 30% #最大不可用状态的Pod的数量
selector: #标签选择器,通过它管理pod
matchLabels:
app: spring-boot-demo-pod
matchExpressions: #Expression匹配规则
- {key: app, operator: In, values: [spring-boot-demo-pod]}
template: #pod创建模版
metadata:
name: spring-boot-demo-pod
namespace: dev
labels: #标签,用于被deployment识别
- app: spring-boot-demo-pod
spec:
containers: #Pod中容器属性
- name: spring-boot-demo
image: 192.168.199.103:5000/springbootdemo:20221016v1
imagePullPolicy: [IfNotPresent]
ports: #端口
- name: app-port #端口名称
containerPort: 8081 # 容器需要监听的端口号
protocol: TCP #端口协议
resources: #资源限制
limits:
cpu: 2 #cpu限制
memory: 2Gi #内存限制
request:
cpu: 0.5 #cpu请求人,容器启动时的初始容量
memory: 0.5Gi #内存请求,容器启动时的初始容量
volumeMounts:
- name: spring-boot-demo-config #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
mountPath: '/' #存储卷在容器内moount的绝对路径,应少于512字符
nodeName: node2 #将POD调度到指定节点
imagePullSecrets:
- name: wayne-docker-registry-key
volumes: #共享存储卷列表
- name: spring-boot-demo-config
configMap:
name: spring-boot-demo-config
---
#ConfigMap配置
apiVersion: v1
kind: ConfigMap
metadata:
name: spring-boot-demo-config
namespace: dev
data:
application.yml: |-
server.port: 8081
server.servlet.context-path: /myTest
---
#Service配置
apiVersion: v1
kind: Service
metadata:
name: spring-boot-demo-service
namespace: dev
spec:
selector:
app: spring-boot-demo-pod
type: ClusterIP #有ClusterIP(固定ip),NodePort(暴露Node的端口,外部可以直接访问)
clusterIP: 10.97.97.97
ports:
- ports: 8081 #service的port
targetPort: 8081 #pod的port
说明
编写这个yaml,最好用一些文本编译工具。不然就GG
2,创建deploy、svc和pod
kubectl create -f spring-boot-demo.yaml -n dev
3,通过命令查看pod是否启动
4,访问svc对应的ip看结果
更多推荐
已为社区贡献7条内容
所有评论(0)