一辅髓、發(fā)布springboot服務(wù)
這里是個很簡單的springboot應(yīng)用拉取鏡像上傳到harbor倉庫
//拉取鏡像
docker pull openjdk:8u92-jdk-alpine
docker tag openjdk:8u92-jdk-alpine master128:8082/k8s/openjdk:8u92-jdk-alpine
//上傳harbor倉庫
docker push master128:8082/k8s/openjdk:8u92-jdk-alpine
編寫dockerfile
cd /usr/k8sDemo/demo1
vim Dockerfile
From master128:8082/k8s/openjdk:8u92-jdk-alpine
COPY springbootdemo-0.0.1-SNAPSHOT.jar /springbootdemo-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java","-jar","/springbootdemo-0.0.1-SNAPSHOT.jar"]
構(gòu)建鏡像
docker build -t springbootdemo:v1 .
//查看鏡像
docker images
docker tag springbootdemo:v0.46.0 master128:8082
//上傳鏡像到harbor
docker push master128:8082/k8s/springbootdemo:v1
運(yùn)行鏡像
docker run -it springbootdemo:v1
編寫k8s配置文件泣崩,并且配置ingress
vim springbootdemo.yaml
#創(chuàng)建namespace
apiVersion: v1
kind: Namespace
metadata:
name: ingress-demo
---
#nodePort的方式
apiVersion: v1
kind: Service
metadata:
name: sbd-nsvc
namespace: ingress-demo
spec:
type: NodePort
ports:
- port: 80
targetPort: 8083
selector:
app: spring-boot-demo
---
#使用Deployment創(chuàng)建pods
apiVersion: apps/v1
kind: Deployment #對象類型
metadata:
name: spring-boot-demo
namespace: ingress-demo
labels:
app: spring-boot-demo
spec:
replicas: 1
selector:
matchLabels:
app: spring-boot-demo
template:
metadata:
labels:
app: spring-boot-demo
spec:
containers: #容器
- name: spring-boot-demo
image: master128:8082/k8s/springbootdemo:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8083 #這個端口對應(yīng)我們項(xiàng)目配置文件里的端口
---
apiVersion: v1
kind: Service
metadata:
name: sbd-svc
namespace: ingress-demo
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 8083 #對應(yīng)容器的端口
selector:
app: spring-boot-demo #對應(yīng)Deployment的標(biāo)簽
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: sbd-ing
namespace: ingress-demo
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: ingress.demo.com #域名
http:
paths:
- path: /
backend:
serviceName: sbd-svc #對應(yīng)Service的名字
servicePort: 80 #對應(yīng)Service的端口
執(zhí)行配置文件
kubectl apply -f springbootdemo.yaml
發(fā)生的錯誤及解決辦法:
查看pod的情況,這里我沒有啟動成功洛口,查看詳細(xì)信息矫付,原來是k8s沒有與私有倉庫認(rèn)證
kubectl get pods -n ingress-demo -o wide
kubectl describe pod spring-boot-demo-7dff46b6f9-mbvn9 -n ingress-demo
創(chuàng)建harbor與k8s的認(rèn)證
kubectl create secret docker-registry ingressharbor --namespace=default --docker-server=master128:8082 --docker-username=admin --docker-password=123456
刪除創(chuàng)建的各種資源
kubectl delete Ingress spring-boot-demo-ingress -n ingress-demo
kubectl delete service spring-boot-demo -n ingress-demo
kubectl delete Deployment spring-boot-demo -n ingress-demo
#或者直接刪除namespace
kubectl delete namespace ingress-demo
重新執(zhí)行文件
kubectl apply -f springbootdemo.yaml
查看ingress-demo下的服務(wù)
kubectl get svc -n ingress-demo
nodePort的方式訪問,響應(yīng)成功
custerip的方式訪問第焰,響應(yīng)成功
Ingress 的訪問方式
首先配置ingress的pod所在node的ip與域名綁定
kubectl get pods -n ingress-nginx -o wide