导读 “云计算”一词经常与虚拟机联系在一起,但如今许多新兴和快速发展的云技术都使用容器化替代虚拟化,或将两者结合使用。容器占用的空间比虚拟机小得多,而且能够在一台主机上运行多个孤立的应用。相比传统的虚拟化技术,基于容器的虚拟化具备诸多优势。容器被视为一种更快, 更便捷的在云基础设施上部署服务的方法。虽然容器本身具有众多优势,但管理大型的容器化环境着实具有挑战性。因此,许多容器编排工具备受青睐。然而,编排工具不尽相同,应根据具体目的精挑细选。

容器的部署和终止只需极低的开销和几秒钟的时间。然而,当数据持久性至关重要时,其数据易失性可能会构成严重威胁。容器化的下一个突破将是实现与存储可靠、高效的连接。介绍如何准备、配置、部署和管理基于 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

原文来自:https://www.cnblogs.com/wintersun/p/13832824.html

本文地址:https://www.linuxprobe.com/openshift3.html编辑:倪家兴,审核员:逄增宝

Linux命令大全:https://www.linuxcool.com/

Linux系统大全:https://www.linuxdown.com/

红帽认证RHCE考试心得:https://www.rhce.net/