Kubernetes 1.18 部署SpringBoot项目
- Hello-1.0-SNAPSHOT.jar
- jdk-8u251-linux-x64.tar.gz
创建docker镜像
[root@master ~]# docker build -f Dockerfile1 -t hello ./
Sending build context to Docker daemon 213.4 MB
Step 1/8 : FROM centos
---> 831691599b88
Step 2/8 : ADD jdk-8u251-linux-x64.tar.gz /usr/local/java/
---> 2429620b6cb2
Removing intermediate container d6c2106906f1
Step 3/8 : ADD Hello-1.0-SNAPSHOT.jar /usr/local/
---> 4ad3897939a3
Removing intermediate container f84fcef8e601
Step 4/8 : ENV JAVA_HOME /usr/local/java/jdk1.8.0_251
---> Running in a7d62232397c
---> 2fe922f2ef6a
Removing intermediate container a7d62232397c
Step 5/8 : ENV CLASSPATH $JAVAHOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
---> Running in 318350f4bb14
---> d91f96d0a5f5
Removing intermediate container 318350f4bb14
Step 6/8 : ENV PATH $PATH:$JAVA_HOME/bin
---> Running in 0ad911493d1f
---> 775cff5e7470
Removing intermediate container 0ad911493d1f
Step 7/8 : EXPOSE 8088
---> Running in 5ac850a438ab
---> 3301f1330648
Removing intermediate container 5ac850a438ab
Step 8/8 : CMD java -jar /usr/local/Hello-1.0-SNAPSHOT.jar
---> Running in caf8b44340d6
---> cb5b9b08e530
Removing intermediate container caf8b44340d6
Successfully built cb5b9b08e530
启动容器,访问地址
启动容器,并在容器内访问地址
[root@master ~]# docker run -d -p 30001:8088 hello
7e63cf0d29a1d82f621cde8c70624d18f0d8ed74068f014a014c30e59a8d562a
在容器内访问Hello服务
[root@0d4fb60a043a /]# curl -XGET localhost:30001/hello
SERVER: hello SpringBoot
----------------------------------
#push到docker Hub
[root@master ~]# docker push 780528005/hello:1.0
The push refers to a repository [docker.io/780528005/hello]
97fbd0828a19: Layer already exists
dd4394a4bacc: Layer already exists
eb29745b8228: Pushing 10.92 MB/215.3 MB
Kubernetes
Deployment 创建模板资源文件
使用yaml文件创建pod:
[root@master ~]# kubectl apply -f hello-deployment.yaml
[root@master ~]# kubectl apply -f hello-service.yaml
删除yaml文件创建的资源:kubectl delete -f nginx-test.yaml
[root@master ~]# vi hello-deployment.yaml
apiVersion: apps/v1
kind: Deployment #对象类型
metadata:
name: hello-deployment #名称
lables:
app: hello #标注
spec:
replicas: 3 #运行容器的副本数
selector:
matchLabels:
app: hello
template:
metadata:
labels:
app: hello
spec:
containers: #docker容器的配置
- name: hello
image: 780528005/hello:1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8088 #容器对外开放端口
Service 设置对外提供服务
Service.yaml
[root@master ~]# vi hello-service.yaml
apiVersion: v1
kind: Service
metadata:
name: hello-service #名称
namespace: default
labels:
app: hello #标注
spec:
type: NodePort
ports:
- port: 8088
nodePort: 30001 #Service对外开放端口
selector:
app: hello
部署pod
使用yaml文件创建pod,默认部署在 default namespace。
[root@master ~]# kubectl apply -f hello-deployment.yaml
#查看创建的 pods 及所有信息
[root@master ~]# kubectl get all
NAME READY STATUS RESTARTS AGE
pod/hello-deployment-64fb9d6f5-42bln 1/1 Running 0 11h
pod/hello-deployment-64fb9d6f5-8wdl7 1/1 Running 0 11h
pod/hello-deployment-64fb9d6f5-g4cr9 1/1 Running 0 11h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/hello-service NodePort 10.109.10.73 <none> 8088:30001/TCP 11h
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d12h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/hello-deployment 3/3 3 3 11h
NAME DESIRED CURRENT READY AGE
replicaset.apps/hello-deployment-64fb9d6f5 3 3 3 11h
#查看已经调度到对应的服务器
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-57f94c46b4-5whb5 1/1 Running 0 6h30m 172.17.97.3 192.168.1.232 <none> <none>
删除 Deployment、Service
删除 Deployment、Service
[root@master1 ~]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
activemq-service NodePort 10.111.227.72 <none> 8161:30081/TCP,61616:30061/TCP 24m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d14h
[root@master1 ~]# kubectl delete service activemq-service
service "activemq-service" deleted
[root@master1 ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
activemq-deployment 0/1 1 0 56m
[root@master1 ~]# kubectl delete deployment activemq-deployment
deployment.apps "activemq-deployment" deleted
外网访问测试
http://192.168.11.10:30001/hello
Hello SpringBoot
在外网访问
在node2上通过pod的地址访问,能证明pod已经正常运行了,但是来自kubernetes环境之外的请求如何才能到达pod上呢?这就需要通过service的方式将deploy的端口暴露出去
https://www.cnblogs.com/yhaing/p/8568234.html