Openshift 4.4 静态 IP 离线安装系列:初始安装

Openshift 4.4 静态 IP 离线安装系列:初始安装

上篇文章准备了离线安装 OCP 所需要的离线资源,包括安装镜像、所有样例 Image Stream 和 OperatorHub 中的所有 RedHat Operators。本文就开始正式安装 OCP(Openshift Container Platform) 集群,包括 DNS 解析、负载均衡配置、ignition 配置文件生成和集群部署。

OCP 安装期间需要用到多个文件:安装配置文件、Kubernetes 部署清单、Ignition 配置文件(包含了 machine types)。安装配置文件将被转换为 Kubernetes 部署清单,然后将清单包装到 Ignition 配置文件中。 安装程序使用这些 Ignition 配置文件来创建 Openshift 集群。运行安装程序时,所有原始安装配置文件都会修改,因此在安装之前应该先备份文件。

1. 安装过程

在安装 OCP 时,我们需要有一台引导主机(Bootstrap)。这个主机可以访问所有的 OCP 节点。引导主机启动一个临时控制平面,它启动 OCP 集群的其余部分然后被销毁。引导主机使用 Ignition 配置文件进行集群安装引导,该文件描述了如何创建 OCP 集群。安装程序生成的 Ignition 配置文件包含 24 小时后过期的证书,所以必须在证书过期之前完成集群安装。

引导集群安装包括如下步骤:

  • 引导主机启动并开始托管 Master 节点启动所需的资源。
  • Master 节点从引导主机远程获取资源并完成引导。
  • Master 节点通过引导主机构建 Etcd 集群。
  • 引导主机使用新的 Etcd 集群启动临时 Kubernetes 控制平面。
  • 临时控制平面在 Master 节点启动生成控制平面。
  • 临时控制平面关闭并将控制权传递给生产控制平面。
  • 引导主机将 OCP 组件注入生成控制平面。
  • 安装程序关闭引导主机。

引导安装过程完成以后,OCP 集群部署完毕。然后集群开始下载并配置日常操作所需的其余组件,包括创建计算节点、通过 Operator 安装其他服务等。

创建引导主机、控制平面和计算节点

2. 准备服务器资源

服务器规划如下:

  • 三个控制平面节点,安装 Etcd、控制平面组件和 Infras 基础组件。
  • 两个计算节点,运行实际负载。
  • 一个引导主机,执行安装任务,集群部署完成后可删除。
  • 一个基础节点,用于准备上节提到的离线资源,同时用来部署 DNS 和负载均衡。
  • 一个镜像节点,用来部署私有镜像仓库 Quay
主机类型 操作系统 Hostname vCPU 内存 存储 IP FQDN
镜像节点 RHEL 7.6 registry 4 8GB 150GB 192.168.57.70 registry.openshift4.example.com
基础节点 RHEL 7.6 bastion 4 16GB 120GB 192.168.57.60 bastion.openshift4.example.com
引导主机 RHCOS bootstrap 4 16GB 120GB 192.168.57.61 bootstrap.openshift4.example.com
控制平面 RHCOS master1 4 16GB 120GB 192.168.57.62 master1.openshift4.example.com
控制平面 RHCOS master2 4 16GB 120GB 192.168.57.63 master2.openshift4.example.com
控制平面 RHCOS master3 4 16GB 120GB 192.168.57.64 master3.openshift4.example.com
计算节点 RHCOS 或 RHEL 7.6 worker1 2 8GB 120GB 192.168.57.65 worker1.openshift4.example.com
计算节点 RHCOS 或 RHEL 7.6 worker2 2 8GB 120GB 192.168.57.66 worke2.openshift4.example.com

3. 防火墙配置

接下来看一下每个节点的端口号分配。

所有节点(计算节点和控制平面)之间需要开放的端口:

协议 端口 作用
ICMP N/A 测试网络连通性
TCP 9000-9999 节点的服务端口,包括 node exporter 使用的 9100-9101 端口和 Cluster Version Operator 使用的 9099 端口
  10250-10259 Kubernetes 预留的默认端口
  10256 openshift-sdn
UDP 4789 VXLAN 协议或 GENEVE 协议的通信端口
  6081 VXLAN 协议或 GENEVE 协议的通信端口
  9000-9999 节点的服务端口,包括 node exporter 使用的 9100-9101 端口
  30000-32767 Kubernetes NodePort

控制平面需要向其他节点开放的端口:

协议 端口 作用
TCP 2379-2380 Etcd 服务端口
  6443 Kubernetes API

除此之外,还要配置两个四层负载均衡器,一个用来暴露集群 API,一个用来暴露 Ingress:

端口 作用 内部 外部 描述
6443 引导主机和控制平面使用。在引导主机初始化集群控制平面后,需从负载均衡器中手动删除引导主机 x x Kubernetes API server
22623 引导主机和控制平面使用。在引导主机初始化集群控制平面后,需从负载均衡器中手动删除引导主机   x Machine Config server
443 Ingress Controller 或 Router 使用 x x HTTPS 流量
80 Ingress Controller 或 Router 使用 x x HTTP 流量

4. 配置 DNS

按照官方文档,使用 UPI 基础架构的 OCP 集群需要以下的 DNS 记录。在每条记录中,<cluster_name> 是集群名称,<base_domain> 是在 install-config.yaml 文件中指定的集群基本域,如下表所示:

组件 DNS记录 描述
Kubernetes API api.<cluster_name>.<base_domain>. 此 DNS 记录必须指向控制平面节点的负载均衡器。此记录必须可由集群外部的客户端和集群中的所有节点解析。
  api-int.<cluster_name>.<base_domain>. 此 DNS 记录必须指向控制平面节点的负载均衡器。此记录必须可由集群外部的客户端和集群中的所有节点解析。
Routes *.apps.<cluster_name>.<base_domain>. DNS 通配符记录,指向负载均衡器。这个负载均衡器的后端是 Ingress router 所在的节点,默认是计算节点。此记录必须可由集群外部的客户端和集群中的所有节点解析。
etcd etcd-<index>.<cluster_name>.<base_domain>. OCP 要求每个 etcd 实例的 DNS 记录指向运行实例的控制平面节点。etcd 实例由 值区分,它们以 0 开头,以 n-1 结束,其中 n 是集群中控制平面节点的数量。集群中的所有节点必须都可以解析此记录。
  _etcd-server-ssl._tcp.<cluster_name>.<base_domain>. 因为 etcd 使用端口 2380 对外服务,因此需要建立对应每台 etcd 节点的 SRV DNS 记录,优先级 0,权重 10 和端口 2380

DNS 服务的部署方法由很多种,我当然推荐使用 CoreDNS,毕竟云原生标配。由于这里需要添加 SRV 记录,所以需要 CoreDNS 结合 etcd 插件使用。以下所有操作在基础节点上执行。

首先通过 yum 安装并启动 etcd:

$ yum install -y etcd
$ systemctl enable etcd --now复制代码

然后下载 CoreDNS 二进制文件:

$ wget https://github.com/coredns/coredns/releases/download/v1.6.9/coredns_1.6.9_linux_amd64.tgz
$ tar zxvf coredns_1.6.9_linux_amd64.tgz
$ mv coredns /usr/local/bin复制代码

创建 Systemd Unit 文件:

$ cat > /etc/systemd/system/coredns.service <<EOF
[Unit]
Description=CoreDNS DNS server
Documentation=https://coredns.io
After=network.target

[Service]
PermissionsStartOnly=true
LimitNOFILE=1048576
LimitNPROC=512
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
User=coredns
WorkingDirectory=~
ExecStart=/usr/local/bin/coredns -conf=/etc/coredns/Corefile
ExecReload=/bin/kill -SIGUSR1 $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF复制代码

新建 coredns 用户:

$ useradd coredns -s /sbin/nologin复制代码

新建 CoreDNS 配置文件:

$ cat > /etc/coredns/Corefile <<EOF
.:53 {  # 监听 TCP 和 UDP 的 53 端口
    template IN A apps.openshift4.example.com {
    match .*apps\.openshift4\.example\.com # 匹配请求 DNS 名称的正则表达式
    answer "{
  { .Name }} 60 IN A 192.168.57.60" # DNS 应答
    fallthrough
    }
    etcd {   # 配置启用 etcd 插件,后面可以指定域名,例如 etcd test.com {
        path /skydns # etcd 里面的路径 默认为 /skydns,以后所有的 dns 记录都存储在该路径下
        endpoint http://localhost:2379 # etcd 访问地址,多个空格分开
        fallthrough # 如果区域匹配但不能生成记录,则将请求传递给下一个插件
        # tls CERT KEY CACERT # 可选参数,etcd 认证证书设置
    }
    prometheus  # 监控插件
    cache 160
    loadbalance   # 负载均衡,开启 DNS 记录轮询策略
    forward . 192.168.57.1
    log # 打印日志
}
EOF复制代码

其中 template 插件用来实现泛域名解析。

启动 CoreDNS 并设置开机自启:

$ systemctl enable coredns --now复制代码

验证泛域名解析:

$ dig +short apps.openshift4.example.com @127.0.0.1
192.168.57.60

$ dig +short x.apps.openshift4.example.com @127.0.0.1
192.168.57.60复制代码

添加其余 DNS 记录:

$ alias etcdctlv3='ETCDCTL_API=3 etcdctl'
$ etcdctlv3 put /skydns/com/example/openshift4/api '{"host":"192.168.57.60","ttl":60}'
$ etcdctlv3 put /skydns/com/example/openshift4/api-int &#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青年夏日科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值