国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用 Kubernetes 來(lái)部署你的 Laravel 程序

JowayYoung / 760人閱讀

摘要:有些人將其稱為容器編排平臺(tái),而并非唯一的此類平臺(tái)。但是在中,您可以快速擴(kuò)展出多個(gè)實(shí)例你看看使用擴(kuò)展你的網(wǎng)站是何其便捷。當(dāng)你指向群集的地址和節(jié)點(diǎn)的端口號(hào)時(shí),你就已經(jīng)可見瀏覽器中正在運(yùn)行的程序了。

Laravel 是開發(fā) PHP 應(yīng)用程序的優(yōu)秀框架。 無(wú)論您是需要構(gòu)建新想法的原型,開發(fā) MVP(最小可行產(chǎn)品)還是發(fā)布成熟的企業(yè)系統(tǒng),Laravel 都可以促進(jìn)所有開發(fā)任務(wù)和工作流程。

如何處理部署應(yīng)用程序是一個(gè)很有選擇性的問題。 Vagrant 非常適合搭建類似于遠(yuǎn)程服務(wù)器的本地環(huán)境。 但是,在生產(chǎn)環(huán)境中,您很可能需要的不僅僅是一個(gè) Web 主機(jī)和一個(gè)數(shù)據(jù)庫(kù)。 您可能會(huì)針對(duì)多個(gè)要求提供多帶帶的服務(wù)。 您還需要有適當(dāng)?shù)臋C(jī)制來(lái)確保應(yīng)用程序始終在線運(yùn)行,并且服務(wù)器可以有效地均衡負(fù)載。

在本文中,我將解釋如何在 Kubernetes 上搭建一個(gè)簡(jiǎn)單的 Laravel 應(yīng)用程序的環(huán)境。

Kubernetes 是什么?為什么使用它?

Kubernetes 是一款由 Google 發(fā)起的開源系統(tǒng),目的在于提高集群環(huán)境下管理容器化應(yīng)用的效率。有些人將其稱為容器編排平臺(tái),而 Kubernetes 并非唯一的此類平臺(tái)。不過(guò),相比其它對(duì)手,其享譽(yù)已盛,且知名度仍在不斷提高;更別說(shuō)你一旦習(xí)慣上它,就會(huì)發(fā)現(xiàn)它真的十分易用。

如果你依然好奇為何有人能夠愉快地和 Kubernetes 玩耍,答案就是——簡(jiǎn)單。Kubernetes 能夠讓部署、管理多個(gè)項(xiàng)目所需的大量集群變得更加容易。

將 Laravel 應(yīng)用部署到 Minikube

正如我之前提到的,我將會(huì)在本文展示如何部署一個(gè)簡(jiǎn)單、無(wú)狀態(tài)的 Laravel 應(yīng)用到 Kubernetes。我將詳細(xì)說(shuō)明此過(guò)程中涉及到的步驟,同時(shí)向大家解釋為何需要執(zhí)行某項(xiàng)操作。此外,我還將展示如何快速橫向擴(kuò)展應(yīng)用,并使用 Ingress Controller 使其能夠通過(guò)特定域名或 IP 訪問。

你可以在多個(gè)云平臺(tái)上面運(yùn)行 Kubernetes ,例如 Google Cloud Engine 和 Amazon Web Services。在這個(gè)例子中,你會(huì)使用 Minikube 運(yùn)行你的程序,Minikube 是一個(gè)讓你在本地更容易運(yùn)行 Kubernetes 的工具。

與 Vagrant 類似,Minikube 僅僅是一個(gè)包含了 Kubernetes 運(yùn)行平臺(tái)和 Docker 的虛擬機(jī)。如果使用真正的 Kubernetes 的話,你需要使用 Docker 部署你的應(yīng)用,同時(shí)你需要將運(yùn)行平臺(tái)擴(kuò)展到三個(gè)節(jié)點(diǎn)。

應(yīng)用

我已經(jīng)準(zhǔn)備了一個(gè)簡(jiǎn)單的 Laravel 程序,你可以從 GitHub 克隆下來(lái)。它只是一個(gè)全新的 Laravel 安裝程序。因此,你可以使用本例中的演示程序,也可以自己創(chuàng)建一個(gè)新的 Laravel 程序。如果使用本例中的演示程序,請(qǐng)按照下面的命令將其克隆到項(xiàng)目目錄里面。

cd /to/your/working/directory
git clone git@github.com:learnk8s/laravel-kubernetes-demo.git .
預(yù)備條件

要實(shí)現(xiàn)本示例,你需要在你的本地系統(tǒng)中安裝如下軟件:

1)?Docker

2)?Kubectl

3)?Minikube

如果你在Windows系統(tǒng)中安裝上述軟件遇到問題,請(qǐng)查閱?Windows 10 中 Docker 和 Kubernetes 入門教程,這是一個(gè)手把手教學(xué)的入門教程。
Docker 鏡像

Kubernetes 部署容器化的應(yīng)用,因此首先你需要為示例應(yīng)用創(chuàng)建一個(gè) Dcoker 鏡像。由于本例中你在本地運(yùn)行 Minikube,因此你只能用示例代碼中的 Dockerfile 文件創(chuàng)建一個(gè)本地 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展了一個(gè) PHP 的 composer 鏡像,因此你能夠安裝應(yīng)用依賴。

第二部分創(chuàng)建了一個(gè)包含 Apache 服務(wù)的鏡像, Apache 服務(wù)將會(huì)為示例應(yīng)用服務(wù)。

在測(cè)試 Docker 鏡像前,你需要使用如下的命令創(chuàng)建鏡像:

cd /to/your/project/directory 
docker build -t yourname/laravel-kubernetes-demo .

然后使用下面的命令運(yùn)行示例程序:

docker run -ti  
  -p 8080:80  
  -e APP_KEY=base64:cUPmwHx4LXa4Z25HhzFiWCf7TlQmSqnt98pnuiHmzgY=      
  laravel-kubernetes-demo

示例程序可以通過(guò)?http://localhost:8080 訪問。

在這個(gè)安裝中,容器是通用的,同時(shí) 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í)行一次這個(gè)命令。
部署鏡像

現(xiàn)在示例應(yīng)用的鏡像已經(jīng)創(chuàng)建完成,并且在 Minikube 中是可用的,因此你可以接下來(lái)繼續(xù)部署這個(gè)鏡像。

我總是一開始就要確保 kubectl 在正確的上下文環(huán)境中。在這個(gè)例子中,上下文環(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 鏡像中運(yùn)行我們的示例程序。上述命令的第一個(gè)參數(shù)告訴 kubectl 如果在本地存在鏡像,就不要去登記處(例如 Docker Hub)拉取鏡像。請(qǐng)注意,你仍然需要登錄到 Docker 中,因?yàn)檫@樣 kubectl 才能檢查鏡像是否是最新的。

通過(guò)下面的命令,你會(huì)看到有一個(gè) Pod 是為示例程序而創(chuàng)建的:

kubectl get pods

該命令會(huì)返回類似如下的輸出:

NAME                                     READY STATUS RESTARTS AGE
laravel-kubernetes-demo-7dbb9d6b48-q54wp 1/1   Running 0       18m

你也可以使用 Minikube 的 GUI 控制面板來(lái)監(jiān)控集群。GUI 還有助于可視化大多數(shù)經(jīng)常討論的指標(biāo)。要查看該控制面板,請(qǐng)執(zhí)行下屬命令:

minikube dashboard

或者獲取控制面板的 URL 地址:

minikube dashboard --url=true
暴露一個(gè)服務(wù)

到目前為止,你已經(jīng)創(chuàng)建了一個(gè)運(yùn)行示例程序容器的部署。在集群中運(yùn)行的 Pod 有一個(gè)動(dòng)態(tài)的 IP。如果你使用該 IP 并直接把流量路由到那里,在每次重啟 Pod 的時(shí)候,你可能每次都要更新路由表。事實(shí)上,在每次部署或者容器重啟的時(shí)候,一個(gè)新的 IP 會(huì)關(guān)聯(lián)到這個(gè) Pod 中。為了避免需要手動(dòng)的管理 IP 地址,你需要使用服務(wù)。服務(wù)在 Pods 集合中充當(dāng)負(fù)載均衡器的角色。所以,盡管一個(gè) Pod 的 IP 地址改變了,但是服務(wù)總是指向該 Pod。同時(shí),由于服務(wù)總是擁有一個(gè)固定的 IP,因此你不需要手動(dòng)更新任何東西。

你可以使用下面的命令創(chuàng)建一個(gè)服務(wù):

kubectl expose deployment laravel-kubernetes-demo --type=NodePort --port=80

倘若一切順利,你會(huì)看到一個(gè)與下面信息相似的確認(rèn)信息:

service "laravel-kubernetes-demo" exposed

執(zhí)行下面的命令:

kubectl get services

上述命令顯示了正在運(yùn)行中的服務(wù)列表。你也可以通過(guò)控制面板中的 「服務(wù)」 導(dǎo)航菜單查看正在運(yùn)行中的服務(wù)。很顯然,一個(gè)更加令人興奮的驗(yàn)證部署和服務(wù)暴露的方法就是在瀏覽器中運(yùn)行示例程序。 ?

要獲取應(yīng)用(服務(wù))的URL地址,你可以使用下面的命令:

minikube service --url=true laravel-kubernetes-demo

上述命令會(huì)輸出 IP 地址和端口號(hào),例如:

http://192.168.99.101:31399

或者直接在瀏覽器中啟動(dòng)程序:

minikube service laravel-kubernetes-demo

不想錯(cuò)過(guò)接下來(lái)的故事,實(shí)驗(yàn)或者小提示。 如果你欣賞這篇文章,敬請(qǐng)期待接下來(lái)更多的文章內(nèi)容。 希望新的內(nèi)容直接發(fā)到你的郵箱并提升在 Kubernetes 方面的專業(yè)技能。? 現(xiàn)在請(qǐng)訂閱

擴(kuò)展

你已經(jīng)成功在 Kubernetes 中部署了應(yīng)用。這是令人興奮的。但是做這一切的重點(diǎn)是什么?你只是在一個(gè) Pod 中做了一個(gè)部署,在一個(gè)節(jié)點(diǎn)上面暴露了網(wǎng)頁(yè)服務(wù)。讓我們把目前的應(yīng)用多部署兩個(gè)實(shí)例。

現(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

上面的輸出中,每一項(xiàng)都是「1」。你希望獲得三個(gè) Pod。因此,我們通過(guò)下面的命令進(jìn)行擴(kuò)展:

kubectl scale --replicas=3 deployment/laravel-kubernetes-demo deployment "laravel-kubernetes-demo" scaled

命令執(zhí)行完成。你已經(jīng)將第一個(gè) Pod 復(fù)制另外兩個(gè),系統(tǒng)為你提供了三個(gè) Pod 來(lái)運(yùn)行這個(gè)服務(wù)。執(zhí)行 get deployment 可以檢驗(yàn)這一切:

kubectl get deployment
NAME                    DESIRED CURRENT UP-TO-DATE AVAILABLE
AGE laravel-kubernetes-demo 3       3       3          3         59m

你也可以在控制面板中的 Pods 頁(yè)面或服務(wù)頁(yè)面查看這些內(nèi)容。

現(xiàn)在,你正在使用三個(gè) Pod 運(yùn)行三個(gè)應(yīng)用實(shí)例。

想象一下這種場(chǎng)景,你的應(yīng)用越來(lái)越受歡迎。成千上萬(wàn)的訪客使用你的網(wǎng)頁(yè)或軟件。過(guò)去,你可能都焦頭爛額在編寫腳本創(chuàng)建更多實(shí)例的事情上。但是在 Kubernetes 中,您可以快速擴(kuò)展出多個(gè)實(shí)例:

kubectl scale --replicas=10 deployment/laravel-kubernetes-demo deployment "laravel-kubernetes-demo" scaled

你看看使用 Kubernetes 擴(kuò)展你的網(wǎng)站是何其便捷。

Ingress

你已經(jīng)實(shí)現(xiàn)了不錯(cuò)的功能,部署了應(yīng)用并擴(kuò)展之。當(dāng)你指向群集的(Minikube)IP地址和節(jié)點(diǎn)的端口號(hào)時(shí),你就已經(jīng)可見瀏覽器中正在運(yùn)行的程序了。 現(xiàn)在,你將看到如果通過(guò)指定的 URL 訪問應(yīng)用程序,就如同之前部署到云端那樣。

為了在 Kubernetes 中使用 URL,你需要一個(gè) Ingress。 Ingress 是一組允許入站連接到達(dá) Kubernetes 集群的規(guī)則。Ingress 是非常必要的,因?yàn)樵?Kubernetes 中,諸如 Pod 之類的資源僅具有可在集群內(nèi)和集群內(nèi)路由的IP地址。也就是說(shuō)它們是無(wú)法進(jìn)出外部環(huán)境的。

我在演示應(yīng)用源碼中包含了一個(gè)有如下內(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 會(huì)指向應(yīng)用運(yùn)行的 Service ,就像之前在 8181 端口上標(biāo)記?laravel-kubernetes-demo?那樣。

沒有集成 Ingress 資源, Ingress 控制器是無(wú)法使用的,因此您需要?jiǎng)?chuàng)建一個(gè)新的控制器或使用現(xiàn)有控制器。 本教程使用的是 Nginx Ingress 控制器來(lái)管理路由資源。 Minikube(v0.14及以上版本) 附帶 Nginx 設(shè)置作為插件,您需要手動(dòng)啟用這個(gè)插件:

minikube addons enable ingress
注意,Minikube 可能需要幾分鐘才能下載并安裝 Nginx 作為 Ingress 路由控制器。

啟用 Ingress 插件后,您可以通過(guò)這種方式來(lái)創(chuàng)建 Ingress 實(shí)例:

kubectl create -f path-to-your-ingress-file.yaml

您可以通過(guò)運(yùn)行以下命令來(lái)驗(yàn)證并獲取 Ingress 的實(shí)例信息:

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)在可以通過(guò) minikube IP地址訪問應(yīng)用程序,如上所示。 要通過(guò) URL https://laravel-kubernetes.demo 訪問網(wǎng)站應(yīng)用,您需要在 hosts 文件中添加一條解析記錄。

結(jié)論

希望這篇文章能幫助您熟悉 Kubernetes 的部署和搭建。 根據(jù)我自己的經(jīng)驗(yàn),如果你經(jīng)常進(jìn)行類似的環(huán)境搭建,這會(huì)讓你的搭建過(guò)程更加得心應(yīng)手且有趣。

轉(zhuǎn)自 PHP / Laravel 開發(fā)者社區(qū) https://laravel-china.org/top...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/29943.html

相關(guān)文章

  • 將 Node.js 應(yīng)用從 PaaS 平臺(tái)移動(dòng)到 Kubernetes Tutorial

    摘要:目前正在運(yùn)行的應(yīng)用程序。內(nèi)置非配置負(fù)載均衡器如何設(shè)置運(yùn)行的集群在這里你有幾個(gè)選項(xiàng)。它跟其它的谷歌云組件也都整合得很好,比如負(fù)載均衡器和磁盤。它會(huì)告訴負(fù)載均衡器,流量可以被重新傳到特定的。元信息和谷歌云會(huì)以正確的方式展現(xiàn)出來(lái)。 Kubernetes實(shí)踐案例分享|在這次的 RisingStack 案例分享中,我們可以在 Kubernetes Tutorial 中學(xué)習(xí)到如何從 PaaS 供應(yīng)...

    skinner 評(píng)論0 收藏0
  • Travix是如何部署應(yīng)用程序Kubernetes上的

    摘要:在這篇文章中,我們來(lái)看是如何部署應(yīng)用程序到,以及如何將它作為一個(gè)公共服務(wù)的。在中的是跟應(yīng)用程序通信的入口。每個(gè)除了運(yùn)行在部署的主要應(yīng)用程序上的也為終端運(yùn)行。部署是高級(jí)別的抽象。 Travix總部位于荷蘭,是一家在線旅游商務(wù)網(wǎng)站,業(yè)務(wù)輻射全球28個(gè)國(guó)家,成立于2011年,旗下有五個(gè)網(wǎng)站:CheapTickets,BudgetAir,Vliegwinkel和Flugladen。公司通過(guò)這五...

    miqt 評(píng)論0 收藏0
  • 如何在Kubernetes上進(jìn)行微服務(wù)部署

    摘要:今天我們將探討如何基于微服務(wù)部署來(lái)構(gòu)建。還能監(jiān)控并保障所需要數(shù)量正在運(yùn)行,并將那些停止的替換掉。目前你的部署應(yīng)顯示以下信息。我們將更細(xì)致地探討如何設(shè)置終端多服務(wù)部署服務(wù)發(fā)現(xiàn)及應(yīng)用要如何應(yīng)對(duì)失敗場(chǎng)景等。 原文來(lái)源:Rancher Labs 大多數(shù)人在生產(chǎn)環(huán)境中運(yùn)行Docker,是把它作為構(gòu)建和移動(dòng)部署配置的一種方式。然而,他們的部署模型要么非常整體化,要么有幾個(gè)大的服務(wù)模塊組成。使用真實(shí)...

    keithyau 評(píng)論0 收藏0
  • 如何在Kubernetes上進(jìn)行微服務(wù)部署

    摘要:今天我們將探討如何基于微服務(wù)部署來(lái)構(gòu)建。還能監(jiān)控并保障所需要數(shù)量正在運(yùn)行,并將那些停止的替換掉。目前你的部署應(yīng)顯示以下信息。我們將更細(xì)致地探討如何設(shè)置終端多服務(wù)部署服務(wù)發(fā)現(xiàn)及應(yīng)用要如何應(yīng)對(duì)失敗場(chǎng)景等。 原文來(lái)源:Rancher Labs 大多數(shù)人在生產(chǎn)環(huán)境中運(yùn)行Docker,是把它作為構(gòu)建和移動(dòng)部署配置的一種方式。然而,他們的部署模型要么非常整體化,要么有幾個(gè)大的服務(wù)模塊組成。使用真實(shí)...

    jsummer 評(píng)論0 收藏0
  • Kubernetes部署的最佳安全實(shí)踐

    摘要:將成安全評(píng)估如漏洞掃描加入持續(xù)集成中,使其成為構(gòu)建流程的一部分。持續(xù)集成應(yīng)確保只使用審查通過(guò)的代碼來(lái)構(gòu)建鏡像。我們推薦這篇文章中提到的安全實(shí)踐,將的靈活配置能力加入到持續(xù)集成中,自動(dòng)將安全性無(wú)縫融合到整個(gè)流程中。 編者按:本文是由 Aqua Security 的Amir Jerbi 和Michael Cherny 所寫,基于他們從本地和云端上收集到的實(shí)際數(shù)據(jù),描述了Kubernetes...

    Rocture 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<