官术网_书友最值得收藏!

3.1 部署代碼

要想將在OpenShift集群上運行的所有服務都包含在同一個命名空間中,首先需要創建一個新項目:

這個命令將自動切換到新創建的arcade項目。所有后續命令都自動針對這個項目,而不需要在每個命令中提到它。

OpenShift中的項目是帶有附加注釋的命名空間。在大多數情況下,項目和命名空間之間的區別與本書中的示例無關,因此這兩個術語大多是可以互換的。

要切換到另一個項目,可以使用以下命令:

要切換回arcade項目,運行以下命令:

除了在后續命令之前執行oc project命令外,還可以通過在每個命令中選擇某個命名空間來執行針對某個命名空間的所有命令。所有oc命令都支持-n標志(--namespace的簡寫),該標志可用于指定要在其中運行命令的命名空間。

在實踐中,當你知道將對同一命名空間執行許多命令時,使用oc project切換到它可以節省一些輸入時間,還可以避免對“默認”命名空間執行命令,也不必擔心所有資源都去了哪里。

3.1.1 部署現有容器鏡像

在新項目中啟動容器的最快方法是使用oc run。由于你想要部署的應用程序的game服務已經內置到一個容器鏡像中,你可以使用以下命令在集群上啟動它:

這將在集群上啟動一個新的pod。使用以下命令在它啟動時觀察它。一旦它準備好了,你應該會看到狀態“Running”:

此時,你可能很想看看你剛剛部署的游戲。然而,oc run命令只是啟動了一個沒有公開端點的pod,所以你需要找到一種方法來訪問游戲UI(在這個容器鏡像中,它在端口8080上公開)。確認UI正在工作的一種快速而簡單的方法是將端口從容器轉發到本地機器。為此,執行如下命令:

雖然oc run是驗證集群可以訪問構建的容器鏡像并按預期運行的一種快速簡便的方法,但它并不是在集群上持續運行應用程序的首選方法,因為它沒有提供圍繞部署pod的一些抽象所提供的高級概念。部署應用程序的標準方法是部署資源。部署為普通pod提供了額外的特性。例如,它們可用于滾動升級或運行分布在節點上的多個實例。要用相同的容器鏡像創建一個部署游戲,運行oc create deployment和oc get pods來觀察即將出現的pod:

安全上下文約束

當你使用oc create deployment部署容器時,pod將使用不同的參數運行。區別之一是注釋openshift.io/scc。比較以下兩個命令的輸出,調整為基于你的部署生成的pod:

restricted安全上下文約束(SCC)意味著此部署的pod將不能運行特權容器或掛載主機目錄,并且容器必須使用允許范圍內的唯一標識符(UID)。這意味著,對于運行Web服務器的應用程序(在本例中是NGINX),它們需要進行相應的配置。它們不能在端口80上運行,也不能指定UID,該UID將自動映射到項目配置范圍內的高UID。

請參閱NGINX文檔(https://oreil.ly/Z1Wp8),了解如何配置NGINX以在特定端口上服務。

擴展和公開部署

現在,你可以使用oc scale deployment來擴展游戲部署。你會立即看到更多的pod。

要訪問這些不同的實例,你需要創建一個服務資源,并告訴它從你的pod公開端口8080。使用如下命令創建服務:

從oc get endpoints的輸出可以看到,OpenShift為服務注冊了三個不同的端點,每個運行的實例對應一個端點。為了測試連接,你可以再次將端口8080轉發到localhost,這次使用服務而不是pod:

要獲得部署的街機平臺應用程序的第二個服務,請重復平臺服務的上述步驟:

再次使用端口轉發來檢查服務是否正在接受請求:

你可能已經意識到,端口轉發并不是用戶希望服務訪問方式。在深入討論向集群外部公開服務(3.2節)之前,下一小節將介紹部署應用程序的第三種方法。

3.1.2 從Git倉庫部署應用程序

街機平臺包含一項服務,可以收集每個用戶在所有游戲中的分數。該服務是用Go語言編寫的(https://golang.org),可以在Git倉庫的highscore子文件夾中找到。要部署此服務,本例不使用來自容器注冊中心的現有鏡像,而是使用OpenShift的內置構建基礎設施。

要從Git倉庫部署應用程序,需運行以下命令:

?包含該應用程序的Git倉庫

?要部署的倉庫中的子文件夾

?資源中使用的應用程序名稱

?為應用程序創建的資源

在閱讀這個命令的輸出時,你可以看到OpenShift在維護這個應用程序方面為你做了很多工作。第5章將詳細介紹OpenShift的內置構建系統。

現在重要的是,OpenShift創建了一個構建pod,它檢出了Git倉庫,并使用highscore子文件夾中的Dockerfile構建了一個容器鏡像。它在同一步驟中自動為該應用程序創建了一個服務。

完成構建需要一些時間。當運行oc get pods時,你會看到一個構建pod正在運行,在這個pod的狀態變為“Completed”后,應用程序pod將出現:

oc new-app創建的所有資源都沒有歸屬資源。你可以根據日志了解命令在OpenShift集群上為你創建了哪些資源。

清理應用程序

以下部分仍然使用oc new-app命令創建的資源,將它們公開給集群外部。但是,你可能想知道如何卸載應用程序,因為沒有資源擁有OpenShift自動創建的所有內容。你可以運行以下命令來清除與highscore應用程序相關的所有內容,因為OpenShift將app=highscore標簽添加到它創建的所有內容中:

如果你想擺脫整個平臺,你也可以刪除該項目:

主站蜘蛛池模板: 醴陵市| 房产| 光山县| 景宁| 阿克| 上饶县| 措勤县| 衡山县| 延寿县| 巩留县| 龙川县| 兴国县| 岢岚县| 东安县| 宝清县| 水富县| 峡江县| 鹤庆县| 清水河县| 韩城市| 冀州市| 海林市| 浦北县| 乌海市| 福州市| 花垣县| 马尔康县| 山西省| 虹口区| 宁国市| 泰和县| 南靖县| 长宁区| 商都县| SHOW| 淳安县| 开江县| 资兴市| 陆丰市| 杨浦区| 明星|