OpenShift 部署01:节点规划与配置基础架构

OpenShift 部署流程和节点的规划

本文参考官方手册以使用最低资源要求构建一个 OpenShift 集群。
用于部署的节点可以是 VM(可以是多个节点) 也可以是物理机。

部署流程

部署 OpenShift 集群的核心过程和相关节点角色如下:

bootstrapp 集群涉及以下步骤:

  1. bootstrap 机器启动并开始托管 control plane 机器引导所需的远程资源。(如果自己配置基础架构,则需要人工干预)
  2. bootstrap 机器启动单节点 etcd 集群和一个临时 Kubernetes control plane。
  3. control plane 机器从 bootstrap 机器获取远程资源并完成启动。(如果自己配置基础架构,则需要人工干预)
  4. 临时 control plane 将生产环境的 control plane 调度到生产环境 control plane 机器。
  5. Cluster Version Operator(CVO)在线并安装 etcd Operator。etcd Operator 在所有 control plane 节点上扩展 etcd。
  6. 临时 control plane 关机,并将控制权交给生产环境 control plane。
  7. bootstrap 机器将 OpenShift Container Platform 组件注入生产环境 control plane。
  8. 安装程序关闭 bootstrap 机器。(如果自己配置基础架构,则需要人工干预)
  9. control plane 设置 compute 节点。
  10. control plane 以一组 Operator 的形式安装其他服务。

节点角色规划

主机名功能角色
supportDNS NTP HAProxy Image Registry(缓存 OpenShift 安装所需的镜像) Cluster Installer
bootstrap安装初始化,引导 master 完成后可以关闭该节点
master01OCP Cluster Master/Etcd Node
master02OCP Cluster Master/Etcd Node
master03OCP Cluster Master/Etcd Node
worker01OCP Cluster Worker Node
worker02OCP Cluster Worker Node

节点资源规划

HostnameOSCPU(Core)MEM(GB)DISK(GB)
supportRHEL 8.748200
bootstrapRHCOS816100
master01RHCOS816120
master02RHCOS816120
master03RHCOS816120
worker01RHCOS816100
worker02RHCOS816100

节点网络规划

HostnameIPGWDNS
support172.25.1.10/24172.25.1.254172.25.100.100(指向本身)
bootstrap172.25.1.20/24
master01172.25.1.11/24
master02172.25.1.12/24
master03172.25.1.13/24
worker01172.25.1.21/24
worker02172.25.1.22/24

DNS 域名解析规划

DNS PartValue
BASE_DOMAINocp.icu
OCP_CLUSTER_IDocp4
DNS NameA Record
support.ocp.icu172.25.1.10
dns.ocp.icu172.25.1.10
api.ocp4.ocp.icu172.25.1.10
api-int.ocp4.ocp.icu172.25.1.10
*.apps.ocp4.ocp.icu172.25.1.10
bootstrap.ocp4.ocp.icu172.25.1.20
master01.ocp4.ocp.icu172.25.1.11
master02.ocp4.ocp.icu172.25.1.12
master03.ocp4.ocp.icu172.25.1.13
worker01.ocp4.ocp.icu172.25.1.21
worker02.ocp4.ocp.icu172.25.1.22

安装和配置 support 节点

按照以下要求安装 support 节点:

  1. 安装节点资源规划配置节点资源
  2. 最小化安装 RHEL 8.7
  3. 按照节点网络规划设置网络
  4. 安装时将磁盘空间全部分配给 /

将 CDROM 挂载,并配置成 YUM 源:

[root@support ~]# mkdir /mnt/yum
[root@support ~]# echo "/dev/sr0 /mnt/yum iso9660 defaults 0 0" >> /etc/fstab
[root@support ~]# mount -a
mount: /mnt/yum: WARNING: device write-protected, mounted read-only.

[root@support ~]# cat >> /etc/yum.repos.d/rhel_dvd.repo << EOF
[BaseOS]
name=BaseOS
baseurl=file:///mnt/yum/BaseOS
gpgcheck=0
enabled=1

[AppStream]
name=AppStream
baseurl=file:///mnt/yum/AppStream
gpgcheck=0
enabled=1
EOF

[root@support ~]# dnf repolist
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

repo id                                           repo name
AppStream                                         AppStream
BaseOS                                            BaseOS

关闭 firewalld 和 SELinux:

[root@support ~]# systemctl disable --now firewalld
[root@support ~]# setenforce 0
[root@support ~]# sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config

配置基础架构-NTP

安装 chrony

[root@support ~]# dnf install chrony -y

备份原始的 chrony.conf 配置文件,再修改配置文件:

[root@support ~]# cp /etc/chrony.conf{,.bak}

[root@support ~]# sed -i -e "s/^server*/#&/g" \
-e "s/#local stratum 10/local stratum 10/g" \
-e "s/#allow 172.25.0.0\/16/allow all/g" \
/etc/chrony.conf

[root@support ~]# systemctl enable --now chronyd

配置基础架构-DNS

OCP4 建议的域名构成为:集群名+根域名 $OCP_CLUSTER_ID.$BASE_DOMAIN

安装 BIND 服务

[root@support ~]# dnf install -y bind bind-utils

设置 BIND 配置文件

配置 forward 和 允许所有客户端可查询

[root@support ~]# cp /etc/named.conf{,.bak}


[root@support ~]# sed -i -e "s/listen-on port.*/listen-on port 53 { any; };/" /etc/named.conf
[root@support ~]# sed -i -e "s/allow-query.*/allow-query { any; };/" /etc/named.conf
[root@support ~]# sed -i '/recursion yes;/a forward first; forwarders { 114.114.114.114; 8.8.8.8; };' /etc/named.conf
[root@support ~]# sed -i -e "s/dnssec-enable.*/dnssec-enable no;/" /etc/named.conf
[root@support ~]# sed -i -e "s/dnssec-validation.*/dnssec-validation no;/" /etc/named.conf

配置 Zone 区域

添加三个解析 Zone,Zone 的规划如下:

域名后缀描述
ocp.icu集群内部域名后缀,集群所有节点的主机名都使用此后缀
ocp4.ocp.icuOCP 集群的域名
25.172.in-addr.arpa集群内所有节点的反向解析
[root@support ~]# cat >> /etc/named.rfc1912.zones << EOF
zone "ocp.icu" IN {
        type master;
        file "ocp.icu.zone";
        allow-transfer { any; };
};

zone "ocp4.ocp.icu" IN {
        type master;
        file "ocp4.ocp.icu.zone";
        allow-transfer { any; };
};

zone "25.172.in-addr.arpa" IN {
        type master;
        file "25.172.in-addr.arpa.zone";
        allow-transfer { any; };
};
EOF

创建 ocp.icu 区域配置文件:

[root@support ~]# cat /var/named/ocp.icu.zone
$ORIGIN ocp.icu.
$TTL 1D
@       IN SOA ocp.icu. admin.ocp.icu. (
                0       ;serial
                1D      ;refresh
                1H      ;retry
                1W      ;expire
                3H )     ;minimum

@       IN      NS      dns.ocp.icu.
support IN      A       172.25.1.10
dns     IN      A       172.25.1.10

创建 ocp4.ocp.icu 区域配置文件:

root@support ~]# cat /var/named/ocp4.ocp.icu.zone
$ORIGIN ocp4.ocp.icu.
$TTL 1D
@       IN SOA ocp4.ocp.icu. admin.ocp4.ocp.icu. (
                0       ;serial
                1D      ;refresh
                1H      ;retry
                1W      ;expire
                3H )     ;minimum

@       IN      NS      dns.ocp.icu.
api     IN      A       172.25.1.10
api-int IN      A       172.25.1.10
*.apps  IN      A       172.25.1.10

bootstrap        IN      A       172.25.1.20
master01        IN      A       172.25.1.11
master02        IN      A       172.25.1.12
master03        IN      A       172.25.1.13
worker01        IN      A       172.25.1.21
worker02        IN      A       172.25.1.22

创建 25.172.in-addr.arpa.zone 反向解析区域配置文件:

[root@support ~]# cat /var/named/25.172.in-addr.arpa.zone 
$TTL 1D
@       IN SOA ocp.icu. admin.ocp.icu. (
                0       ;serial
                1D      ;refresh
                1H      ;retry
                1W      ;expire
                3H )     ;minimum

@       IN      NS      dns.ocp.icu.
10.1.25.172.in-addr.arpa. IN PTR support.ocp.icu.
10.1.25.172.in-addr.arpa. IN PTR dns.ocp.icu.
10.1.25.172.in-addr.arpa. IN PTR api.ocp4.ocp.icu.
10.1.25.172.in-addr.arpa. IN PTR api-int.ocp4.ocp.icu.


20.1.25.172.in-addr.arpa. IN PTR bootstrap.ocp4.ocp.icu.
11.1.25.172.in-addr.arpa. IN PTR master01.ocp4.ocp.icu.
12.1.25.172.in-addr.arpa. IN PTR master02.ocp4.ocp.icu.
13.1.25.172.in-addr.arpa. IN PTR master03.ocp4.ocp.icu.
21.1.25.172.in-addr.arpa. IN PTR worker01.ocp4.ocp.icu.
22.1.25.172.in-addr.arpa. IN PTR worker02.ocp4.ocp.icu.

启动 BIND 服务:

[root@support ~]# systemctl enable --now named

将 support 节点的 DNS 配置指向自己

root@support ~]# nmcli con s
NAME   UUID                                  TYPE      DEVICE 
ens34  77efd8de-3841-4cc0-bb2f-7193344f7dcc  ethernet  ens34  
[root@support ~]# nmcli con modify ens34 ipv4.dns 172.25.1.10
[root@support ~]# nmcli con up ens34

测试正反向 DNS 解析:
正向解析:

[root@support ~]# dig quay.io +short
52.0.72.224
34.238.89.100
34.196.214.29
[root@support ~]# dig api.ocp4.ocp.icu +short
172.25.1.10
[root@support ~]# dig api-int.ocp4.ocp.icu +short
172.25.1.10
[root@support ~]# dig xxx.apps.ocp4.ocp.icu +short
172.25.1.10
[root@support ~]# dig master01.ocp4.ocp.icu  +short
172.25.1.11
[root@support ~]# dig worker01.ocp4.ocp.icu  +short
172.25.1.21
[root@support ~]# dig bootstrap.ocp4.ocp.icu  +short
172.25.1.20

反向解析:

[root@support ~]# dig -x 172.25.1.20 +short
bootstrap.ocp4.ocp.icu.
[root@support ~]# dig -x 172.25.1.21 +short
worker01.ocp4.ocp.icu.
[root@support ~]# dig -x 172.25.1.22 +short
worker02.ocp4.ocp.icu.
[root@support ~]# dig -x 172.25.1.11 +short
master01.ocp4.ocp.icu.
[root@support ~]# dig -x 172.25.1.12 +short
master02.ocp4.ocp.icu.
[root@support ~]# dig -x 172.25.1.13 +short
master03.ocp4.ocp.icu.
[root@support ~]# dig -x 172.25.1.10 +short
dns.ocp.icu.
api.ocp4.ocp.icu.
api-int.ocp4.ocp.icu.
support.ocp.icu.

配置基础架构-HAProxy

根据 OCP 集群需求,需要在 Haproxy 的前后端配置以下端口:
API 负载均衡配置:

portbackenddescribe
6443Bootstrap 和 control plane. bootstrap 在初始化集群后需要移除Kubernetes API Server
22623Bootstrap 和 control plane. bootstrap 在初始化集群后需要移除Machine Config Server

应用入口负载均衡配置:

portbackenddescribe
443运行 ingress controller 或 worker nodehttps 流量
80运行 ingress controller 或 worker nodehttp 流量

安装 Haproxy:

[root@support ~]# dnf install haproxy -y

配置 Haproxy:

[root@support ~]# cat /etc/haproxy/haproxy.cfg
global
  log         127.0.0.1 local2
  pidfile     /var/run/haproxy.pid
  maxconn     4000
  daemon
defaults
  mode                    http
  log                     global
  option                  dontlognull
  option http-server-close
  option                  redispatch
  retries                 3
  timeout http-request    10s
  timeout queue           1m
  timeout connect         10s
  timeout client          1m
  timeout server          1m
  timeout http-keep-alive 10s
  timeout check           10s
  maxconn                 3000
listen stats
  bind :9000
  mode http
  stats enable
  stats uri /
listen api-server-6443 
  bind *:6443
  mode tcp
  server bootstrap bootstrap.ocp4.ocp.icu:6443 check inter 1s backup 
  server master01 master01.ocp4.ocp.icu:6443 check inter 1s
  server master02 master02.ocp4.ocp.icu:6443 check inter 1s
  server master03 master03.ocp4.ocp.icu:6443 check inter 1s
listen machine-config-server-22623 
  bind *:22623
  mode tcp
  server bootstrap bootstrap.ocp4.ocp.icu:22623 check inter 1s backup 
  server master01 master01.ocp4.ocp.icu:22623 check inter 1s
  server master02 master02.ocp4.ocp.icu:22623 check inter 1s
  server master03 master03.ocp4.ocp.icu:22623 check inter 1s
listen ingress-router-443 
  bind *:443
  mode tcp
  balance source
  server worker01 worker01.ocp4.ocp.icu:443 check inter 1s
  server worker02 worker02.ocp4.ocp.icu:443 check inter 1s
listen ingress-router-80 
  bind *:80
  mode tcp
  balance source
  server worker01 worker01.ocp4.ocp.icu:80 check inter 1s
  server worker02 worker02.ocp4.ocp.icu:80 check inter 1s

启动 Haproxy:

[root@support ~]# systemctl enable --now haproxy

访问 support.ocp.icu:9000 验证状态,状态都是 down ,因为后端还没有部署服务,在后续阶段部署完后端服务后,状态页面将是 up 的:

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

滚动至顶部