使用Kubernetes部署Springboot或Nginx的詳細教程_nginx

來源:腳本之家  責任編輯:小易  

從 Docker 層面有一個可能的思路是在 Dockerfile 指定 ENTRYPOINT 為一個腳本文件,然后在腳本文件里加上特定信號的捕捉器,在捕捉器里面處理 Pod 退出時的邏輯。例如這個入口腳本就用了類似的功能。function shutdown {->退出時的清理工作www.anxorj.tw防采集請勿采集本網。

1 前言

經過《Maven一鍵部署Springboot到Docker倉庫,為自動化做準備》,SpringbootDocker鏡像已經準備好,也能在Docker上成功運行了,是時候放上Kubernetes跑一跑了。這非常簡單,一個yaml文件即可。

Kubernetes可多語言,沒有只是把JAVA平臺當目標,處理了所有語言用一類方法的分布式計算挑戰。它為了在平臺層配置管理、服務發現、負載均衡、追蹤、指標、單例模式、調度作業提供服務,并且在應用套件之外

2 一鍵部署Springboot

第一種方法是不對的,只是添加了一個對象。第二種方法接近答案了。正確的方法是:把其他minion的/etc/kubernetes配置拷貝過來,安裝好kubelet和kube-proxy,啟動這兩個服務就好了。

2.1 準備yaml文件

從 Docker 層面有一個可能的思路是在 Dockerfile 指定 ENTRYPOINT 為一個腳本文件,然后在腳本文件里加上特定信號的捕捉器,在捕捉器里面處理 Pod 退出時的邏輯。例如這個入口腳本就用了類似的

當準備好鏡像文件后,要部署到Kubernetes就非常容易了,只需要一個yaml格式的文件即可,這個文件能描述你所需要的組件,如Deployment、Service、Ingress等。定義如下:

我們先從整體上看一下Kubernetes的一些理念和基本架構,然后從網絡、資源管理、存儲、服務發現、負載均衡、高可用、rollingupgrade、安全、監控等方面向大家簡單介紹Kubernetes的這些主要特性。

apiVersion: apps/v1kind: Deploymentmetadata: name: pkslow-springboot-deploymentspec: selector: matchLabels: app: springboot replicas: 2 template: metadata: labels: app: springboot spec: containers: - name: springboot image: pkslow/springboot-mongo:0.0.6 ports: - containerPort: 8080---apiVersion: v1kind: Servicemetadata: labels: app: springboot name: pkslow-springboot-servicespec: ports: - port: 8080 name: springboot-service protocol: TCP targetPort: 8080 nodePort: 30080 selector: app: springboot type: NodePort

openstack在云計算體系里屬于IAAS層,用于管理云計算基礎設施,如存儲、網絡等等。kubernetes屬于PAAS層,用來管理容器(例如docker container)的運行。

Kind:類型,有Deployment、Service、Pod、Ingress等,非常豐富;

metadata:用于定義一些組件信息,如名字、標簽等;

labels:標簽功能,非常有用,用于選擇關聯;但label不提供唯一性,可以使用組合來選擇;

nodePort:對于需要給外部暴露的服務,有三種方式:NodePorts、LoadBalancer、Ingress,這里使用NodePorts;需要注意的是,默認它的端口范圍是[3000-32767],需要其它范圍則需要修改相關參數。

2.2 通過kubectl命令部署

yaml文件準備好之后,就可以通過以下命令部署:

$ kubectl create -f pksow-springboot.yaml deployment.apps/pkslow-springboot-deployment createdservice/pkslow-springboot-service created

看控制臺日志則表明成功創建了DeploymentService。查看Dashboard如下:

訪問Web服務:http://localhost:30080/user

通過命令行檢查一下:

$ kubectl get deploymentNAME READY UP-TO-DATE AVAILABLE AGEpkslow-springboot-deployment 2/2 2 2 8m2s$ kubectl get serviceNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10mpkslow-springboot-service NodePort 10.102.218.119 <none> 8080:30080/TCP 8m7s$ kubectl get podNAME READY STATUS RESTARTS AGEpkslow-springboot-deployment-68dffc6795-874tp 1/1 Running 0 8m15spkslow-springboot-deployment-68dffc6795-89xww 1/1 Running 0 8m15s

至此,我們已經成功把Springboot發布到Kubernetes了。

2.3 試試殺死一個pod?

Kubernetes最小管理元素并不是容器,而是Pod。

我們試著刪掉一個Pod,看看會發生什么?

$ kubectl delete pod pkslow-springboot-deployment-68dffc6795-89xwwpod "pkslow-springboot-deployment-68dffc6795-89xww" deleted$ kubectl get podNAME READY STATUS RESTARTS AGEpkslow-springboot-deployment-68dffc6795-874tp 1/1 Running 0 13mpkslow-springboot-deployment-68dffc6795-gpw67 1/1 Running 0 46s

可以發現,刪除了其它一個Pod后,會自動為我們新生成一個Pod,這樣能提高整個服務的高可用。

2.4 試試殺死一個容器?

我們再來探索一下如果殺死一個容器實例,會有什么反應。

$ docker ps$ docker rm -f 57869688a22657869688a226$ docker ps

經實驗,殺死一個容器后,也會自動為我們重新生成一個容器實例。而Pod并不會變化,也不會重新生成。

2.5 快速擴容Pod

用戶請求突增,服務要撐不住了,這時需要增加Pod的個數。只需要修改yaml配置文件的replicas,將它更新為replicas: 4。然后執行以下命令:

$ kubectl apply -f pksow-springboot.yaml

查看Dashboard,在原有兩個Pod的基礎上,增加了兩個。

3 一鍵部署Nginx

如果大家沒有Springboot的鏡像,可以使用官方的Nginx鏡像,yaml文件如下:

apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deploymentspec: selector: matchLabels: app: nginx replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.19.0 ports: - containerPort: 80---apiVersion: v1kind: Servicemetadata: labels: app: nginx name: nginx-servicespec: ports: - port: 80 name: nginx-service1 protocol: TCP targetPort: 80 nodePort: 30000 - port: 81 name: nginx-service2 protocol: TCP targetPort: 80 nodePort: 30001 selector: app: nginx type: NodePort

執行部署命令:

$ kubectl apply -f nginx-deployment-scale.yaml deployment.apps/nginx-deployment createdservice/nginx-service created

查看Dashboard如下:

訪問服務:http://localhost:30000/http://localhost:30001 。因為我們設置了兩個。

4 總結

本文以兩個實例帶大家感性地認識了Kubernetes,這對后面深入理解概念是有很大幫助的。原理和細節方面,后續再展開談吧。

到此這篇關于用Kubernetes部署Springboot或Nginx的文章就介紹到這了,更多相關Kubernetes部署Springboot或Nginx內容請搜索真格學網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持真格學網!

使用Rancher來運行Kubernetes有很多優勢。大多數情況下能使用戶和IT團隊部署和管理工作更加方便。Rancher自動在Kubernetes后端實現etcd 的HA,并且將所需要的服務部署到此環境下的任何主機中。在設置訪問控制,可以輕易連接到現有的LDAP和AD基礎構架。Rancher還可以自動實現容器聯網以及為Kubernetes提供負載均衡服務。通過使用Rancher,你將會在幾分鐘內有擁有Kubernetes的HA實現。命名空間現在我們的集群已經運行了,讓我們進入并查看一些基本的Kubernetes資源吧。你可以訪問Kubernetes集群也可以直接通過kubectl CLI訪問,或者通過Rancher UI 訪問。Rancher的訪問管理圖層控制可以訪問集群,所以你需要在訪問CLI前從Rancher UI那里生成API密匙。我們來看下第一個Kubernetes資源命名空間,在給定的命名空間中,所有資源名稱必須有唯一性。此外,標簽是用來連接劃定到單個命名空間的資源。這就是為什么同一個Kubernetes集群上可以用命名空間來隔離環境。例如,你想為應用程序創建Alpha,Beta和生產環境,以便可以測試最新的更改且不會影響到真正的用戶。最后創建命名空間,復制下面的文本到namespace.yaml文件,并且運行 kubectl-f namespace.yaml 命令,來創建一個beta命名空間。kind:NamespaceapiVersion:v1metadata:name:betalabels:name:beta當然你還可以使用頂部的命名空間菜單欄從Rancher UI上創建、查看和選擇命名空間。你可以使用下面的命令,用kubectl來為CLI交互設置命名空間:kubectl config set-context Kubernetes-namespace=beta.為了驗證目前context是否已經被設置好,你可以使用config view命令,驗證一下輸出的命名空間是否滿足你的期望。kubectl config view|grep namespace command namespace:betaPods現在我們已經定義好了命名空間,接下來開始創建資源。首先我們要看的資源是Pod。一組一個或者多個容器的Kubernetes稱為pod,容器在pod 里按組來部署、啟動、停止、和復制。在給定的每個主機種類里,只能有一個Pod,所有pod里的容器只能在同一個主機上運行,pods可以共享網絡命名空間,通過本地主機域來連接。Pods也是基本的擴展單元,不能跨越主機,因此理想狀況是使它們盡可能接近單個工作負載。這將消除pod在擴展或縮小時產生的副作用,以及確保我們創建pods不太耗資源而影響到主機。我們來給名為mywebservice的pod定義,在規范命名web-1-10中它有一個容器并使用nginx容器鏡像,然后把端口為80下的文本添加至pod.yaml文檔中。apiVersion:v1kind:Podmetadata:name:mywebservicespec:containers:name:web-1-10image:nginx:1.10ports:containerPort:80使用kubetl create命令創建pod,如果您使用set-context command設置了您的命名空間,pods將會在指定命名空間中被創立。在通過運行pods命令去驗證pod狀態。完成以后,我們可以通過運行kubetl delete命令刪除pod。kubectl create-f./pod.yamlpod"mywebservice"createdkubectl get podsNAME READY STATUS RESTARTS AGEmywebservice 1/1 Running 0 37skubectl delete-f pod.yamlpod"mywebservice"deleted在Rancher UI 中查看pod,通過頂端的菜單欄選擇 Kubernetes>Pods內容來自www.anxorj.tw請勿采集。


  • 本文相關:
  • 使用kubeadm在centos7.2上部署kubernetes集群的方法
  • docker實踐—centos7上部署kubernetes詳解
  • docker kubernetes dashboard安裝部署詳細介紹
  • 實例詳解springboot+nginx實現資源上傳功能
  • springboot集成fastdfs+nginx整合基于token的防盜鏈的方法
  • 使用dockercompose搭建springboot-mysql-nginx應用
  • centos下編譯安裝nginx教程詳解
  • shell腳本之nginx自動化腳本
  • nginx服務器中配置geoip模塊來攔截指定國家ip
  • nginx開啟stub_status模塊配置方法
  • nginx的fastdfs分布式存儲模塊測試方法
  • nginx配置pathinfo隱藏thinkphp index.php
  • lnmp 解決access denied錯誤詳細介紹
  • 關于nginx+uwsgi配置遇到的問題的解決
  • 解讀nginx中limit配置參數
  • nginx 讓users有權限啟動的兩種方法
  • 如何在Kubernetes上進行微服務部署
  • 請教kubernetes部署問題,pod一直處于pending狀態
  • 如何在Kubernetes上進行微服務部署
  • Kubernetes和Spring Cloud哪個部署微服務更好
  • Kubernetes和Spring Cloud哪個部署微服務更好
  • 如何向部署好的Kubernetes上添加node
  • 請教kubernetes部署問題,pod一直處于pending狀態
  • 請教kubernetes部署問題,pod一直處于pending狀態
  • 如何用 Ansible 部署 Kubernetes 集群到 OpenStack
  • 如何配置Kubernetes的kubedns
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全星外虛擬主機華眾虛擬主機linuxwin服務器ftp服務器dns服務器tomcat nginxzabbix云和虛擬化服務器其它首頁服務器nginx使用kubeadm在centos7.2上部署kubernetes集群的方法docker實踐—centos7上部署kubernetes詳解docker kubernetes dashboard安裝部署詳細介紹實例詳解springboot+nginx實現資源上傳功能springboot集成fastdfs+nginx整合基于token的防盜鏈的方法使用dockercompose搭建springboot-mysql-nginx應用centos下編譯安裝nginx教程詳解shell腳本之nginx自動化腳本nginx服務器中配置geoip模塊來攔截指定國家ipnginx開啟stub_status模塊配置方法nginx的fastdfs分布式存儲模塊測試方法lnmp 解決access denied錯誤詳細介紹關于nginx+uwsgi配置遇到的問題的解決解讀nginx中limit配置參數nginx 讓users有權限啟動的兩種方法nginx提示:500 internal servernginx 多站點配置方法集合權限問題導致nginx 403 forbiddenginx fastcgi錯誤primary scripnginx服務器的反向代理proxy_pasnginx 403 forbidden的解決辦法nginx偽靜態配置和常用rewrite偽nginx下301重定向域名的方法小結詳解nginx服務器中配置超時時間的windows下nginx+php5的安裝與配置linux下nginx+tomcat負載均衡配置方法nginx實現動靜分離的示例代碼nginx實現負載均衡的方法總結nginx正反向代理及負載均衡等功能實現配置nginx線程池源碼分析nginx服務器的location指令匹配規則詳解nginx+fastdfs搭建圖片服務器的方法實現nginx啟動常見錯誤及解決方法nginx下無法使用中文url的解決方法nginx if語句加正則表達式實現字符串截斷
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.anxorj.tw All Rights Reserved
    陕西快乐10分下载