摘要:有些人將其稱為容器編排平臺,而并非唯一的此類平臺。但是在中,您可以快速擴(kuò)展出多個實例你看看使用擴(kuò)展你的網(wǎng)站是何其便捷。當(dāng)你指向群集的地址和節(jié)點的端口號時,你就已經(jīng)可見瀏覽器中正在運行的程序了。
Laravel 是開發(fā) PHP 應(yīng)用程序的優(yōu)秀框架。 無論您是需要構(gòu)建新想法的原型,開發(fā) MVP(最小可行產(chǎn)品)還是發(fā)布成熟的企業(yè)系統(tǒng),Laravel 都可以促進(jìn)所有開發(fā)任務(wù)和工作流程。
如何處理部署應(yīng)用程序是一個很有選擇性的問題。 Vagrant 非常適合搭建類似于遠(yuǎn)程服務(wù)器的本地環(huán)境。 但是,在生產(chǎn)環(huán)境中,您很可能需要的不僅僅是一個 Web 主機(jī)和一個數(shù)據(jù)庫。 您可能會針對多個要求提供多帶帶的服務(wù)。 您還需要有適當(dāng)?shù)臋C(jī)制來確保應(yīng)用程序始終在線運行,并且服務(wù)器可以有效地均衡負(fù)載。
在本文中,我將解釋如何在 Kubernetes 上搭建一個簡單的 Laravel 應(yīng)用程序的環(huán)境。
Kubernetes 是什么?為什么使用它?Kubernetes 是一款由 Google 發(fā)起的開源系統(tǒng),目的在于提高集群環(huán)境下管理容器化應(yīng)用的效率。有些人將其稱為容器編排平臺,而 Kubernetes 并非唯一的此類平臺。不過,相比其它對手,其享譽已盛,且知名度仍在不斷提高;更別說你一旦習(xí)慣上它,就會發(fā)現(xiàn)它真的十分易用。
如果你依然好奇為何有人能夠愉快地和 Kubernetes 玩耍,答案就是——簡單。Kubernetes 能夠讓部署、管理多個項目所需的大量集群變得更加容易。
將 Laravel 應(yīng)用部署到 Minikube正如我之前提到的,我將會在本文展示如何部署一個簡單、無狀態(tài)的 Laravel 應(yīng)用到 Kubernetes。我將詳細(xì)說明此過程中涉及到的步驟,同時向大家解釋為何需要執(zhí)行某項操作。此外,我還將展示如何快速橫向擴(kuò)展應(yīng)用,并使用 Ingress Controller 使其能夠通過特定域名或 IP 訪問。
你可以在多個云平臺上面運行 Kubernetes ,例如 Google Cloud Engine 和 Amazon Web Services。在這個例子中,你會使用 Minikube 運行你的程序,Minikube 是一個讓你在本地更容易運行 Kubernetes 的工具。
與 Vagrant 類似,Minikube 僅僅是一個包含了 Kubernetes 運行平臺和 Docker 的虛擬機(jī)。如果使用真正的 Kubernetes 的話,你需要使用 Docker 部署你的應(yīng)用,同時你需要將運行平臺擴(kuò)展到三個節(jié)點。
應(yīng)用我已經(jīng)準(zhǔn)備了一個簡單的 Laravel 程序,你可以從 GitHub 克隆下來。它只是一個全新的 Laravel 安裝程序。因此,你可以使用本例中的演示程序,也可以自己創(chuàng)建一個新的 Laravel 程序。如果使用本例中的演示程序,請按照下面的命令將其克隆到項目目錄里面。
cd /to/your/working/directory git clone git@github.com:learnk8s/laravel-kubernetes-demo.git .預(yù)備條件
要實現(xiàn)本示例,你需要在你的本地系統(tǒng)中安裝如下軟件:
1)?Docker
2)?Kubectl
3)?Minikube
如果你在Windows系統(tǒng)中安裝上述軟件遇到問題,請查閱?Windows 10 中 Docker 和 Kubernetes 入門教程,這是一個手把手教學(xué)的入門教程。Docker 鏡像
Kubernetes 部署容器化的應(yīng)用,因此首先你需要為示例應(yīng)用創(chuàng)建一個 Dcoker 鏡像。由于本例中你在本地運行 Minikube,因此你只能用示例代碼中的 Dockerfile 文件創(chuàng)建一個本地 Docker 鏡像。
FROM composer:1.6.5 as build WORKDIR /app COPY . /app RUN composer install
FROM php:7.1.8-apache EXPOSE 80 COPY --from=build /app /app COPY vhost.conf /etc/apache2/sites-available/000-default.conf RUN chown -R www-data:www-data /app && a2enmod rewrite
該?Dockerfile?文件由兩部分組成:
第一部分?jǐn)U展了一個 PHP 的 composer 鏡像,因此你能夠安裝應(yīng)用依賴。
第二部分創(chuàng)建了一個包含 Apache 服務(wù)的鏡像, Apache 服務(wù)將會為示例應(yīng)用服務(wù)。
在測試 Docker 鏡像前,你需要使用如下的命令創(chuàng)建鏡像:
cd /to/your/project/directory docker build -t yourname/laravel-kubernetes-demo .
然后使用下面的命令運行示例程序:
docker run -ti -p 8080:80 -e APP_KEY=base64:cUPmwHx4LXa4Z25HhzFiWCf7TlQmSqnt98pnuiHmzgY= laravel-kubernetes-demo
示例程序可以通過?http://localhost:8080 訪問。
在這個安裝中,容器是通用的,同時 APP_KEY 并不是寫死或共享的。
在 Minikube 中創(chuàng)建鏡像cd /to/your/project/directory eval $(minikube docker-env) docker build -t yourname/laravel-kubernetes-demo .
別忘記執(zhí)行上面的 eval 命令。 要在虛擬機(jī)中創(chuàng)建鏡像,執(zhí)行上面的 eval 命令是必須的。你只需要在當(dāng)前的終端中執(zhí)行一次這個命令。部署鏡像
現(xiàn)在示例應(yīng)用的鏡像已經(jīng)創(chuàng)建完成,并且在 Minikube 中是可用的,因此你可以接下來繼續(xù)部署這個鏡像。
我總是一開始就要確保 kubectl 在正確的上下文環(huán)境中。在這個例子中,上下文環(huán)境是 Minikube。你可以使用下面的命令快速的切換上下文環(huán)境:
kubectl config use-context minikube
然后你可以部署容器鏡像:
kubectl run laravel-kubernetes-demo --image=yourname/laravel-kubernetes-demo --port=80 --image-pull-policy=IfNotPresent --env=APP_KEY=base64:cUPmwHx4LXa4Z25HhzFiWCf7TlQmSqnt98pnuiHmzgY=
上述的命令告訴 kubectl 從 Docker 鏡像中運行我們的示例程序。上述命令的第一個參數(shù)告訴 kubectl 如果在本地存在鏡像,就不要去登記處(例如 Docker Hub)拉取鏡像。請注意,你仍然需要登錄到 Docker 中,因為這樣 kubectl 才能檢查鏡像是否是最新的。
通過下面的命令,你會看到有一個 Pod 是為示例程序而創(chuàng)建的:
kubectl get pods
該命令會返回類似如下的輸出:
NAME READY STATUS RESTARTS AGE laravel-kubernetes-demo-7dbb9d6b48-q54wp 1/1 Running 0 18m
你也可以使用 Minikube 的 GUI 控制面板來監(jiān)控集群。GUI 還有助于可視化大多數(shù)經(jīng)常討論的指標(biāo)。要查看該控制面板,請執(zhí)行下屬命令:
minikube dashboard
或者獲取控制面板的 URL 地址:
minikube dashboard --url=true暴露一個服務(wù)
到目前為止,你已經(jīng)創(chuàng)建了一個運行示例程序容器的部署。在集群中運行的 Pod 有一個動態(tài)的 IP。如果你使用該 IP 并直接把流量路由到那里,在每次重啟 Pod 的時候,你可能每次都要更新路由表。事實上,在每次部署或者容器重啟的時候,一個新的 IP 會關(guān)聯(lián)到這個 Pod 中。為了避免需要手動的管理 IP 地址,你需要使用服務(wù)。服務(wù)在 Pods 集合中充當(dāng)負(fù)載均衡器的角色。所以,盡管一個 Pod 的 IP 地址改變了,但是服務(wù)總是指向該 Pod。同時,由于服務(wù)總是擁有一個固定的 IP,因此你不需要手動更新任何東西。
你可以使用下面的命令創(chuàng)建一個服務(wù):
kubectl expose deployment laravel-kubernetes-demo --type=NodePort --port=80
倘若一切順利,你會看到一個與下面信息相似的確認(rèn)信息:
service "laravel-kubernetes-demo" exposed
執(zhí)行下面的命令:
kubectl get services
上述命令顯示了正在運行中的服務(wù)列表。你也可以通過控制面板中的 「服務(wù)」 導(dǎo)航菜單查看正在運行中的服務(wù)。很顯然,一個更加令人興奮的驗證部署和服務(wù)暴露的方法就是在瀏覽器中運行示例程序。 ?
要獲取應(yīng)用(服務(wù))的URL地址,你可以使用下面的命令:
minikube service --url=true laravel-kubernetes-demo
上述命令會輸出 IP 地址和端口號,例如:
http://192.168.99.101:31399
或者直接在瀏覽器中啟動程序:
minikube service laravel-kubernetes-demo
不想錯過接下來的故事,實驗或者小提示。 如果你欣賞這篇文章,敬請期待接下來更多的文章內(nèi)容。 希望新的內(nèi)容直接發(fā)到你的郵箱并提升在 Kubernetes 方面的專業(yè)技能。? 現(xiàn)在請訂閱
擴(kuò)展你已經(jīng)成功在 Kubernetes 中部署了應(yīng)用。這是令人興奮的。但是做這一切的重點是什么?你只是在一個 Pod 中做了一個部署,在一個節(jié)點上面暴露了網(wǎng)頁服務(wù)。讓我們把目前的應(yīng)用多部署兩個實例。
現(xiàn)在你應(yīng)該明白你正在處于什么位置,執(zhí)行下面的命令獲取希望得到的和現(xiàn)在已有的 Pod 列表:
kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE laravel-kubernetes-demo 1 1 1 1 57m
上面的輸出中,每一項都是「1」。你希望獲得三個 Pod。因此,我們通過下面的命令進(jìn)行擴(kuò)展:
kubectl scale --replicas=3 deployment/laravel-kubernetes-demo deployment "laravel-kubernetes-demo" scaled
命令執(zhí)行完成。你已經(jīng)將第一個 Pod 復(fù)制另外兩個,系統(tǒng)為你提供了三個 Pod 來運行這個服務(wù)。執(zhí)行 get deployment 可以檢驗這一切:
kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE laravel-kubernetes-demo 3 3 3 3 59m
你也可以在控制面板中的 Pods 頁面或服務(wù)頁面查看這些內(nèi)容。
現(xiàn)在,你正在使用三個 Pod 運行三個應(yīng)用實例。
想象一下這種場景,你的應(yīng)用越來越受歡迎。成千上萬的訪客使用你的網(wǎng)頁或軟件。過去,你可能都焦頭爛額在編寫腳本創(chuàng)建更多實例的事情上。但是在 Kubernetes 中,您可以快速擴(kuò)展出多個實例:
kubectl scale --replicas=10 deployment/laravel-kubernetes-demo deployment "laravel-kubernetes-demo" scaled
你看看使用 Kubernetes 擴(kuò)展你的網(wǎng)站是何其便捷。
Ingress
你已經(jīng)實現(xiàn)了不錯的功能,部署了應(yīng)用并擴(kuò)展之。當(dāng)你指向群集的(Minikube)IP地址和節(jié)點的端口號時,你就已經(jīng)可見瀏覽器中正在運行的程序了。 現(xiàn)在,你將看到如果通過指定的 URL 訪問應(yīng)用程序,就如同之前部署到云端那樣。
為了在 Kubernetes 中使用 URL,你需要一個 Ingress。 Ingress 是一組允許入站連接到達(dá) Kubernetes 集群的規(guī)則。Ingress 是非常必要的,因為在 Kubernetes 中,諸如 Pod 之類的資源僅具有可在集群內(nèi)和集群內(nèi)路由的IP地址。也就是說它們是無法進(jìn)出外部環(huán)境的。
我在演示應(yīng)用源碼中包含了一個有如下內(nèi)容的?ingress.yaml 文件:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: laravel-kubernetes-demo-ingress annotations: ingress.kubernetes.io/rewrite-target: / spec: backend: serviceName: default-http-server servicePort: 80 rules: - host: laravel-kubernetes.demo - http: paths: - path: / backend: serviceName: laravel-kubernetes-demo servicePort: 80
在你所期望的 Kubernetes 資源文件基本內(nèi)容里,該文件定義了一組路由流量入站的規(guī)則。?laravel-kubernetes.demo?URL 會指向應(yīng)用運行的 Service ,就像之前在 8181 端口上標(biāo)記?laravel-kubernetes-demo?那樣。
沒有集成 Ingress 資源, Ingress 控制器是無法使用的,因此您需要創(chuàng)建一個新的控制器或使用現(xiàn)有控制器。 本教程使用的是 Nginx Ingress 控制器來管理路由資源。 Minikube(v0.14及以上版本) 附帶 Nginx 設(shè)置作為插件,您需要手動啟用這個插件:
minikube addons enable ingress
注意,Minikube 可能需要幾分鐘才能下載并安裝 Nginx 作為 Ingress 路由控制器。
啟用 Ingress 插件后,您可以通過這種方式來創(chuàng)建 Ingress 實例:
kubectl create -f path-to-your-ingress-file.yaml
您可以通過運行以下命令來驗證并獲取 Ingress 的實例信息:
kubectl describe ing laravel-kubernetes-demo-ingress
輸出一些配置相關(guān)的信息:
Name: laravel-kubernetes-demo-ingress Namespace: default Address: 192.168.99.101 Default backend: default-http-server:80 () Rules: Host Path Backends ---- ---- -------- * / laravel-kubernetes-demo:8181 (172.17.0.6:8181) Annotations: rewrite-target: / Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal CREATE 39s nginx-ingress-controller Ingress default/laravel-kubernetes-demo-ingress Normal UPDATE 20s nginx-ingress-controller Ingress default/laravel-kubernetes-demo-ingress
您現(xiàn)在可以通過 minikube IP地址訪問應(yīng)用程序,如上所示。 要通過 URL https://laravel-kubernetes.demo 訪問網(wǎng)站應(yīng)用,您需要在 hosts 文件中添加一條解析記錄。
結(jié)論希望這篇文章能幫助您熟悉 Kubernetes 的部署和搭建。 根據(jù)我自己的經(jīng)驗,如果你經(jīng)常進(jìn)行類似的環(huán)境搭建,這會讓你的搭建過程更加得心應(yīng)手且有趣。
轉(zhuǎn)自 PHP / Laravel 開發(fā)者社區(qū) https://laravel-china.org/top...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/29943.html
摘要:目前正在運行的應(yīng)用程序。內(nèi)置非配置負(fù)載均衡器如何設(shè)置運行的集群在這里你有幾個選項。它跟其它的谷歌云組件也都整合得很好,比如負(fù)載均衡器和磁盤。它會告訴負(fù)載均衡器,流量可以被重新傳到特定的。元信息和谷歌云會以正確的方式展現(xiàn)出來。 Kubernetes實踐案例分享|在這次的 RisingStack 案例分享中,我們可以在 Kubernetes Tutorial 中學(xué)習(xí)到如何從 PaaS 供應(yīng)...
摘要:在這篇文章中,我們來看是如何部署應(yīng)用程序到,以及如何將它作為一個公共服務(wù)的。在中的是跟應(yīng)用程序通信的入口。每個除了運行在部署的主要應(yīng)用程序上的也為終端運行。部署是高級別的抽象。 Travix總部位于荷蘭,是一家在線旅游商務(wù)網(wǎng)站,業(yè)務(wù)輻射全球28個國家,成立于2011年,旗下有五個網(wǎng)站:CheapTickets,BudgetAir,Vliegwinkel和Flugladen。公司通過這五...
摘要:今天我們將探討如何基于微服務(wù)部署來構(gòu)建。還能監(jiān)控并保障所需要數(shù)量正在運行,并將那些停止的替換掉。目前你的部署應(yīng)顯示以下信息。我們將更細(xì)致地探討如何設(shè)置終端多服務(wù)部署服務(wù)發(fā)現(xiàn)及應(yīng)用要如何應(yīng)對失敗場景等。 原文來源:Rancher Labs 大多數(shù)人在生產(chǎn)環(huán)境中運行Docker,是把它作為構(gòu)建和移動部署配置的一種方式。然而,他們的部署模型要么非常整體化,要么有幾個大的服務(wù)模塊組成。使用真實...
摘要:今天我們將探討如何基于微服務(wù)部署來構(gòu)建。還能監(jiān)控并保障所需要數(shù)量正在運行,并將那些停止的替換掉。目前你的部署應(yīng)顯示以下信息。我們將更細(xì)致地探討如何設(shè)置終端多服務(wù)部署服務(wù)發(fā)現(xiàn)及應(yīng)用要如何應(yīng)對失敗場景等。 原文來源:Rancher Labs 大多數(shù)人在生產(chǎn)環(huán)境中運行Docker,是把它作為構(gòu)建和移動部署配置的一種方式。然而,他們的部署模型要么非常整體化,要么有幾個大的服務(wù)模塊組成。使用真實...
摘要:將成安全評估如漏洞掃描加入持續(xù)集成中,使其成為構(gòu)建流程的一部分。持續(xù)集成應(yīng)確保只使用審查通過的代碼來構(gòu)建鏡像。我們推薦這篇文章中提到的安全實踐,將的靈活配置能力加入到持續(xù)集成中,自動將安全性無縫融合到整個流程中。 編者按:本文是由 Aqua Security 的Amir Jerbi 和Michael Cherny 所寫,基于他們從本地和云端上收集到的實際數(shù)據(jù),描述了Kubernetes...
閱讀 2423·2021-10-09 09:59
閱讀 2177·2021-09-23 11:30
閱讀 2591·2019-08-30 15:56
閱讀 1145·2019-08-30 14:00
閱讀 2939·2019-08-29 12:37
閱讀 1253·2019-08-28 18:16
閱讀 1656·2019-08-27 10:56
閱讀 1022·2019-08-26 17:23