對k8s知識有壹定了解掌握,能夠明白Pod、Deployment、Service、Ingress 具體概念
準備壹套可用的k8s環境
準備壹個部署的spring boot 應用
k8s最小單元是Pod, 而Pod 是壹組運行的容器,那麽容器是怎麽運行起來的呢 ? 就是通過構建的鏡像。(目前我們使用的容器技術都是基於docker)
那先讓我們來壹起制作個鏡像,
將壹個可運行的項目打包成壹個jar文件,創建壹個文件DockerFile,DockerFile和jar放到同壹個目錄 編寫DockerFile
執行生成鏡像命令
docker build -f ./DockerFile -t "/test/helloworld-server:v1" .
查看鏡像 docker images
運行鏡像是否正常 9000為宿主機訪問端口
docker run -p 9000:8080 /test/helloworld-server:v1
通過curl或者瀏覽器訪問 localhost:9000 服務是否正常,如果正常說明鏡像制作成功,開始準備把鏡像上傳到倉庫, 上傳之前確定是否登錄,如果沒有登錄執行 : docker login 倉庫地址
如果倉庫使用的是harbor tag的名字格式改為:
倉庫地址/倉庫/名稱,
比如 harbor.com/test/helloword-service
修改鏡像 tag
docker tag <imageid> reg.com/test/helloworld-server:v1
上傳鏡像
docker push reg.com/test/helloworld-server:v1
上傳完鏡像可以登錄倉庫查看是否上傳成功。
創建deployment.yaml
執行 kubectl apply -f deployment.yaml
查看pod 是否創建成功 處於ready 狀態
kubectl get pod -o wide
如果沒有創建成功,通過log 或者 describe 查看具體原因
kubectl describe pod pod-namexxxxx
pod 的IP重啟之後就會有變化,所以為了能夠固定訪問pod有了service的概念,pod綁定service,我們通過service來訪問pod,service可以理解為集群內部的負載均衡流量的控制器,接下來我們開始創建service
創建service.ymal
我們使用的service type是NodePort,yaml裏沒有申明nodePort 所以k8s會默認創建壹個nodePort (30000-40000),然後我們通過node ip 加 nodePort 就可以訪問service。
kubectl apply -f service.yaml
查看nodePort kubectl get svc -o -wide
通過curl node ip : nodePort 查看是否路由到pod的服務,service的路由是針對內部使用,所以對外我們還需要提供另壹種訪問方式 那就是Ingress,(還有其它訪問方式,本章使用Ingress)接下倆就是創建Ingress
ingress.ymal
kubectl apply -f ingress.ymal
安裝ingress contoller
查看ingress contoller pod 是否創建成功,壹般情況pull鏡像的時候會失敗,需要手動 docker pull .
配置host nodeIP helloserver.com,通過 curl helloserver.com:ingress contoller nodePort 訪問。可以配置HA proxy 解決不用加端口問題
查看ingress contoller nodePort
kubectl get svc -o -wide -n ingress-nginx
到目前為止整個訪問流程就配置完成了,如果我們配置完之後仍然訪問不了
,可以壹步壹步的排除
綁定關系
檢查pod是否正常
kubectl describe pod <pod name>
檢查service 綁定pod配置是否正確 從service 訪問pod Endpoints
kubectl describe service <service-name> | grep Endpoints
壹個 endpoint 是壹對<ip address:port>,並且當 Service(至少)target 壹個 pod 時。至少有壹對
檢查Ingress 配置
kubectl describe ingress <ingress-name>
如果妳能在 /Backend/ 列中看到 endpoint,但依舊無法訪問應用程序,那麽可能是以下問題:
如果妳毫無頭緒,那麽在 Kubernetes 中進行故障排除可能是壹項艱巨的任務。
妳應該永遠記住以從下至上的順序解決問題:現檢查 Pod,然後向上移動堆棧至 Service 和 Ingress。