OpenShift3器平台介紹與部署案例
“雲計算”一詞經常與虛擬機聯系在一起,但如今許多新興和快速發展的雲技術都使用容器化替代虛擬化,或將兩者結合使用。容器占用的空間比虛擬機小得多,而且能夠在一台主機上運行多個孤立的應用。相比傳統的虛擬化技術,基於容器的虛擬化具備諸多優勢。容器被視為一種更快, 更便捷的在雲基礎設施上部署服務的方法。雖然容器本身具有眾多優勢,但管理大型的容器化環境着實具有挑戰性。因此,許多容器編排工具備受青睞。然而,編排工具不盡相同,應根據具體目的精挑細選。
容器的部署和終止只需極低的開銷和幾秒鍾的時間。然而,當數據持久性至關重要時,其數據易失性可能會構成嚴重威脅。容器化的下一個突破將是實現與存儲可靠、高效的連接。介紹如何准備、配置、部署和管理基於 Red Hat OpenShift 容器平台 3.6 和其他容器原生存儲解決方案的私有雲環境。
對於應用開發團隊
OpenShift 容器平台可為開發人員提供一款理想平台,方便其以自助方式實現配置、構建和部署各種應用及組件。開發人員可利用多種自動化工作流程,如我們的源至鏡像 (S2I) 流程,輕松地將版本控制系統
中的源代碼植入可直接運行的 docker 格式容器鏡像中。OpenShift 容器平台整合了各種持續整合 (CI)和持續交付 (CD) 工具,是適用於所有企業機構的理想解決方案。
對於 IT 運營團隊
OpenShift 容器平台為 IT 運營團隊提供了安全的、企業級 Kubernetes,從而實現對應用基於策略的控制及應用自動化。通過集群服務、調度和編排,用戶還可實現負載均衡和自動擴展。安全功能可防止租戶入侵其他應用或底層主機。同時,由於 OpenShift 可將持久存儲直接與 Linux® 容器連接,因此 IT 部門可在同一平台上運行有狀態和無狀態應用。
Openshift 3.6 部署參考案例
• Docker,用於構建、發布和運行容器化應用
• Kubernetes,用於編排和管理容器化應用
• Etcd*,面向 OpenShift 容器平台集群的鍵值存儲
• Open vSwitch*,在 OpenShift 容器平台環境中提供軟件定義網絡 (SDN) 特定的功能
• Red Hat Ansible* Automation,用於安裝和管理OpenShift 容器平台部署
• HAProxy*,用於路由和負載均衡目的
• Keepalived*,為 HAProxy 實例提供虛擬 IP 管理
雲原生中持久化卷請求流程
Red Hat Ansible Automation
Ansible 是一款強大的 IT 自動化工具。它能夠配置各種資源和部署應用。它能夠配置和管理設備與操作系統組件。由於其簡易性、可擴展性和便攜性,本 OpenShift 參考架構在很大程度上基於 Ansible playbook。因此,本參考架構以相同的方式采用和分發功能改進。
Red Hat 容器原生存儲
Red Hat 容器原生存儲可將 OpenShift 容器平台打造成一個完全超級融合的基礎設施,存儲容器與計算容器共存其中。存儲平面以容器化的 Red Hat Gluster Storage 服務為基礎,控制着所有存儲服務器上的存儲設備。Heketi 是容器原生存儲架構的一部分,控制着存儲集群中的所有成員節點。Heketi 還提供 API,以便於輕松請求容器存儲空間。雖然 Heketi 提供了一個面向存儲集群的端點,但真正從 OpenShift 客戶端調用其 API 的對象叫作 Storage Class。Kubernetes 和 OpenShift 對象描述了集群可用的存儲類型,並可在生成持久性數據卷請求時動態發送存儲請求。 上圖描述了在容器原生存儲架構中創建持久性數據卷的基本流程。
OpenShift系統架構
Red Hat OpenShift 容器平台是一個完整的容器應用平台, 支持在不同大小的基礎設施中以一致的解決方案進行應用開發。Red Hat OpenShift 集成了必要的架構, 流程, 平台和服務, 夠幫助開發與運營團隊跨越傳統的孤立結構構建可助力企業取得成功的應用。Red Hat OpenShift 集群平台由 Kubernetes 容器編排器管理, 后者管理着運行 Docker 容器運行時環境的系統集群中的容器化應用。Red Hat OpenShift 平台的物理配置基於 Kubernetes 集群架構。
該 Red Hat OpenShift RA 包含五種節點:bastion、master、基礎設施、存儲和應用,具體介紹如下。
Bastion 節點
這是個專用節點,可作為 Red Hat OpenShift 集群的主要部署和管理服務器。它可用作集群管理員執行系統部署和管理操作的登錄節點,例如運行 Ansible OpenShift 部署 playbook。Bastion 節點運行 Red Hat Enterprise Linux 7.4。
OpenShift Master 節點
OpenShift 容器平台 master 是為整個集群環境執行控制功能的服務器。它負責創建、調度和管理特定於 Red Hat OpenShift 的所有對象。它在一個 OpenShift 二進制文件中包含 API、控制器管理器和調度器功能。人們通常還會在 OpenShift master 上安裝 etcd 鍵值存儲,以實現 etcd 和 OpenShift master 之間的低延遲連接。建議在需要高可用性的環境中同時運行 Red Hat OpenShift master 和 etcd。如要做到這一點,可同時運行多個 OpenShift master 並利用外部主動-被動負載均衡器和 etcd 的集群功能。OpenShift master 節點運行 Red Hat Enterprise Linux Atomic Host 7.4.0。
OpenShift 基礎設施節點
OpenShift 基礎設施節點運行基礎設施特定的服務:Docker Registry*, HAProxy 路由器和 Heketi。Docker Registry 將應用鏡像以容器的形式存儲。HAProxy 路由器為 Red Hat OpenShift 應用提供路由功能。它目前通過 Server Name Indication (SNI) 支持 HTTP(S) 流量和 TLS 流量。Heketi 為配置 GlusterFS 持久性存儲提供管理 API。還有其他應用和服務也可以部署在OpenShift 基礎設施節點上。OpenShift 基礎設施節點運行 Red Hat Enterprise Linux Atomic Host 7.4.0。
OpenShift 應用節點
OpenShift 應用節點運行開發人員創建和部署的容器化應用。OpenShift 應用 節點將 OpenShift 節點組件整合到一個二進制文件中,可供 OpenShift master 用來調度和控制容器。Red Hat OpenShift 應用節點運行 Red Hat Enterprise Linux Atomic Host 7.4.0。
OpenShift 存儲節點
OpenShift 存儲節點運行容器化 GlusterFS 服務,為需要數據持久性的應用容器配置持久性數據卷。持久性數據卷可由集群管理員手動創建,也可由存儲類對象自動創建。OpenShift 存儲節點也能夠運行容器化應用。Red Hat OpenShift 存儲節點運行 Red Hat Enterprise Linux Atomic Host 7.4.0。
Intel服務器配置示例
集群服務器 英特爾® 服務器系統 S2600WF https://ark.intel.com/zh-cn/products/series/89018/ Intel-Server-Board-S2600WF-Family
物理與邏輯網絡
Arista 7060X 和 7260X 系列是專門構建的 10, 25, 40, 50 和100GbE 數據中心交換機,采用緊湊、節能的外形,能夠在 2 層和 3 層達到線速度,並具備先進的軟件定義雲網絡功能。
7060CX-32S 交換機在 1RU 外形中具有 32 個 QSFP100 和 2 個 SFP+ 端口,能夠在功能豐富的 2 層和 3 層提供出色的線速 度性能和高達 6.4Tbps 的整體吞吐量。7060CX-32S 具有出色的配置靈活性,支持最多 32 個 100GbE 端口,每個端口都能夠提供廣泛的速度選擇:4x 10GbE, 4x 25GbE, 1x 40GbE 或 2x 50GbE 以及 1x 100GbE。
https://www.arista.com/assets/data/pdf/ Datasheets/7060X_7260X_DS.pdf
Openshift容器平台邏輯架構
Red Hat OpenShift 容器平台及其邏輯架構的組件。所有 Red Hat OpenShift 節點通過內部網絡相連接,可以相互通信。此外,Open vSwitch 還創建了自己的網絡來支持 Red Hat OpenShift pod 間通信。考慮到多租戶插件,Open vSwitch pod 只能在共用同一項目命名空間的情況下相互通信。Keepalived 在兩台基礎設施主機上管理着一個虛擬 IP 地址,支持對 Red HatOpenShift web 控制台和應用進行外部訪問。存儲節點也通過內部網絡相連接,建立了一個高度可用, 快速的 Gluster Storage 集群。
Openshift 3.6 安裝的示例host文件
[OSEv3:children]
masters
nodes
etcd
lb
local
glusterfs
glusterfs_registry
[OSEv3:vars]
ansible_ssh_user=openshift
ansible_become=true
openshift_master_cluster_method=native
openshift_master_cluster_hostname=ocp.example.local
openshift_master_cluster_public_hostname=ocp.example.com
openshift_master_default_subdomain=apps.ocp.example.com
openshift_master_cluster_ip=172.30.4.30
openshift_master_cluster_public_ip=100.65.0.30
openshift_master_portal_net=10.0.0.0/16
deployment_type=openshift-enterprise
openshift_release=v3.6
os_sdn_network_plugin_name='redhat/openshift-ovs-multitenant'
openshift_master_identity_providers=[{'name': 'htpasswd_auth', 'login': 'true', 'challenge': 'true', 'kind': 'HTPasswdPasswordIdentityProvider', 'filename': '/etc/origin/master/users.htpasswd'}]
openshift_master_htpasswd_users={'admin': '$apr1$vC6GcVUP$AHZDU5BAFF6dDMfk.IFzG1'}
rhel_subscription_user=user@example.com
rhel_subscription_pass=portal_password
openshift_hosted_registry_storage_kind=glusterfs
openshift_hosted_registry_storage_volume_size=200Gi
openshift_storage_glusterfs_registry_storageclass=True
local_dns=172.30.4.10
external_interface=bond0
external_vlan= 2017
external_netmask=255.255.240.0
external_gateway=100.65.0.1
internal_interface=bond0
internal_netmask=255.255.255.0
bastion_ip=172.30.4.10
internal_gateway={{ bastion_ip }}
dhcp_first_ip=172.30.4.100
dhcp_last_ip=172.30.4.150
root_password=NODE_ROOT_PASSWORD
[local]
127.0.0.1
[masters]
master1.ocp.example.local containerized=True openshift_schedulable=False openshift_ip=172.30.4.11 openshift_hostname=master1.ocp.example.local
master2.ocp.example.local containerized=True openshift_schedulable=False openshift_ip=172.30.4.12 openshift_hostname=master2.ocp.example.local
master3.ocp.example.local containerized=True openshift_schedulable=False openshift_ip=172.30.4.13 openshift_hostname=master3.ocp.example.local
[nodes]
master1.ocp.example.local openshift_schedulable=False openshift_ip=172.30.4.11 openshift_hostname=master1.ocp.example.local ipmi=192.168.25.12 serial=BQF973900001
master2.ocp.example.local openshift_schedulable=False openshift_ip=172.30.4.12 openshift_hostname=master2.ocp.example.local ipmi=192.168.25.13 serial=BQF973900002
master3.ocp.example.local openshift_schedulable=False openshift_ip=172.30.4.13 openshift_hostname=master3.ocp.example.local ipmi=192.168.25.14 serial=BQF973900003
infra1.ocp.example.local openshift_node_labels="{'region': 'infra'}" openshift_schedulable=True containerized=True openshift_public_ip=100.65.0.14 openshift_ip=172.30.4.14 openshift_hostname=infra1.ocp.example.local ipmi=192.168.25.15 serial=BQF973900006
infra2.ocp.example.local openshift_node_labels="{'region': 'infra'}" openshift_schedulable=True containerized=True openshift_public_ip=100.65.0.15 openshift_ip=172.30.4.15 openshift_hostname=infra2.ocp.example.local ipmi=192.168.25.16 serial=BQF973900004
app1.ocp.example.local containerized=True openshift_schedulable=True openshift_ip=172.30.4.16 openshift_hostname=app1.ocp.example.local ipmi=192.168.25.17 serial=BQF973900007
app2.ocp.example.local containerized=True openshift_schedulable=True openshift_ip=172.30.4.17 openshift_hostname=app2.ocp.example.local ipmi=192.168.25.18 serial=BQF973900009
app3.ocp.example.local containerized=True openshift_schedulable=True openshift_ip=172.30.4.18 openshift_hostname=app3.ocp.example.local ipmi=192.168.25.19 serial=BQF973900008
app4.ocp.example.local containerized=True openshift_schedulable=True openshift_ip=172.30.4.19 openshift_hostname=app4.ocp.example.local ipmi=192.168.25.20 serial=BQF973900011
app5.ocp.example.local containerized=True openshift_schedulable=True openshift_ip=172.30.4.20 openshift_hostname=app5.ocp.example.local ipmi=192.168.25.21 serial=BQF973900010
app6.ocp.example.local containerized=True openshift_schedulable=True openshift_ip=172.30.4.21 openshift_hostname=app6.ocp.example.local ipmi=192.168.25.22 serial=BQF973900012
gluster1.ocp.example.local containerized=True openshift_schedulable=True openshift_ip=172.30.4.22 openshift_hostname=gluster1.ocp.example.local ipmi=192.168.25.23 serial=BQF974100202
gluster2.ocp.example.local containerized=True openshift_schedulable=True openshift_ip=172.30.4.23 openshift_hostname=gluster2.ocp.example.local ipmi=192.168.25.24 serial=BQF974100201
gluster3.ocp.example.local containerized=True openshift_schedulable=True openshift_ip=172.30.4.24 openshift_hostname=gluster3.ocp.example.local ipmi=192.168.25.25 serial=BQF974100203
[etcd]
etcd1.ocp.example.local containerized=True openshift_ip=172.30.4.11 openshift_hostname=etcd1.ocp.example.local
etcd2.ocp.example.local containerized=True openshift_ip=172.30.4.12 openshift_hostname=etcd2.ocp.example.local
etcd3.ocp.example.local containerized=True openshift_ip=172.30.4.13 openshift_hostname=etcd3.ocp.example.local
[lb]
lb1.ocp.example.local openshift_hostname=lb1.ocp.example.local openshift_ip=172.30.4.14 openshift_public_ip=100.65.0.14
lb2.ocp.example.local openshift_hostname=lb2.ocp.example.local openshift_ip=172.30.4.15 openshift_public_ip=100.65.0.15
[glusterfs]
app1.ocp.example.local glusterfs_ip=172.30.4.16 glusterfs_devices="[ '/dev/nvme0n1' ]"
app2.ocp.example.local glusterfs_ip=172.30.4.17 glusterfs_devices="[ '/dev/nvme0n1' ]"
app3.ocp.example.local glusterfs_ip=172.30.4.18 glusterfs_devices="[ '/dev/nvme0n1' ]"
app4.ocp.example.local glusterfs_ip=172.30.4.19 glusterfs_devices="[ '/dev/nvme0n1' ]"
app5.ocp.example.local glusterfs_ip=172.30.4.20 glusterfs_devices="[ '/dev/nvme0n1' ]"
app6.ocp.example.local glusterfs_ip=172.30.4.21 glusterfs_devices="[ '/dev/nvme0n1' ]"
[glusterfs_registry]
gluster1.ocp.example.local glusterfs_ip=172.30.4.22 glusterfs_devices="[ '/dev/sdb', '/dev/sdc', '/dev/sdd', '/dev/sde', '/dev/sdf', '/dev/sdg', '/dev/sdh', '/dev/sdi', '/dev/sdj', '/dev/sdk', '/dev/sdl', '/dev/sdm', '/dev/sdn', '/dev/sdo', '/dev/sdp', '/dev/sdq', '/dev/sdr', '/dev/sds', '/dev/sdt', '/dev/sdu' ]"
gluster2.ocp.example.local glusterfs_ip=172.30.4.23 glusterfs_devices="[ '/dev/sdb', '/dev/sdc', '/dev/sdd', '/dev/sde', '/dev/sdf', '/dev/sdg', '/dev/sdh', '/dev/sdi', '/dev/sdj', '/dev/sdk', '/dev/sdl', '/dev/sdm', '/dev/sdn', '/dev/sdo', '/dev/sdp', '/dev/sdq', '/dev/sdr', '/dev/sds', '/dev/sdt', '/dev/sdu' ]"
gluster3.ocp.example.local glusterfs_ip=172.30.4.24 glusterfs_devices="[ '/dev/sdb', '/dev/sdc', '/dev/sdd', '/dev/sde', '/dev/sdf', '/dev/sdg', '/dev/sdh', '/dev/sdi', '/dev/sdj', '/dev/sdk', '/dev/sdl', '/dev/sdm', '/dev/sdn', '/dev/sdo', '/dev/sdp', '/dev/sdq', '/dev/sdr', '/dev/sds', '/dev/sdt', '/dev/sdu' ]"
[arista]
arista-1 ansible_host=192.168.25.2 ansible_user=admin ansible_password=SWITCH_ADMIN_PASSWORD
arista-2 ansible_host=192.168.25.3 ansible_user=admin ansible_password=SWITCH_ADMIN_PASSWORD
今天先到這兒,希望對雲原生,技術領導力, 企業管理,系統架構設計與評估,團隊管理, 項目管理, 產品管理,團隊建設 有參考作用 , 您可能感興趣的文章:
領導人怎樣帶領好團隊
構建創業公司突擊小團隊
國際化環境下系統架構演化
微服務架構設計
視頻直播平台的系統架構演化
微服務與Docker介紹
Docker與CI持續集成/CD
互聯網電商購物車架構演變案例
互聯網業務場景下消息隊列架構
互聯網高效研發團隊管理演進之一
消息系統架構設計演進
互聯網電商搜索架構演化之一
企業信息化與軟件工程的迷思
企業項目化管理介紹
軟件項目成功之要素
人際溝通風格介紹一
精益IT組織與分享式領導
學習型組織與企業
企業創新文化與等級觀念
組織目標與個人目標
初創公司人才招聘與管理
人才公司環境與企業文化
企業文化、團隊文化與知識共享
高效能的團隊建設
項目管理溝通計划
構建高效的研發與自動化運維
某大型電商雲平台實踐
互聯網數據庫架構設計思路
IT基礎架構規划方案一(網絡系統規划)
餐飲行業解決方案之客戶分析流程
餐飲行業解決方案之采購戰略制定與實施流程
餐飲行業解決方案之業務設計流程
供應鏈需求調研CheckList
企業應用之性能實時度量系統演變
Openshift與Kubernetes的區別
如有想了解更多軟件設計與架構, 系統IT,企業信息化, 團隊管理 資訊,請關注我的微信訂閱號:
作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。 該文章也同時發布在我的獨立博客中-Petter Liu Blog。