前置工作:
k8s 部署docker镜像需要拉取docker镜像,一般企业都是使用的局域网,所以需要在本地搭建一个docker私有仓库。
将jar包、vue项目打成docker镜像并推送到Harbor本地仓库 前面的工作都已经完成了,下面开始使用k8s部署Java项目:
编写Deployment,Service的yaml文件
touch deployment.yaml
touch service.yaml
vim deployment.yaml
先建好自己的namespace 我用的mysapce
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: swagger-server
namespace: mysapce
spec:
replicas: 1
template:
metadata:
labels:
app: swagger-server
spec:
containers:
- name: swagger-server
image: 120.48.54.67:8282/k8spro/swagger:1.0.1
tty: true
ports:
- containerPort: 8013
说明:
image: 这个地址要用你的docker镜像的地址,可以去harbor仓库里面查一下。
containerPort:填写jar包的端口号。
vim service.yaml
apiVersion: v1
kind: Service
metadata:
name: jar-service
namespace: mysapce
spec:
ports:
- port: 80 # 集群端口
targetPort: 8013 #pod控制器中定义的端口(应用访问的端口)
protocol: TCP
type: NodePort
selector:
app: swagger-server
targetPort:填写你的jar内置的端口号,不然虽然pod能启动 但是找不到pod里面的服务。
执行yuml
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
查一下pod,svc
kubectl get pods -n mysapce
kubectl get svc -n mysapce
去dashboard里面看看
浏览器访问一下:
访问的时候选择后面那个端口:
这样就启动好了。
部署vue也是一样的步骤
deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: kgf-vue
namespace: mysapce
labels:
app: kgf-vue
spec:
replicas: 1
selector:
matchLabels: { app: kgf-vue }
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
labels: { app: kgf-vue }
spec:
containers:
- name: kgf-vue
env:
- name: kgf-vue
valueFrom:
fieldRef: { fieldPath: metadata.name }
image: 120.48.54.67:8282/k8spro/vue:1.0.1
imagePullPolicy: IfNotPresent
resources:
limits:
cpu: 1
memory: 512Mi
requests:
cpu: 0.4
memory: 256Mi
service.yaml:
#service版本
apiVersion: v1
#这个表示资源类型我们创建的是Service
kind: Service
metadata: #这个里面定义的是Service中我们创建的对象信息
#对象名称
name: kgf-vue
#元数据名称空间
namespace: mysapce
labels:
app: kgf-vue
spec: #下面定义service的详细信息
#类型为NodePort
type: NodePort
selector: #通过标签选择器去查询对应版本的pod,最后组成一个service
app: kgf-vue
ports: #指定容器需要用到的端口列表
#指定端口名称
- name: http
#服务对外的端口
port: 8080
protocol: TCP
#容器的端口
targetPort: 80
如果报错:
0/1 nodes are available: 1 Insufficient cpu.
把 deployment.yaml 里面的cup 调小一些。
总结:
当然这样虽然可以 实现k8s部署自己的项目,但是这样手动部署不是最终目的,下一步我们试试结合gitlab+Jenkins 实现自动化部署。