目录

Openshift4.5.6的安装参考指南

UPI方式安装Openshift4.5.6

Openshift4.5.6的安装参考指南


[TOC]

1.前言

整个Openshift4.5的安装过程相对痛苦,遇到了各种问题。

从最早Openshift4.3的单Master节点安装成功,到多Master节点的不顺,再到直接死磕离线4.5的成功。

一路走来,整个安装过程需要部署的服务和配置较多,所以对于排错的干扰因子较多,所以难以排查。

最终坚持下来,靠着三个关键词。信心、细心、耐心!

特别注意的几点如下:

1、Openshift 4安装本身没有特别难点。无非就是点火配置和各项配套的服务。而点火配置本身没什么复杂,按照模板copy即可。要有绝对的信心。

2、HTTP服务是用来给COREOS提供HTTP服务下载点火配置用。Openshift各节点直接是通过域名互相访问,HTTP和DNS的服务软件选择很多,前者可以用NGINX、Httpd,后者可以用CornDNS或者Named等均可。或者统一用Dnsmsqd软件也可以。

3、所谓Support节点、Bastion节点,其本质都是在安装阶段部署一台工具机,提供前述第二条描述中的各项服务用于后续安装,当安装结束后,请保存安装过程中生产的SSH秘钥文件以及kubecongifg,否则后续无法通过SSh来对Master和Worker节点进行排查以及oc命令的正常执行。工具机本完成安装阶段使命后,后续就是充当堡垒机功能方便后续管理。

4、整个安装部署阶段其实可以只需要提前安装一台操作系统,用于承担工具机功能,注意COREOS操作系统是不用提前安装的。当然也可以拆分成两台虚拟机或者实体机,我是将NTP、DNS和负载均衡等作为企业内部公用组件单独部署在一台虚拟机上对外提供包括且不限于Openshift使用的统一服务,其他诸如HTTP、临时镜像文件都部署在工具机上,工具机在部署完毕后转换为堡垒机保留。

5、负载均衡主要是用于提供多个Master以及多个Worker流量入口用,如果手头上硬件资源足够建议直接采用3Master节点的高可用方案,单Master的部署可以节约大量时间,在前期试验阶段可以采用,生产环境强烈建议高可用方案。

6、点火配置是YAML文件格式,因此务必按照YAML文件的要求进行编制,反复检查。短横号以及证书前预留的空格个数千万不要搞错,YAML文件主要涉及镜像仓库的访问Pull Secret、Master和Worker的SSH私钥,镜像仓库的证书和资源访问信息。逻辑图详见后续章节。

7、点火配置中的POD网络不要与现有网络网段冲突。当然172.30的网段一般网络规划中不会采用,但谨慎为上。

8、镜像仓库是为在安装过程中COREOS提供镜像,可以选择的软件包括docker-distribution、Quay均可,如果全部部署在工具机上,注意端口冲突,一般可以按照网上常用的5000端口。

9、DNS、HTTP、负载均衡、镜像仓库、metal文件、点火配置YAML文件等各种配置项,均需要通过crul命令或者systemctl status进行验证,确保COREOS在安装过程中能够正常运行,将后续出问题排错的精力集中在核心环节,这部分需要绝对的细心。

10、机器配置要求请按照官方最小要求执行到位,特别是Bootstrap和Master至少都是4核16G、120G硬盘,否则遇到不可预料问题(例如官网指出的OOM)从而无法排查。

11、Bootstrap的启动相对Master的部署完成相对较快,但是Master的节点各POD启动到状态为True再到Bootstrap再到能够Safe Remove,整个过程耗时近20-30分钟,特别是在虚拟机环境以及3个Master节点的部署环境下,集群最终的部署完成时间近30-40分钟,要有足够的耐心。

12、通过SSH登录到Bootstrap或者是Master节点,整个安装过程系统会不断提示各种错误,如果是正常情况下,均为各种服务所依赖的POD服务没有完成部署而引起的报错,请耐心等待集群各服务正常运行。过程中可通过oc get clusteroperators查看。

13、关于时间配置,网上的很多说明没有说到本质。首先是镜像仓库服务所在机器是需要校时的,但无所谓时区。只有校时正确,通过openssl产生的证书的可用时间才是正确的。具体表现为 Validity字段中Not Before和Not After不会错误。证书内时间是GMT时间,COREOS的内部时间是UTC时间,前者是格林威治时间,后者是标准时间,GMT时间和UTC基本是重合的,所以没有问题。如果Master和Worker节点可以访问公网,安装过程中各节点内部有自动校时服务,自动会去redhat ntp服务器上校时。如果Master和Worker节点处于内网环境无法访问公网,请确保他们所在裸机或者虚拟机的时间被正确校时,或者采用提前部署YAML文件到点火文件中。

14、在工具机的操作系统选择上,可以选择CENTOS或者RHEL,前者的YUM源更好解决,推荐工具机可以采用。部署完成后将SSH秘钥和kubeconfig迁移至堡垒机,建议堡垒机采用RHEL,RHEL安全性更高。如果直接采用RHEL作为工具机也是可以的,可以采用订阅方式或者离线YUM源方式解决各种前述服务软件的安装问题,本文不对YUM离线下载进行阐述。

15、所谓的24小时内必须将集群部署完毕,实际上是openshift-install create ignition-configs这个命令会创建只有24小时有效期的证书文件,详见auth隐藏目录。如果不能在24小时将集群部署完毕,请删除产生的auth授权文件,重新从openshift-install create manifests这步命令开始再来即可,当然前提是你将install-conffig.yaml文件妥善保存。

16、在离线环境使用UPI(UserProvisioned Infrastructure)方式安装OpenShift,相对于在联网环境采用IPI(Installer Provisioned Infrastructure)完全自动安装方式OpenShift,的确要相对复杂的多,比如要设置离线镜像仓库、将需要的镜像上传到离线镜像仓库、定制CoreOS的点火文件等。

17、在标准离线环境的OpenShift安装完成后,系统是没有OperatorHub的,同时,系统自带的ImageStream也下载不了公网环境的镜像。这个时候,你既不能创建Operator,也不能采用服务模板(Catalog)方式部署应用。

【2020年10月05 by 张诚】


2.机器配置要求

Bootstrap和Master至少都是4核16G、120G硬盘,且配置必须一样,否则会出现label selecter出错

另外内存都是至少16G,否则会出现OOM问题,哪怕装好后,重启还是容易遇到OOM问题。

引述官方文档

The bootstrap node is attempting to join the masters to it’s etcd cluster. The masters will start etcd as part of their bootstrapping process and will join the cluster when ready.

Please, ensure that control planes have at least 16 GB memory. Configuring control planes with less than 16 GB, may cause OOM issues. These memory issues may cause etcd to fail, even after etcd cluster is up.

3.下载 OCP 核心镜像

在23章节中,增加了关于Openshift镜像仓库的进一步解释。

生产环境下,先将OCP核心镜像下载到网络隔离区,然后再将下载的镜像导入到本地镜像仓库。

获取下载镜像所需密钥

使用订阅账号登陆如下网站 https://cloud.redhat.com/openshift/install

image-20200923092835356

点击Download pull secret,并将pull-secret.txt存放在/data/OCP-Install/ocp/secret/pull-secret.txt处。

【pull-secret.txt不能直接使用,需要用jq命令,jq命令请提前用yum安装】

1
2
3
[root@support data]# jq . /data/OCP-Install/ocp/secret/pull-secret.txt > /data/OCP-Install/ocp/secret/redhat-secret.json
# 验证
[root@support data]# jq . /data/OCP-Install/ocp/secret/pull-secret.txt

【验证待下载的镜像信息,后续版本升级后,可改变命令中版本号】

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#这里只是预先验证readhat上的版本信息,并不是实际下载,也可跳过这步
[root@localhost OCP-4.5.6]# oc adm release info "quay.io/openshift-release-dev/ocp-release:4.5.6-x86_64"
Name:      4.5.6
Digest:    sha256:0147ab7622969c1cde71e8e5eb8796e8245137fdbf3a5cae63017189a9060f86
Created:   2020-08-12T06:02:11Z
OS/Arch:   linux/amd64
Manifests: 419

Pull From: quay.io/openshift-release-dev/ocp-release@sha256:0147ab7622969c1cde71e8e5eb8796e8245137fdbf3a5cae63017189a9060f86

Release Metadata:
  Version:  4.5.6
  Upgrades: 4.4.11, 4.4.12, 4.4.13, 4.4.14, 4.4.15, 4.4.16, 4.4.17, 4.5.1, 4.5.2, 4.5.3, 4.5.4, 4.5.5
  Metadata:
    description:
  Metadata:
    url: https://access.redhat.com/errata/RHBA-2020:3330

Component Versions:
  kubernetes 1.18.3
  machine-os 45.82.202008101249-0 Red Hat Enterprise Linux CoreOS

Images:
  NAME                               DIGEST
  aws-machine-controllers            sha256:0062890685255cc7c4da028f1f511231b5d94f9628f451e6f17f00a6c76c3481
  aws-pod-identity-webhook           sha256:70676c3d7df5a33b84fcfee51ad3895388d959f6ad6431513828853a72bac590
1
mkdir -p /data/OCP-4.5.6/ocp-image/ocp-image-4.5.6
1
2
3
4
# 正式从redhat网站上下载OCP核心镜像
oc adm release mirror -a /data/OCP-Install/ocp/secret/redhat-secret.json --from=quay.io/openshift-release-dev/ocp-release:4.5.6-x86_64 --to-dir=/data/OCP-4.5.6/ocp-image/ocp-image-4.5.6

#注意这里下载后,ocp-image-4.5.6出现的是v2目录,然后是openshift目录,然后是release目录。

【————————–相关参数解释——————————————————————————————–

启动镜像下载,就是将镜像文件下载下来利用。

-a /data/OCP-4.5.6/ocp/secret/redhat-secret.json就是利用前面序列化pull secret的免密登录文件,进行下载

–from=quay.io/openshift-release-dev/ocp-release:4.5.6-x86_64就是具体下载的镜像文件

–to-dir就是具体要存放的文件目录

———————————————————————————————————————————————】

【下载完成后系统返回如下信息】

1
2
3
4
5
6
Success
Update image:  openshift/release:4.5.6

To upload local images to a registry, run:

oc image mirror --from-dir=/data/OCP-4.5.6/ocp-image/ocp-image-4.5.6 'file://openshift/release:4.5.6*' REGISTRY/REPOSITORY

【这里注意,返回提示了一个将本地镜像上传到镜像仓库的命令,后面会用到,这里暂时不用】

1
oc image mirror --from-dir=/data/OCP-4.5.6/ocp-image/ocp-image-4.5.6 -a /data/OCP-4.5.6/ocp/secret/registry-secret.json file://openshift/release:4.5.6* registry.cj.io:5000/ocp4/openshift4 

【验证,检查已下载镜像的有效性】

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@support ~]# oc adm release info --dir=/data/OCP-4.5.6/ocp-image/ocp-image-4.5.6 file://openshift/release:4.5.6
Name:      4.5.6
Digest:    sha256:0147ab7622969c1cde71e8e5eb8796e8245137fdbf3a5cae63017189a9060f86
Created:   2020-08-12T06:02:11Z
OS/Arch:   linux/amd64
Manifests: 419

Pull From: file://openshift/release@sha256:0147ab7622969c1cde71e8e5eb8796e8245137fdbf3a5cae63017189a9060f86

Release Metadata:
  Version:  4.5.6
  Upgrades: 4.4.11, 4.4.12, 4.4.13, 4.4.14, 4.4.15, 4.4.16, 4.4.17, 4.5.1, 4.5.2, 4.5.3, 4.5.4, 4.5.5
  Metadata:
    description:
  Metadata:
    url: https://access.redhat.com/errata/RHBA-2020:3330

Component Versions:
  Kubernetes 1.18.3
  Machine Os 45.82.202008101249-0

Images:
  NAME                                DIGEST
  aws-machine-controllers             sha256:0062890685255cc7c4da028f1f511231b5d94f9628f451e6f17f00a6c76c3481
  aws-pod-identity-webhook            sha256:70676c3d7df5a33b84fcfee51ad3895388d959f6ad6431513828853a72bac590
  azure-machine-controllers           sha256:0ddd17fb2ecd4988bfab90653df9c9c65d09dfb880a993c99d978b003c53f395 

【完成下载后就可以进行压缩打包方便用于后续在其他离线环境使用】

1
tar -zcvf /data/OCP-4.5.6/ocp-image/ocp-image-4.5.6.tar /data/OCP-4.5.6/ocp-image/ocp-image-4.5.6

4.Support节点开始配置

可以采用CENTOS或者RHEL。后者需要开启账户订阅或者直接离线YUM方式安装响应的软件。

1
2
# 设置机器的域名(非必选项)
hostnamectl set-hostname support.cj.io

5.关闭防火墙

一般情况下,工具机为临时环境,可以采用不开防火墙的环境进行,但后续堡垒机必须打开防火墙。

如果打开防火墙需开启以下端口

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
firewall-cmd --zone=public --add-port=53/udp --permanent
firewall-cmd --zone=public --add-port=53/tcp --permanent
firewall-cmd --zone=public --add-port=6443/tcp --permanent
firewall-cmd --zone=public --add-port=22623/tcp --permanent
firewall-cmd --zone=public --add-port=22623/udp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all

或者直接关闭防火墙

1
2
systemctl stop firewalld
systemctl disable firewalld

6.关闭SELINUX

1
2
sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
reboot

7.配置HTTP服务

【安装Apache HTTP服务,并将http的端口修改为8080】

【这里HTTP服务将80端口让给了同一台机器的负载均衡服务,如果负载均衡服务不在本机上,http的端口不需要改】

如果http服务的80端口不改的话,后续点火配置的url记得修改端口。

1
2
3
4
yum -y install httpd
systemctl enable httpd --now
# 将监听端口更改为8080
sed -i -e 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf

【验证】

1
2
[root@support yum]# cat /etc/httpd/conf/httpd.conf |grep "Listen 8080"
Listen 8080

注意:必须将 yum 目录所属首级目录/data以及所有子目录权限设为 705

1
chmod -R 705 /data

【HTTP服务涉及两个目录,即COREOS安装过程中,需要通过HTTP下载的ign点火配置及metal.raw.gz的coreos文件】

【可通过下图进行前后关联学习】

image-20201005092543788

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 配置rhcos-iso的下载目录
cat << EOF > /etc/httpd/conf.d/rhcos.conf 
Alias /rhcos-iso "/data/boot-files/rhcos-iso"
<Directory "/data/boot-files/rhcos-iso">
  Options +Indexes +FollowSymLinks
  Require all granted
</Directory>
<Location /rhcos >
  SetHandler None
</Location> 
EOF
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 配置后续点火文件的下载目录
cat << EOF > /etc/httpd/conf.d/ignition.conf
Alias /ignition "/data/boot-files/ignition/openshift4/../"
<Directory "/data/boot-files/ignition/openshift4/../">
  Options +Indexes +FollowSymLinks
  Require all granted
</Directory>
<Location /ignition>
  SetHandler None
</Location>
EOF

systemctl restart httpd

8.配置DNS

【安装 BIND 服务】

1
2
yum -y install bind bind-utils
systemctl enable named --now

【设置 BIND 配置文件,先备份原始 BIND 配置文件,然后修改 BIND 配置,并重新加载配置】

1
2
3
4
cp /etc/named.conf{,_bak}
sed -i -e "s/listen-on port.*/listen-on port 53 { any; };/" /etc/named.conf
sed -i -e "s/allow-query.*/allow-query { any; };/" /etc/named.conf
rndc reload
1
2
3
4
# 验证
[root@localhost data]# grep -E 'listen-on port|allow-query' /etc/named.conf
        listen-on port 53 { any; };
        allow-query { any; };

如果有外网的解析需求,则请确保 DNS 服务器可以访问外网,并添加如下配置:

1
2
3
4
sed -i '/recursion yes;/a forward first;forwarders { 114.114.114.114; 8.8.8.8; };' /etc/named.conf 
sed -i -e "s/dnssec-enable.*/dnssec-enable no;/" /etc/named.conf
sed -i -e "s/dnssec-validation.*/dnssec-validation no;/" /etc/named.conf
rndc reload

【这里的负载均衡的配置请注意格式和内容,细微差别均有可能产生启动错误。】

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
cat >> /etc/named.rfc1912.zones << EOF

zone "cj.io" IN {
        type master;
        file "cj.io.zone";
        allow-transfer { any; };
};

zone "openshift4.cj.io" IN {
        type master;
        file "openshift4.cj.io.zone";
        allow-transfer { any; };
};

zone "18.172.in-addr.arpa" IN {
        type master;
        file "18.172.in-addr.arpa.zone";
        allow-transfer { any; };
};
EOF
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
cat > /var/named/cj.io.zone << EOF
\$ORIGIN cj.io.
\$TTL 1D
@           IN SOA    cj.io.     admin.cj.io. (
                                           0     ; serial
                                           1D    ; refresh
                                           1H    ; retry
                                           1W    ; expire
                                           3H )   ; minimum
@           IN NS                     dns.cj.io.
support     IN A                      172.18.1.2
dns         IN A                      172.18.1.2
ntp         IN A                      172.18.1.2
yum         IN A                      172.18.1.2  
registry    IN A                      172.18.1.2
nfs         IN A                      172.18.1.2

EOF
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
cat > /var/named/openshift4.cj.io.zone << EOF
\$ORIGIN openshift4.cj.io.
\$TTL 1D
@           IN SOA openshift4.cj.io.       admin.openshift4.cj.io. (
                                           0     ; serial
                                           1D    ; refresh
                                           1H    ; retry
                                           1W    ; expire
                                           3H )  ; minimum

@           IN  NS                        dns.cj.io.
              
dns.cj.io                IN A      172.18.1.2
lb                       IN A      172.18.1.2
api                      IN A      172.18.1.2   
api-int                  IN A      172.18.1.2
*.apps                   IN A      172.18.1.2

bootstrap                IN A      172.18.1.43

master1                 IN  A      172.18.1.44
master2                 IN  A      172.18.1.45
master3                 IN  A      172.18.1.46
etcd-0                  IN A       172.18.1.44
etcd-1                  IN A       172.18.1.45
etcd-2                  IN A       172.18.1.46
worker1                 IN A       172.18.1.47
worker2                 IN A       172.18.1.48
worker3                 IN A       172.18.1.49

_etcd-server-ssl._tcp.openshift4.cj.io. 8640 IN SRV 0 10 2380 etcd-0.openshift4.cj.io.
_etcd-server-ssl._tcp.openshift4.cj.io. 8640 IN SRV 0 10 2380 etcd-1.openshift4.cj.io.
_etcd-server-ssl._tcp.openshift4.cj.io. 8640 IN SRV 0 10 2380 etcd-2.openshift4.cj.io.
EOF
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
cat > /var/named/18.172.in-addr.arpa.zone << EOF 
\$TTL 1D 

@ IN SOA cj.io.   admin.cj.io. (
                             0      ; serial
                             1D     ; refresh
                             1H     ; retry
                             1W     ; expire
                             3H )   ; minimum

@                      IN  NS    dns.cj.io.

2.1.18.172.in-addr.arpa.     IN PTR        support.cj.io.
2.1.18.172.in-addr.arpa.     IN PTR        dns.cj.io.
2.1.18.172.in-addr.arpa.     IN PTR        ntp.cj.io.
2.1.18.172.in-addr.arpa.     IN PTR        yum.cj.io.
2.1.18.172.in-addr.arpa.     IN PTR        registry.cj.io.
2.1.18.172.in-addr.arpa.     IN PTR        lb.openshift4.cj.io.
2.1.18.172.in-addr.arpa.     IN PTR        api.openshift4.cj.io.
2.1.18.172.in-addr.arpa.     IN PTR        api-int.openshift4.cj.io.
43.1.18.172.in-addr.arpa.    IN PTR        bootstrap.openshift4.cj.io.
44.1.18.172.in-addr.arpa.    IN PTR        master1.openshift4.cj.io.
45.1.18.172.in-addr.arpa.    IN PTR        master2.openshift4.cj.io.
46.1.18.172.in-addr.arpa.    IN PTR        master3.openshift4.cj.io.
47.1.18.172.in-addr.arpa.    IN PTR        worker1.openshift4.cj.io.
48.1.18.172.in-addr.arpa.    IN PTR        worker2.openshift4.cj.io.
49.1.18.172.in-addr.arpa.    IN PTR        worker3.openshift4.cj.io.
EOF

【启用】

1
2
3
systemctl restart named
systemctl status named
rndc reload

【验证,根据实际情况进行验证】

【可全部拷贝至命令行,然后通过观察返回结果进行验证】

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
dig dns.cj.io +short
dig yum.cj.io +short
dig registry.cj.io +short
dig bootstrap.openshift4.cj.io +short
dig api.openshift4.cj.io +short
dig *.apps.openshift4.cj.io +short
dig api-int.openshift4.cj.io +short
dig master1.openshift4.cj.io +short
dig master2.openshift4.cj.io +short
dig master3.openshift4.cj.io +short
dig worker1.openshift4.cj.io +short
dig worker2.openshift4.cj.io +short
dig worker3.openshift4.cj.io +short

[root@api-int ~]# dig _etcd-server-ssl._tcp.openshift4.cj.io SRV +short
0 10 2380 etcd-0.openshift4.cj.io.
0 10 2380 etcd-1.openshift4.cj.io.
0 10 2380 etcd-2.openshift4.cj.io.

# 反向解析
[root@api-int ~]# dig -x 172.18.1.2 +short
api-int.openshift4.cj.io.
registry.cj.io.
dns.cj.io.
ntp.cj.io.
lb.openshift4.cj.io.
yum.cj.io.
api.openshift4.cj.io.

9.配置安装NTP

引用前言内容

关于时间配置,网上的很多说明没有说到本质。首先是镜像仓库服务所在机器是需要校时的,但无所谓时区。只有校时正确,通过openssl产生的证书的可用时间才是正确的。具体表现为 Validity字段中Not Before和Not After不会错误。证书内时间是GMT时间,COREOS的内部时间是UTC时间,前者是格林威治时间,后者是标准时间,GMT时间和UTC基本是重合的,所以没有问题。如果Master和Worker节点可以访问公网,安装过程中各节点内部有自动校时服务,自动会去redhat ntp服务器上校时。如果如果Master和Worker节点处于内网环境无法访问公网,请确保他们所在裸机或者虚拟机的时间被正确校时。

1
2
3
4
5
6
# 设置时区
timedatectl set-timezone Asia/Shanghai
# 安装
yum -y install chrony
systemctl enable chronyd --now
systemctl status chronyd
1
2
3
4
5
6
7
8
9
# 建议备份
cp /etc/chrony.conf{,.bak}

# 工具机能够访问公网,采用cn.pool.ntp.org作为NTP服务器
cat >> /etc/chrony.conf << EOF
server cn.pool.ntp.org iburst
EOF

systemctl restart chronyd

【验证】

1
2
3
4
5
6
# 如果发现无法正常同步时间,请查看工具机的网络环境是否可以访问公网。
ps -auxw |grep chrony
ss -lnup |grep chronyd
chronyc tracking
chronyc -a makestep
chronyc sources -v

10.安装OC

【先安装oc,否则无法使用镜像仓库命令】

【oc和install的版本号要务必大于后续安装镜像文件版本号】

1
2
# 下载地址,可以其他版本,我这里选择下载的是4.5.11
https://mirror.openshift.com/pub/openshift-v4/clients/ocp/4.5.6/openshift-client-linux-4.5.11.tar.gz
1
2
3
4
5
6
7
8
9
tar -xzf /data/OCP-Install/ocp/ocp-client/openshift-client-linux-4.5.6.tar.gz -C /usr/local/sbin/

# 验证版本号
[root@localhost ocp-client]# oc version
Client Version: 4.5.11
Error from server (InternalError): an error on the server ("") has prevented the request from succeeding (get clusteroperators.config.openshift.io openshift-apiserver)

# 如果报错,就说明之前装过Openshift,请先删除配置
[root@localhost .kube]# rm -rf ~/.kube/

11.安装Openshift-install

1
2
# 下载地址,可以其他版本,我这里选择下载的是4.5.11
https://mirror.openshift.com/pub/openshift-v4/clients/ocp/4.5.6/openshift-install-linux-4.5.11.tar.gz
1
2
3
4
5
6
7
tar -xzf /data/OCP-Install/ocp/ocp-installer/openshift-install-linux-4.5.6.tar.gz -C /usr/local/sbin/

# 验证
[root@support ~]$openshift-install version
openshift-install 4.5.6
built from commit baccbcfbbeed464b45a33f00ced17dfe8134fd7b
release image quay.io/openshift-release-dev/ocp-release@sha256:0147ab7622969c1cde71e8e5eb8796e8245137fdbf3a5cae63017189a9060f86

12.配置镜像仓库

【设置证书,其中建议-days设置成3650,即10年,足够内网使用】

【镜像仓库是registry.cj.io,注意后续端口号,5000非必须】

1
2
3
mkdir -p /data/registry/{auth,certs,data}

openssl req -newkey rsa:4096 -nodes -sha256 -keyout /data/registry/certs/registry.key -x509 -days 3650 -out /data/registry/certs/registry.crt -subj "/C=CN/ST=BEIJING/L=BJ/O=REDHAT/OU=IT/CN=registry.cj.io/emailAddress=admin@cj.io"

【返回】

1
2
3
4
5
6
Generating a 4096 bit RSA private key
....................................................................++
.......................................++

writing new private key to '/data/registry/certs/registry.key'
-----

【这里千万别忘记,注意这里面的Before和After就是10年】

【注意这里的时间,就是GMT时间,请确保时间准确,如果后续Master节点或者Bootstrap节点安装过程中,报X.509时间不对,需要验证这里时间,大概率就是这里的Not Before已经在节点机的时间后了】

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[root@localhost ~]# openssl x509 -in /data/registry/certs/registry.crt -text | head -n 14
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            b1:3d:e8:eb:25:47:29:4b
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, ST=BEIJING, L=BJ, O=REDHAT, OU=IT, CN=registry.cj.io/emailAddress=admin@cj.io
        Validity
            Not Before: Sep 27 01:06:46 2020 GMT
            Not After : Sep 25 01:06:46 2030 GMT
        Subject: C=CN, ST=BEIJING, L=BJ, O=REDHAT, OU=IT, CN=registry.cj.io/emailAddress=admin@cj.io
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (4096 bit)

【安装 docker-distribution,如果采用RHEL需要解决YUM源问题】

1
yum -y install docker-distribution

【创建 Registry 认证凭据,允许用 openshift/redhat 登录,用户名openshift和密码redhat可以更改】

1
htpasswd -bBc /data/registry/auth/htpasswd openshift redhat

【创建 docker-distribution 配置文件,注意这里利用上面的生产的用户名和密码文件,还有5000端口的配置】

需要注意这里三个配置项:

1、rootdirectory: /data/registry/data:后续镜像文件均配置在此

2、path: /data/registry/auth/htpasswd就是后续利用podman

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cat << EOF > /etc/docker-distribution/registry/config.yml
version: 0.1
log:
  fields:
    service: registry
storage:
    cache:
      layerinfo: inmemory
    filesystem:
      rootdirectory: /data/registry/data
    delete:
      enabled: false
auth:
  htpasswd:
    realm: basic-realm
    path: /data/registry/auth/htpasswd
http:
    addr: 0.0.0.0:5000
    host: https://registry.cj.io:5000
    tls:
      certificate: /data/registry/certs/registry.crt
      key: /data/registry/certs/registry.key
EOF

【启动】

1
2
3
4
5
systemctl enable docker-distribution --now

# 查看镜像仓库运行状态
systemctl status docker-distribution
# 这里会返回四个info,不用管

【将证书导入本地,并更新】

1
2
3
4
# 注意/etc/pki/ca-trust/source/anchors/是系统默认CA证书存放目录,请不要更改否则后续更新证书命令无法达到效果
cp -f /data/registry/certs/registry.crt /etc/pki/ca-trust/source/anchors/
# update-ca-trust是更新系统的CA证书,
update-ca-trust

【验证,如果不行,多数是DNS没有配置】

1
2
# 后续的user和password可以自定义
curl -u openshift:redhat https://registry.cj.io:5000/v2/_catalog

【利用podman登录镜像,是为了生产免登陆的秘钥文件,即不需要再使用前述openshift/redhat 进行交互式登录,方便后续安装过程中各节点的镜像拉取】

1
podman login -u openshift -p redhat --authfile /data/OCP-4.3.18/ocp/secret/registry-secret registry.cj.io:5000

13.将OCP镜像导入镜像仓库

注意这里的5000端口,它是由/etc/docker-distribution/registry/config.yml定义的,而不采用默认的443端口,是因为后续部署负载均衡的443已经被其他占用。

1
2
3
4
5
6
# 如果采用离线安装,就是将之前下载打包的OCP镜像解压
tar -xvf /data/OCP-Install/ocp/ocp-image/ocp-image-4.5.6.tar -C /data/OCP-4.5.6/ocp-image


# 同目录生产了一个mirror_4.5.6文件夹
# -C change,制定到制定的文件夹下[相当于将ocp-image-4.5.6.tar去掉后面的tar,在-C的制定文件夹下,创建ocp-image-4.3.18或者ocp-image-4.5.6]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#注意事实上,/data/OCP-Install/ocp/ocp-image/mirror_4.5.6文件夹下是1个v2目录。关于v2目录,可以参考前述下载OCP核心镜像的相关知识点

#再次注意,这里registry-secret.json是访问本地镜像的秘钥,而redhat-secret.json是访问redhat镜像仓库的秘钥。


#4.5.6版本
oc image mirror -a /data/OCP-Install/ocp/secret/registry-secret.json --dir=/data/OCP-4.5.6/ocp-image/ocp-image-4.5.6 file://openshift/release:4.5.6* registry.cj.io:5000/ocp4/openshift4

#注意这里是从本地向镜像文件灌入,此时/ocp4/openshift4就有目录了,另外上述两个命令,其中--dir目录指向的,它的下一个目录就是v2,所以,你会发现后续curl命令,ocp4/openshift4就是仓库名(repositories),后续马上就是v2目录,就是这个道理。
# 可以看出来,file后面就是v2
[root@support manifests]$pwd
/data/OCP-4.5.6/ocp-image/ocp-image-4.5.6/v2/openshift/release/manifests

【验证】

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

[root@Suppport yum.repos.d]# curl -u openshift:redhat https://registry.cj.io:5000/v2/_catalog
{"repositories":["ocp4/openshift4"]}

#注意这里如果是4.5.6和4.3.18OCP镜像都导入的话,会显示213个文件。4.5.6版本是110个
[root@localhost ~]# curl -u openshift:redhat -s https://registry.cj.io:5000/v2/ocp4/openshift4/tags/list |jq -M '.["tags"][]' | wc -l
110


#这个命令会把包括4.5.6在内的所有的镜像都显示出来
curl -u openshift:redhat -s https://registry.cj.io:5000/v2/ocp4/openshift4/tags/list |jq -M '.["name"] + ":" + .["tags"][]'


# 4.5.6版本
[root@localhost ~]#oc adm release info -a /data/OCP-Install/ocp/secret/registry-secret.json registry.cj.io:5000/ocp4/openshift4:4.3.18 | grep -A 200 -i "Images"

## 继续验证以下步骤暂时不要操作
podman login -u openshift -p redhat registry.cj.io:5000
# 拉镜像进行验证
podman pull registry.cj.io:5000/ocp4/openshift4:4.5.6-etcd

[root@support mirror_4.3.18]# podman  images
REPOSITORY                            TAG          IMAGE ID       CREATED       SIZE
registry.cj.io:5000/ocp4/openshift4   4.5.6-etcd   d1eec47fd97e   7 weeks ago   326 MB

14.配置负载均衡

1
2
yum install -y haproxy
systemctl enable haproxy --now

下面负载均衡的配置,因为都采用了域名方式,所以不需要改动

只要关注master的副本数。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
# 这里因为配置了域名,所以可以直接创建,不需要使用ip地址

cat <<EOF > /etc/haproxy/haproxy.cfg
# Global settings
#---------------------------------------------------------------------
global
     maxconn   20000
     log  /dev/log local0 info
     chroot  /var/lib/haproxy
     pidfile /var/run/haproxy.pid
     user  haproxy
     group haproxy
     daemon

# turn on stats unix socket 
stats socket /var/lib/haproxy/stats

#--------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will 
# use if not designated in their block 
#--------------------------------------------------------------------
defaults 
     mode http 
     log global 
     option httplog 
     option dontlognull 
   # option http-server-close 
     option forwardfor except 127.0.0.0/8 
     option redispatch 
     retries 3 
     timeout http-request 10s 
     timeout queue 1m 
     timeout connect 10s 
     timeout client 300s
     timeout server 300s
     timeout http-keep-alive 10s 
     timeout check 10s 
     maxconn 20000

listen stats
     bind :9000
     mode http
     stats enable
     stats uri /

frontend openshift-api-server
     bind *:6443
     mode tcp
     option tcplog
     default_backend openshift-api-server

frontend machine-config-server
     bind *:22623
     mode tcp
     option tcplog
     default_backend machine-config-server

frontend ingress-http
     bind *:80
     mode tcp
     option tcplog
     default_backend ingress-http

frontend ingress-https
     bind *:443
     mode tcp
     option tcplog
     default_backend ingress-https

backend openshift-api-server
     balance source
     mode tcp
     server bootstrap bootstrap.openshift4.cj.io:6443 check
     server master1 master1.openshift4.cj.io:6443 check
     server master2 master2.openshift4.cj.io:6443 check
     server master3 master3.openshift4.cj.io:6443 check


backend machine-config-server
     balance source
     mode tcp
     server bootstrap bootstrap.openshift4.cj.io:22623 check
     server master1 master1.openshift4.cj.io:22623 check
     server master2 master2.openshift4.cj.io:22623 check
     server master3 master3.openshift4.cj.io:22623 check


backend ingress-http
     balance source
     mode tcp
     server worker1 worker1.openshift4.cj.io:80 check
     server worker2 worker2.openshift4.cj.io:80 check
     server worker3 worker3.openshift4.cj.io:80 check

backend ingress-https
     balance source
     mode tcp
     server worker1 worker1.openshift4.cj.io:443 check
     server worker2 worker2.openshift4.cj.io:443 check
     server worker3 worker3.openshift4.cj.io:443 check     
EOF

【启动】

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
systemctl restart haproxy

systemctl status haproxy

[root@Suppport yum.repos.d]# ss -lutnp | grep haproxy
LISTEN     0      128          *:9000        *:*                   users:(("haproxy",pid=21018,fd=5))
LISTEN     0      128          *:6443        *:*                   users:(("haproxy",pid=21018,fd=7))
LISTEN     0      128          *:80          *:*                   users:(("haproxy",pid=21018,fd=9))
LISTEN     0      128          *:443         *:*                   users:(("haproxy",pid=21018,fd=10))
LISTEN     0      128          *:22623       *:*                   users:(("haproxy",pid=21018,fd=8))

15.配置点火文件

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

安装配置文件——–»»»>——————Kubernetes 部署清单——–»»»>——————Ignition 配置文件

所谓的24小时内必须将集群部署完毕,实际上是openshift-install create ignition-configs这个命令会创建只有24小时有效期的证书文件,详见auth隐藏目录。如果不能在24小时将集群部署完毕,请删除产生的auth授权文件,重新从openshift-install create manifests这步命令开始再来即可,当然前提是你将install-conffig.yaml文件妥善保存。

【创建SSH秘钥,先要删除目录很重要,因为有隐藏文件,删除命令要带/,表示是删除目录】

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#先要删除文件,因为Openshift有隐藏文件,正好auth授权文件,24小时有效期
rm -rf /data/boot-files/ignition/openshift4/
mkdir -p /data/boot-files/ignition/openshift4/ssh-key

ssh-keygen -N '' -f /data/boot-files/ignition/openshift4/ssh-key/id_rsa

[root@Suppport rhcos-temp]# ll /data/boot-files/ignition/openshift4/ssh-key
total 8
-rw-------. 1 root root 1679 Oct  1 17:38 id_rsa
-rw-r--r--. 1 root root  400 Oct  1 17:38 id_rsa.pub

【涉及几个变量,单独提前设置下,必须设置】

1
2
PULL_SECRET=$(jq -c . /data/OCP-Install/ocp/secret/registry-secret.json)
SSH_PUB_STR=$(cat /data/boot-files/ignition/openshift4/ssh-key/id_rsa.pub)

【如果采用在线安装】

1
PULL_SECRET=$(jq -c . /data/OCP-4.5.6/ocp/secret/pull-secret.txt)

jq -c 参数是指将json压缩成一行文字

【REG_SECRET 是一个文件,是用来保存 podman 登录本地 docker registry 时所生成的 secret ,以便以后可免密登录。这个在前面配置镜像仓库中已说明。】

【创建点火文件,特别关注后续的镜像仓库地址、端口号】

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
cat > /data/boot-files/ignition/openshift4/install-config.yaml <<EOF
apiVersion: v1
baseDomain: cj.io
compute:
- hyperthreading: Enabled
  name: worker
  replicas: 0
controlPlane:
  hyperthreading: Enabled
  name: master
  replicas: 3
metadata:
  name: openshift4
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  networkType: OpenShiftSDN
  serviceNetwork:
  - 172.30.0.0/16
platform:
  none: {}
fips: false
pullSecret: '${PULL_SECRET}'
sshKey: '${SSH_PUB_STR}'
imageContentSources:
- mirrors:
  - registry.cj.io:5000/ocp4/openshift4
  source: quay.io/openshift-release-dev/ocp-release
- mirrors:
  - registry.cj.io:5000/ocp4/openshift4
  source: quay.io/openshift-release-dev/ocp-v4.0-art-dev
EOF

【这一步如果采用在线镜像可以略过】

【附加 Docker Registry 镜像库的证书到 install-config.yaml 文件】

【这里sed -i -e ’s/^/ /',最后两个斜杠之间2个空格,yaml文件对对齐方式非常讲究】

1
2
3
4
5
6
7
cp /etc/pki/ca-trust/source/anchors/registry.crt /data/boot-files/ignition/openshift4/

sed -i -e 's/^/  /' /data/boot-files/ignition/openshift4/registry.crt

echo "additionalTrustBundle: |" >> /data/boot-files/ignition/openshift4/install-config.yaml

cat /data/boot-files/ignition/openshift4/registry.crt >> /data/boot-files/ignition/openshift4/install-config.yaml

【验证,这里务必多检查几次点火文件】

1
cat /data/boot-files/ignition/openshift4/install-config.yaml

【备份点火文件,因为创建manifest文件后,会自动删除】

1
2
3
cp -f /data/boot-files/ignition/openshift4/install-config.yaml{,.bak}

ll /data/boot-files/ignition/openshift4

【创建 manifest 文件】

1
2
3
4
5
[root@localhost openshift4]# openshift-install create manifests --dir /data/boot-files/ignition/openshift4
INFO Consuming Install Config from target directory
WARNING Making control-plane schedulable by setting MastersSchedulable to true for Scheduler cluster settings 

tree /data/boot-files/ignition/openshift4/manifests/ /data/boot-files/ignition/openshift4/openshift/

【修改 mastersSchedulable,为了将master设置不调度pod】

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
sed -i 's/mastersSchedulable: true/mastersSchedulable: false/g' /data/boot-files/ignition/openshift4/manifests/cluster-scheduler-02-config.yml

# 查看mastersSchedulable是否设置成false
[root@localhost openshift4]# cat /data/boot-files/ignition/openshift4/manifests/cluster-scheduler-02-config.yml
apiVersion: config.openshift.io/v1
kind: Scheduler
metadata:
  creationTimestamp: null
  name: cluster
spec:
  mastersSchedulable: false
  policy:
    name: ""
status: {}

【配置COREOS的NTP服务,如果BOOTSTRAP、MASTER、WORKER节点可访问公网,这步骤可忽略】

关于时间配置,网上的很多说明没有说到本质。首先是镜像仓库服务所在机器是需要校时的,但无所谓时区。只有校时正确,通过openssl产生的证书的可用时间才是正确的。具体表现为 Validity字段中Not Before和Not After不会错误。证书内时间是GMT时间,COREOS的内部时间是UTC时间,前者是格林威治时间,后者是标准时间,GMT时间和UTC基本是重合的,所以没有问题。如果Master和Worker节点可以访问公网,安装过程中各节点内部有自动校时服务,自动会去redhat ntp服务器上校时。如果如果Master和Worker节点处于内网环境无法访问公网,请确保他们所在裸机或者虚拟机的时间被正确校时,或者采用提前部署YAML文件到点火文件中。

注意这里server 172.18.1.1 iburst的IP地址可采用企业内部NTP服务器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
cat << EOF | base64
server 172.18.1.1 iburst 
driftfile /var/lib/chrony/drift 
makestep 1.0 3
rtcsync
logdir /var/log/chrony
EOF

# 生产base64字符串
TEMP=$(base64 -w 0 chroney.conf)

#验证
echo $TEMP

c2VydmVyIDE3Mi4xOC4xLjEgaWJ1cnN0IApkcmlmdGZpbGUgL3Zhci9saWIvY2hyb255L2RyaWZ0IAptYWtlc3RlcCAxLjAgMwpydGNzeW5jCmxvZ2RpciAvdmFyL2xvZy9jaHJvbnkK
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 将前述产生的base64字符串拷贝至Master、boot的yaml文件内
cat << EOF > ./99_masters-chrony-configuration.yaml
apiVersion: machineconfiguration.openshift.io/v
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: master
  name: masters-chrony-configuration
spec:
  config:
    ignition:
      version: 2.2.0
    storage:
      files:
      - contents:
          source: data:text/plain;charset=utf-8;base64,c2VydmVyIDE3Mi4xOC4xLjEgaWJ1cnN0IApkcmlmdGZpbGUgL3Zhci9saWIvY2hyb255L2RyaWZ0IAptYWtlc3RlcCAxLjAgMwpydGNzeW5jCmxvZ2RpciAvdmFyL2xvZy9jaHJvbnkK
          verification: {}
        filesystem: root
        mode: 420
        path: /etc/chrony.conf
EOF
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
cat << EOF > ./99_workers-chrony-configuration.yaml
apiVersion: machineconfiguration.openshift.io/v
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: worker
  name: workers-chrony-configuration
spec:
  config:
    ignition:
      version: 2.2.0
    storage:
      files:
      - contents:
          source: data:text/plain;charset=utf-8;base64,c2VydmVyIDE3Mi4xOC4xLjEgaWJ1cnN0IApkcmlmdGZpbGUgL3Zhci9saWIvY2hyb255L2RyaWZ0IAptYWtlc3RlcCAxLjAgMwpydGNzeW5jCmxvZ2RpciAvdmFyL2xvZy9jaHJvbnkK
          verification: {}
        filesystem: root
        mode: 420
        path: /etc/chrony.conf
EOF

【创建 Ignition 引导文件,首先恢复一次备份文件,因为创建manifest文件后,会自动删除】

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
cd /data/boot-files/ignition/openshift4
cp install-config.yaml.bak install-config.yaml

[root@localhost openshift4]# openshift-install create ignition-configs --dir /data/boot-files/ignition/openshift4/
INFO Consuming Install Config from target directory
INFO Consuming Common Manifests from target directory
INFO Consuming Openshift Manifests from target directory
INFO Consuming OpenShift Install (Manifests) from target directory
INFO Consuming Master Machines from target directory
INFO Consuming Worker Machines from target directory 

【务必修改权限,否则就是404报错,http访问时候可以正常访问】

1
2
3
4
5
6
7
chmod 604 /data/boot-files/ignition/openshift4/*.ign

jq .ignition.config /data/boot-files/ignition/openshift4/bootstrap.ign

jq .ignition.config /data/boot-files/ignition/openshift4/master.ign

jq .ignition.config /data/boot-files/ignition/openshift4/worker.ign

【验证,这部非常关键,可以确保COREOS安装过程中能够正确获取到点火配置和安装ISO镜像直接通过-I获取header头状态就行了】

1
2
3
4
curl -I http://yum.cj.io:8080/ignition/openshift4/bootstrap.ign
curl -I http://yum.cj.io:8080/ignition/openshift4/master.ign
curl -I http://yum.cj.io:8080/ignition/openshift4/worker.ign
curl -I http://yum.cj.io:8080/rhcos-iso/rhcos-4.5.6-x86_64-metal.x86_64.raw.gz

16.创建自定义启动文件

为了便于后续理解,先阐明下整体boot-files的目录结构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[root@support boot-files]$tree -L 2
.
├── ignition
│   └── openshift4
├── nodes.txt
├── rhcos-iso
│   ├── openshift4
│   ├── rhcos-4.3.8-x86_64-metal.x86_64.raw.gz
│   └── rhcos-4.5.6-x86_64-metal.x86_64.raw.gz
├── rhcos-mnt
└── rhcos-temp
    ├── EFI
    ├── images
    ├── isolinux
    ├── README.md
    └── zipl.prm
1
2
3
#  其中,rhcos-mnt是临时挂载iso的文件夹,rhcos-temp是临时iso,用来将挂载文件夹内容和生产的ifg拷贝到此,最终输出iso到openshift4文件夹下
mkdir -p /data/boot-files/{rhcos-temp,rhcos-mnt}
mkdir -p /data/boot-files/rhcos-iso/openshift4

17.准备CoreOS Metal Raw 文件

1
cp /data/OCP-Install/ocp/rhcos/rhcos-4.5.6-x86_64-metal.x86_64.raw.gz /data/boot-files/rhcos-iso/

18.准备自定义CoreOS ISO 文件

首先解释下为什么要自定义CoreOS ISO文件,如果不采用自定义CoreOS这步骤,完全是可以的。直接将下载好的rhcos-4.5.6-x86_64-installer.x86_64.iso文件,挂载在虚拟机内CDROM上,选择EFI BIOS模式,开机提示,按“E”键,然后在提示符后输入类似引导参数,然后回车可执行。问题来了,这样手动输入一是非常麻烦,二是一旦输错,又要重新来过,非常麻烦。

1
ip=172.18.1.4::172.18.1.254:255.255.255.0:master1.openshift4.cj.io:ens192:none nameserver=172.18.1.1 coreos.inst.install_dev=sda coreos.inst.image_url=http://172.18.1.1:8080/install/rhcos-4.4.3-x86_64-metal.x86_64.raw.gz coreos.inst.ignition_url=http://172.18.1.1:8080/ignition/master.ign 

所以建议采用自定义CoreOS ISO 文件的方式。自定义CoreOS ISO 文件的方式容易出错的地方在于网卡名。

我是采用了Vsphere7.0,Esxi的默认网卡都是ens192。

1
mount -o loop -t iso9660 /data/OCP-Install/ocp/rhcos/rhcos-4.5.6-x86_64-installer.x86_64.iso /data/boot-files/rhcos-mnt/

【验证】

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
[root@Suppport yum.repos.d]# tree /data/boot-files/rhcos-mnt/
/data/boot-files/rhcos-mnt/
├── EFI
│   └── redhat
│       └── grub.cfg
├── images
│   ├── efiboot.img
│   ├── initramfs.img
│   └── vmlinuz
├── isolinux
│   ├── boot.cat
│   ├── boot.msg
│   ├── isolinux.bin
│   ├── isolinux.cfg
│   ├── ldlinux.c32
│   ├── libcom32.c32
│   ├── libutil.c32
│   └── vesamenu.c32
├── README.md
└── zipl.prm

【注意这里网卡,根据虚拟机情况来,先设置公共变量,其中不同虚拟机,网卡的名字不一样】

【Esxi里网卡是ens192】

1
2
3
4
NET_IF_NAME=ens192
GATEWAY=172.18.1.254
NETMASK=255.255.255.0
NAMESERVER=172.18.1.2
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# IGN_FILE_URL 是内部变量
# 注意改这里coreos.inst.image_url='"http://yum.cj.io:8080/rhcos-iso/rhcos-4.5.6-x86_64-metal.x86_64.raw.gz"'
# 这里采用网上教程
modify_cfg(){
for file in "/data/boot-files/rhcos-mnt/EFI/redhat/grub.cfg" "/data/boot-files/rhcos-mnt/isolinux/isolinux.cfg"; do
   IGN_FILE_URL=http://yum.cj.io:8080/ignition/openshift4/${1}.ign
   sed -e '/coreos.inst=yes/s|$| coreos.inst.install_dev=sda coreos.inst.image_url='"http://yum.cj.io:8080/rhcos-iso/rhcos-4.5.6-x86_64-metal.x86_64.raw.gz"' coreos.inst.ignition_url='"${IGN_FILE_URL}"' ip='"${IP}"'::'"${GATEWAY}"':'"${NETMASK}"':'"${FQDN}"':'"${NET_IF_NAME}"':none nameserver='"${NAMESERVER}"'|' ${file} > /data/boot-files/rhcos-iso/openshift4/${NODE_NAME}_${file##*/}
# Boot directly in the installation
   sed -i -e 's/default vesamenu.c32/default linux/g' -e 's/timeout 600/timeout 15/g' /data/boot-files/rhcos-iso/openshift4/${NODE_NAME}_${file##*/}
   done
}
1
# modify_cfg函数本质是生产cfg文件,然后通过在临时文件中将官方iso通过genisoimage重新自定义生产

【创建 BOOTSTRAP 启动定制文件】

1
2
3
4
5
NODE_NAME="bootstrap"
NODE_TYPE="bootstrap"
IP=172.18.1.43
FQDN="${NODE_NAME}.openshift4.cj.io" 
modify_cfg ${NODE_TYPE}

实际上每次执行,都会在/data/boot-files/rhcos-iso/openshift4/目录下建立两个cfg文件

1
2
3
4
[root@support openshift4]# ll /data/boot-files/rhcos-iso/openshift4/
total 8
-rw-r--r--. 1 root root  861 Oct  2 19:39 bootstrap_grub.cfg
-rw-r--r--. 1 root root 2170 Oct  2 19:39 bootstrap_isolinux.cfg

【验证】

1
2
cat /data/boot-files/rhcos-iso/openshift4/${NODE_NAME}_isolinux.cfg |grep append
cat /data/boot-files/rhcos-iso/openshift4/${NODE_NAME}_grub.cfg |grep linux
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# master节点设置
NODE_NAME="master1"
NODE_TYPE="master"
IP=172.18.1.44
FQDN="${NODE_NAME}.openshift4.cj.io" 
modify_cfg ${NODE_TYPE}
NODE_NAME="master2"
NODE_TYPE="master"
IP=172.18.1.45
FQDN="${NODE_NAME}.openshift4.cj.io" 
modify_cfg ${NODE_TYPE}
NODE_NAME="master3"
NODE_TYPE="master"
IP=172.18.1.46
FQDN="${NODE_NAME}.openshift4.cj.io"
modify_cfg ${NODE_TYPE}

# worker节点设置
NODE_NAME="worker1"
NODE_TYPE="worker"
IP=172.18.1.47
FQDN="${NODE_NAME}.openshift4.cj.io"
modify_cfg ${NODE_TYPE}
NODE_NAME="worker2"
NODE_TYPE="worker"
IP=172.18.1.48
FQDN="${NODE_NAME}.openshift4.cj.io"
modify_cfg ${NODE_TYPE}
NODE_NAME="worker3"
NODE_TYPE="worker"
IP=172.18.1.49
FQDN="${NODE_NAME}.openshift4.cj.io"
modify_cfg ${NODE_TYPE}

【最终验证,这步检查很重要】

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[root@support openshift4]# ll /data/boot-files/rhcos-iso/openshift4
total 56
-rw-r--r--. 1 root root  861 Oct  2 19:39 bootstrap_grub.cfg
-rw-r--r--. 1 root root 2170 Oct  2 19:39 bootstrap_isolinux.cfg
-rw-r--r--. 1 root root  856 Oct  2 19:54 master1_grub.cfg
-rw-r--r--. 1 root root 2165 Oct  2 19:54 master1_isolinux.cfg
-rw-r--r--. 1 root root  856 Oct  2 19:55 master2_grub.cfg
-rw-r--r--. 1 root root 2165 Oct  2 19:55 master2_isolinux.cfg
-rw-r--r--. 1 root root  856 Oct  2 19:55 master3_grub.cfg
-rw-r--r--. 1 root root 2165 Oct  2 19:55 master3_isolinux.cfg
-rw-r--r--. 1 root root  856 Oct  2 20:07 worker1_grub.cfg
-rw-r--r--. 1 root root 2165 Oct  2 20:07 worker1_isolinux.cfg
-rw-r--r--. 1 root root  856 Oct  2 20:07 worker2_grub.cfg
-rw-r--r--. 1 root root 2165 Oct  2 20:07 worker2_isolinux.cfg
-rw-r--r--. 1 root root  856 Oct  2 20:07 worker3_grub.cfg
-rw-r--r--. 1 root root 2165 Oct  2 20:07 worker3_isolinux.cfg

【正式创造自定义iso】

1
yum -y install genisoimage

【获取ID很重要】

1
setVAR VOL_ID $(isoinfo -d -i /data/OCP-Install/ocp/rhcos/rhcos-4.5.6-x86_64-installer.x86_64.iso |awk '/Volume set id/ {print $4}')
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 创建一个用于genisoimage读取的列表,用于后续函数for循环
cat <<EOF > /data/boot-files/nodes.txt
bootstrap
master1
master2
master3
worker1
worker2
worker3
EOF
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
rm -rf /data/boot-files/rhcos-temp/
mkdir -p /data/boot-files/rhcos-temp/

[root@support rhcos-mnt]$ll /data/boot-files/rhcos-temp/
total 0

# 把挂载好的mnt的全部拷贝到临时目录
cp -pRf /data/boot-files/rhcos-mnt/* /data/boot-files/rhcos-temp/

-f:覆盖已经存在的目标文件而不给出提示。
-i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 正式开始生产自定义ISO
for node in $(cat /data/boot-files/nodes.txt); do
   for file in "/data/boot-files/rhcos-temp/EFI/redhat/grub.cfg" "/data/boot-files/rhcos-temp/isolinux/isolinux.cfg";do
      /bin/cp -f /data/boot-files/rhcos-iso/openshift4/${node}_${file##*/} ${file}
    done
genisoimage -U -A 'RHCOS-x86_64' -V 'RHCOS-x86_64' -volset ${VOL_ID} -J -joliet-long -r -v -T \
           -b isolinux/isolinux.bin -c  isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table \
           -eltorito-alt-boot -efi-boot images/efiboot.img -no-emul-boot \
           -o /data/boot-files/rhcos-iso/openshift4/${node}.iso /data/boot-files/rhcos-temp
done
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
验证
[root@support rhcos-temp]# ll /data/boot-files/rhcos-iso/openshift4/*.iso
-rw-r--r--. 1 root root 88047616 Sep 29 14:39 /data/boot-files/rhcos-iso/openshift4/bootstrap.iso
-rw-r--r--. 1 root root 88047616 Sep 29 14:39 /data/boot-files/rhcos-iso/openshift4/master1.iso
-rw-r--r--. 1 root root 88047616 Sep 29 14:39 /data/boot-files/rhcos-iso/openshift4/master2.iso
-rw-r--r--. 1 root root 88047616 Sep 29 14:39 /data/boot-files/rhcos-iso/openshift4/master3.iso
-rw-r--r--. 1 root root 88047616 Sep 29 14:39 /data/boot-files/rhcos-iso/openshift4/worker1.iso
-rw-r--r--. 1 root root 88047616 Sep 29 14:39 /data/boot-files/rhcos-iso/openshift4/worker2.iso
-rw-r--r--. 1 root root 88047616 Sep 29 14:39 /data/boot-files/rhcos-iso/openshift4/worker3.iso

umount /data/boot-files/rhcos-mnt

【这里采用随机也可以全部逐项验证,注意其中bootstrap,master2.iso,worker2的字段,随机抽几个】

1
2
3
4
mount -o loop -t iso9660 /data/boot-files/rhcos-iso/openshift4/bootstrap.iso /data/boot-files/rhcos-mnt/
cat /data/boot-files/rhcos-mnt/EFI/redhat/grub.cfg | grep linux
cat /data/boot-files/rhcos-mnt/isolinux/isolinux.cfg | grep append
umount /data/boot-files/rhcos-mnt
1
2
3
4
mount -o loop -t iso9660 /data/boot-files/rhcos-iso/openshift4/master2.iso /data/boot-files/rhcos-mnt/
cat /data/boot-files/rhcos-mnt/EFI/redhat/grub.cfg | grep linux
cat /data/boot-files/rhcos-mnt/isolinux/isolinux.cfg | grep append
umount /data/boot-files/rhcos-mnt
1
2
3
4
mount -o loop -t iso9660 /data/boot-files/rhcos-iso/openshift4/worker2.iso /data/boot-files/rhcos-mnt/
cat /data/boot-files/rhcos-mnt/EFI/redhat/grub.cfg | grep linux
cat /data/boot-files/rhcos-mnt/isolinux/isolinux.cfg | grep append
umount /data/boot-files/rhcos-mnt

19.安装过程中的排查

【先删除ssh秘钥】

1
2
# 如果是重装记得先删除
rm -rf ~/.ssh/known_hosts

关于点火文件传输情况示意图

https://typorabyethancheung911.oss-cn-shanghai.aliyuncs.com/typora/image-20201005204707034.png

19.1 bootstrap节点

1
2
3
4
# 登录到bootstrap节点
ssh -i /data/boot-files/ignition/openshift4/ssh-key/id_rsa core@bootstrap.openshift4.cj.io
# 查看实时日志
journalctl  -f
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 也可以查看bootstrap节点已启动的默认的NTP服务
[core@bootstrap ~]$ chronyc sources –v   
210 Number of sources = 4

MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^? 2001:67c:21bc:1e::123         0   6     0     -     +0ns[   +0ns] +/-    0ns
^* time.cloudflare.com           3   6    37    37    +12us[-3743us] +/-   57ms
^- time.cloudflare.com           3   6    37    36   +485us[ +485us] +/-   57ms
^- a.ams.pobot.net               2   6    37    35  +1638us[+1638us] +/-  101ms

注:直接通过 SSH 访问仅建议在灾难恢复时使用。当 Kubernetes API 正常工作时,应 该使用特权 Pod。

19.2 master节点

三个master节点,全部打开。需要等很长一段时间,耐心等待!耐心等待!耐心等待!

1
2
3
4
# 登录到master节点
ssh -i /data/boot-files/ignition/openshift4/ssh-key/id_rsa core@master1.openshift4.cj.io
# 查看实时日志
journalctl  -f

19.3查看集群的相关进度

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 如果是重装记得先删除
rm -rf ~/.kube/
# 拷贝kubeconfig的配置文件,有两种方法
# 方法一
export KUBECONFIG=/data/boot-files/ignition/openshift4/auth/kubeconfig
echo "export KUBECONFIG=/root/ocp4/auth/kubeconfig" >> ~/.bashrc
# 方法二
mkdir ~/.kube
cp /data/boot-files/ignition/openshift4/auth/kubeconfig ~/.kube/config
oc get node

目前看下来master1是最后Ready的。

1
2
3
4
5
[root@support ~]oc get node
NAME                       STATUS   ROLES    AGE     VERSION
master1.openshift4.cj.io   Ready    master   30m     v1.18.3+002a51f
master2.openshift4.cj.io   Ready    master   19m     v1.18.3+002a51f
master3.openshift4.cj.io   Ready    master   6m12s   v1.18.3+002a51f
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# oc get clusteroperators
NAME                           VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE
cloud-credential               4.3.18    True        False         False      14m
dns                            4.3.18    True        False         False      8m35s
kube-apiserver                 4.3.18    True        False         False      7m12s
kube-controller-manager        4.3.18    True        False         False      8m10s
kube-scheduler                 4.3.18    True        False         False      7m19s
machine-api                    4.3.18    True        False         False      9m10s
machine-config                 4.3.18    True        False         False      7m29s
network                        4.3.18    True        False         False      10m
openshift-apiserver            4.3.18    True        False         False      5m52s
openshift-controller-manager   4.3.18    False       False         False      6m
service-ca                     4.3.18    True        False         False      10m
service-catalog-apiserver      4.3.18    True        False         False      5m55s
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 集群安装非常的慢,请耐心等待!请耐心等待!请耐心等待!

[root@support ~]oc get clusterversion
NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
version             False       True          34m     Working towards 4.5.6: 84% complete

[root@support ~]$oc get clusterversion
NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
version             False       True          40m     Working towards 4.5.6: 86% complete

[root@support ~]$oc get clusterversion
NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
version             False       True          42m     Working towards 4.5.6: 86% complete, waiting on authentication, console, csi-snapshot-controller, ingress, kube-storage-version-migrator, monitoring

https://typorabyethancheung911.oss-cn-shanghai.aliyuncs.com/typora/image-20201004012337994.png

19.4 Worker节点

【装worker节点前,必须关闭bootstrap节点,并且删除负载均衡中有关bootstrap的信息】

1
ssh -i /data/boot-files/ignition/openshift4/ssh-key/id_rsa core@worker1.openshift4.cj.io

务必在master安装完毕后再装。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 当出现以下内容时候,可以输入openshift-install wait-for bootstrap-complete --log-level debug --dir /data/boot-files/ignition/openshift4,确保提示可以安全移除bootstrap节点。
[root@support ~]$oc get clusterversion
NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
version             False       True          42m     Working towards 4.5.6: 86% complete, waiting on authentication, console, csi-snapshot-controller, ingress, kube-storage-version-migrator, monitoring

[root@support ~]$openshift-install wait-for bootstrap-complete --log-level debug --dir /data/boot-files/ignition/openshift4
DEBUG OpenShift Installer 4.5.6
DEBUG Built from commit baccbcfbbeed464b45a33f00ced17dfe8134fd7b
INFO Waiting up to 20m0s for the Kubernetes API at https://api.openshift4.cj.io:6443...
INFO API v1.18.3+002a51f up
INFO Waiting up to 40m0s for bootstrapping to complete...
DEBUG Bootstrap status: complete
INFO It is now safe to remove the bootstrap resources
INFO Time elapsed: 0s 

【此时务必务必移除负载均衡中bootstrap节点设置,并且可以将bootstrap关机】

https://typorabyethancheung911.oss-cn-shanghai.aliyuncs.com/typora/image-20201004012554532.png

1
2
[root@localhost ~]# oc whoami
system:admin
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
root@localhost ~]# oc get clusteroperators
NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE
authentication                             4.3.18    True        False         False      87m
cloud-credential                           4.3.18    True        False         False      133m
cluster-autoscaler                         4.3.18    True        False         False      121m
console                                    4.3.18    True        False         False      87m
dns                                        4.3.18    True        False         False      128m
image-registry                             4.3.18    True        False         False      123m
ingress                                    4.3.18    True        False         False      89m
insights                                   4.3.18    True        False         False      123m
kube-apiserver                             4.3.18    True        False         False      126m
kube-controller-manager                    4.3.18    True        False         False      125m
kube-scheduler                             4.3.18    True        False         False      126m
machine-api                                4.3.18    True        False         False      128m
machine-config                             4.3.18    True        False         False      128m
marketplace                                4.3.18    True        False         False      122m
monitoring                                 4.3.18    True        False         False      86m
network                                    4.3.18    True        False         False      129m
node-tuning                                4.3.18    True        False         False      121m
openshift-apiserver                        4.3.18    True        False         False      122m
openshift-controller-manager               4.3.18    True        False         False      126m
openshift-samples                          4.3.18    True        True          True       116m
operator-lifecycle-manager                 4.3.18    True        False         False      123m
operator-lifecycle-manager-catalog         4.3.18    True        False         False      123m
operator-lifecycle-manager-packageserver   4.3.18    True        False         False      121m
service-ca                                 4.3.18    True        False         False      129m
service-catalog-apiserver                  4.3.18    True        False         False      122m
service-catalog-controller-manager         4.3.18    True        False         False      123m
storage                                    4.3.18    True        False         False      123m

19.5 批准 CSR

将节点添加到集群时,会为添加的每台节点生成两个待处理证书签名请求(CSR)。必须确认这些 CSR 已获得批准,或者在必要时自行批准。

启动 worker 节点。然后通过如下命令,等待出现 csr 批准请求。

1
2
3
4
5
6
7
$ oc get node
NAME                             STATUS   ROLES           AGE     VERSION
master1.openshift4.example.com   Ready    master,worker   6h25m   v1.17.1
master2.openshift4.example.com   Ready    master,worker   6h39m   v1.17.1
master3.openshift4.example.com   Ready    master,worker   6h15m   v1.17.1
worker1.openshift4.example.com   NotReady worker          5h8m    v1.17.1
worker2.openshift4.example.com   NotReady worker          5h9m    v1.17.1

输出列出了创建的所有节点。查看挂起的证书签名请求(CSR),并确保添加到集群的每台节点都能看到具有 PendingApproved 状态的客户端和服务端请求。针对 Pending 状态的 CSR 批准请求:

1
$ oc adm certificate approve xxx

或者执行以下命令批准所有 CSR:

1
$ oc get csr -ojson | jq -r '.items[] | select(.status == {} ) | .metadata.name' | xargs oc adm certificate approve

当所有work节点安装完毕后,批准所有CSR,再通过openshift-install wait-for命令查看最终安装进度。

20.安装完成登录

安装完成后,执行下面命令,得到密码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 这里要注意出现DEBUG Still waiting for the cluster to initialize: Cluster operator authentication is still updating,DEBUG Cluster is initialized ,还是要耐心等待,一直等到最后INFO Login to the console with user: "kubeadmin", and password: "bXS6q-BEp5j-VrtCL-p4yLr"出现。才算正式安装完成。

[root@support rhcos-mnt]$openshift-install wait-for install-complete --log-level debug --dir /data/boot-files/ignition/openshift4
DEBUG OpenShift Installer 4.5.6
DEBUG Built from commit baccbcfbbeed464b45a33f00ced17dfe8134fd7b
DEBUG Fetching Install Config...
DEBUG Loading Install Config...
DEBUG   Loading SSH Key...
DEBUG   Loading Base Domain...
DEBUG     Loading Platform...
DEBUG   Loading Cluster Name...
DEBUG     Loading Base Domain...
DEBUG     Loading Platform...
DEBUG   Loading Pull Secret...
DEBUG   Loading Platform...
DEBUG Using Install Config loaded from state file
DEBUG Reusing previously-fetched Install Config
INFO Waiting up to 30m0s for the cluster at https://api.openshift4.cj.io:6443 to initialize...
DEBUG Still waiting for the cluster to initialize: Cluster operator authentication is still updating
DEBUG Cluster is initialized
INFO Waiting up to 10m0s for the openshift-console route to be created...
DEBUG Route found in openshift-console namespace: console
DEBUG Route found in openshift-console namespace: downloads
DEBUG OpenShift console route is created
INFO Install complete!
INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/data/boot-files/ignition/openshift4/auth/kubeconfig'
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.openshift4.cj.io
INFO Login to the console with user: "kubeadmin", and password: "bXS6q-BEp5j-VrtCL-p4yLr" 

注意最后提示访问 Web Console 的网址及用户密码。如果密码忘了也没关系,可以查看文件 /ocpinstall/auth/kubeadmin-password 来获得密码

浏览器访问 https://console-openshift-console.apps.openshift4.cj.io,输入上面输出的用户名密码登录。首次登录后会提示:

注意这里要有一个细节,就是上述地址必须是负载均衡器地址。

https://typorabyethancheung911.oss-cn-shanghai.aliyuncs.com/typora/image-20200928113128153.png

21.新建管理用户

1
2
3
# 这里要小心了,AAA是需要设置的密码
[root@support ~]# htpasswd -c -B -b users.htpasswd admin AAA
Adding password for user admin

users.htpasswd 文件下载到本地

刚登录的账户,只是临时账户。

https://typorabyethancheung911.oss-cn-shanghai.aliyuncs.com/typora/image-20200928113427402.png

选择Aministration,Cluster Settings,选择Global Configuration

https://typorabyethancheung911.oss-cn-shanghai.aliyuncs.com/typora/image-20200928115134822.png

选择下方Identity Providers下方Add,选择HTPasswd

image-20200928115251238

上传前面生产的用户密码文件。

image-20200928115339380

退出登录,重新访问,选择htpasswd,然后输入前面的用户名和密码。

https://typorabyethancheung911.oss-cn-shanghai.aliyuncs.com/typora/image-20200928115519072.png

如果退出后出现的就是用户密码输入窗口,实际还是 kube:admin 的校验,如果未出现如上提示,可以手动输入 Web Console 地址来自动跳转。

登录后貌似能看到 Administrator 菜单项,但访问如 OAuth Details 仍然提示:

1
oauths.config.openshift.io "cluster" is forbidden: User "admin" cannot get resource "oauths" in API group "config.openshift.io" at the cluster scope

因此需要授予集群管理员权限:【很重要,而且要网页退出后才能使用,否则oc adm policy提示找不到admin用户】

1
$ oc adm policy add-cluster-role-to-user cluster-admin admin