こんにちはTechies、ご存知のとおり、Openshiftはコンテナープラットフォームを提供し、IPI(インストーラープロビジョニングインストーラー)、UPI(ユーザープロビジョニングインフラストラクチャー)、AssistedBareMetalインストーラーなどのさまざまな方法を使用してオンプレムまたはパブリッククラウドにインストールできます。
この投稿では、UPIアプローチを使用してベアメタルノードにOpenshift4.9をインストールする方法を示します。
デモンストレーションの目的で、KVM仮想マシンを使用しています。以下は私のラボのセットアップの詳細です
仮想マシンの合計:7
バスティオンノード:
- OS – Rocky Linux 8 / CentOS 8
- RAM-4GB、vPCU-4、
- ディスク-120GB
- ネットワーク:管理N / w –(169.144.104.228)、ocp内部n / w –(192.168.110.115)
ブートストラップノード:
- OS:コアOS
- RAM:8GB
- vCPU:4
- ディスク:40 GB
- ネットワーク:OCP内部ネットワーク(192.168.110.116)
コントロールプレーン1ノード:
- OS:コアOS
- RAM:10GB
- vCPU:6
- ディスク:60 GB
- ネットワーク:OCP内部ネットワーク(192.168.110.117)
コントロールプレーン2ノード:
- OS:コアOS
- RAM:10GB
- vCPU:6
- ディスク:60 GB
- ネットワーク:OCP内部ネットワーク(192.168.110.118)
コントロールプレーン3ノード:
- OS:コアOS
- RAM:10GB
- vCPU:6
- ディスク:60 GB
- ネットワーク:OCP内部ネットワーク(192.168.110.119)
ワーカーノード1:
- OS:コアOS
- RAM:12GB
- vCPU:8
- ディスク:60 GB
- ネットワーク:OCP内部ネットワーク(192.168.110.120)
ワーカーノード2:
- OS:コアOS
- RAM:12GB
- vCPU:8
- ディスク:60 GB
- ネットワーク:OCP内部ネットワーク(192.168.110.121)
注: KVMハイパーバイザーでは、ocp-internal用のホストのみのネットワークを作成しました。
次のファイルとコマンドを使用して、KVMでホストのみのネットワークを作成します。
$ cat hostonly.xml <network> <name>hostnet</name> <bridge name='virbr2' stp='on' delay='0'/> <ip address='192.168.110.1' netmask='255.255.255.0'> <range start='192.168.110.10' end='192.168.110.254'/> </ip> </network> $ sudo virsh net-define hostonly.xml $ virsh net-start hostnet $ virsh net-autostart hostnet $ sudo systemctl restart libvirtd
RedHatポータルからOpenshiftソフトウェアをダウンロードする
a)次のURLを使用してRed Hatポータルにログインします:
https://cloud.redhat.com/openshift
b)[クラスターの作成]をクリックします
c)[データセンター]タブを選択–>[ベアメタル]をクリック
d)インストールタイプを「UPI」(ユーザーがプロビジョニングしたインフラストラクチャ)として選択します
e)以下をダウンロードします
- OpenShiftインストーラー
- プルシークレット
- コマンドラインインターフェイス
- RHCOS ISO
- RHCOS RAW
次に、OpenShiftのインストール手順に進みましょう
ステップ1)要塞ノードを準備する
上記の要塞用のリソースを使用して仮想マシンを作成します。OSはRockyLinux8またはCentOS8のいずれかでインストールできます。管理およびocp内部ネットワークからIPアドレスを割り当てます。
同様に、ブートストラップ、コントロールプレーンVM、およびワーカーVMを作成し、OCPネットワーク(ホストネット)をインターフェイスに接続して、それらのMACアドレスを書き留めます。したがって、私の場合、以下はMACアドレスです
- ブートストラップ:52:54:00:bf:60:a3
- ocp-cp1:52:54:00:98:49:40
- ocp-cp2:52:54:00:fe:8a:7c
- ocp-cp3:52:54:00:58:d3:31
- ocp-w1:52:54:00:38:8c:dd
- ocp-w2:52:54:00:b8:84:40
ステップ2)要塞ノードでサービスを構成する
シークレットを含むダウンロードしたOpenshiftソフトウェアをルートフォルダーの下の要塞ノードに転送します。
次のtarコマンドを使用してopenshiftクライアントのtarファイルを抽出します
# tar xvf openshift-client-linux.tar.gz # mv oc kubectl /usr/local/bin
を実行して、openshiftクライアントツールのインストールとそのバージョンを確認します
# oc version # kubectl version
上記のコマンドの出力は次のようになります:
Openshiftインストーラーのtarファイルを抽出します
# tar xpvf openshift-install-linux.tar.gz README.md openshift-install #
ゾーンとマスカレードの構成(SNAT)
私の要塞ノードには、ens3とens8の2つのLANカードがあります。 ens3では、外部ネットワークまたは管理ネットワークが構成され、ens8では、ocp内部ネットワークが構成されます。したがって、次のゾーンを定義し、両方のゾーンでマスカレードを有効にします。
# nmcli connection modify ens8 connection.zone internal # nmcli connection modify ens3 connection.zone external # firewall-cmd --get-active-zones # firewall-cmd --zone=external --add-masquerade --permanent # firewall-cmd --zone=internal --add-masquerade --permanent # firewall-cmd --reload
次のfirewall-cmdコマンドを実行して、ゾーン設定を確認します。
# firewall-cmd --list-all --zone=internal # firewall-cmd --list-all --zone=external
次に、DNS、DHCP、Apache、HAProxy、NFSサービスを構成しましょう。
注:デモンストレーションの目的で、ベースドメインとして「linuxtechi.lan」を使用しています。
DNSサーバーの構成
DNSサーバーとその依存関係をインストールするには、次のdnfコマンドを実行します
# dnf install bind bind-utils -y
/etc/named.confを編集し、ファイルに次の内容が含まれていることを確認します。
# vi /etc/named.conf
次に、順方向および逆方向のゾーンファイルを作成します。
# mkdir /etc/named/zones # vi /etc/named/zones/db.linuxtechi.lan
ファイルを保存して終了します。
次のエントリを使用してリバースゾーンファイルを作成します。
# vi /etc/named/zones/db.reverse
ファイルを保存して閉じてから、DNSサービスを開始して有効にします
# systemctl start named # systemctl enable named
ファイアウォールでDNSポートを許可し、実行します
# firewall-cmd --add-port=53/udp --zone=internal --permanent # firewall-cmd --reload
DHCPサーバーの構成
dhcpサーバーをインストールして構成し、ブートストラップ、コントロールプレーン、およびワーカーノードのMACアドレスをそれぞれのIPにバインドします。以下のコマンドを実行して、dhcpパッケージをインストールします
# dnf install -y dhcp-server
/etc/dhcp/dhcpd.confファイルを編集して次の内容を追加し、手順1で収集したMACアドレスを使用して、DNSエントリに従ってノードのIPアドレスを指定します。したがって、私の場合、ファイルの内容は次のようになります。
[[email protected] ~]# vi /etc/dhcp/dhcpd.conf
authoritative;
ddns-update-style interim;
allow booting;
allow bootp;
allow unknown-clients;
ignore client-updates;
default-lease-time 14400;
max-lease-time 14400;
subnet 192.168.110.0 netmask 255.255.255.0 {
option routers 192.168.110.215; # lan
option subnet-mask 255.255.255.0;
option domain-name "linuxtechi.lan";
option domain-name-servers 192.168.110.215;
range 192.168.110.216 192.168.110.245;
}
host ocp-bootstrap {
hardware ethernet 52:54:00:bf:60:a3;
fixed-address 192.168.110.216;
}
host cp1 {
hardware ethernet 52:54:00:98:49:40;
fixed-address 192.168.110.217;
}
host cp2 {
hardware ethernet 52:54:00:fe:8a:7c;
fixed-address 192.168.110.218;
}
host cp3 {
hardware ethernet 52:54:00:58:d3:31;
fixed-address 192.168.110.219;
}
host w1 {
hardware ethernet 52:54:00:38:8c:dd;
fixed-address 192.168.110.220;
}
host w2 {
hardware ethernet 52:54:00:b8:84:40;
fixed-address 192.168.110.221;
}
ファイルを保存して閉じます。
DHCPサービスを開始し、ファイアウォールの内部ゾーンでdhcpサービスを許可し、実行します
[[email protected] ~]# systemctl start dhcpd [[email protected] ~]# systemctl enable dhcpd [[email protected] ~]# firewall-cmd --add-service=dhcp --zone=internal --permanent success [[email protected] ~]# firewall-cmd --reload success [[email protected] ~]#
ApacheWebサーバーの構成
イグニッションファイルとrhcosファイルを提供するにはapacheが必要なので、最初に以下のコマンドを使用してインストールしましょう。
[[email protected] ~]# dnf install -y httpd
sedコマンドの下で実行して、デフォルトのapacheリスニングポートを80から8080に変更します
[[email protected] ~]# sed -i 's/Listen 80/Listen 0.0.0.0:8080/' /etc/httpd/conf/httpd.conf
以下のコマンドでapacheサービスを開始して有効にします
[[email protected] ~]# systemctl start httpd [[email protected] ~]# systemctl enable httpd
内部ゾーンにApacheサービスポート(8080)を許可する
[[email protected] ~]# firewall-cmd --add-port=8080/tcp --zone=internal --permanent [[email protected] ~]# firewall-cmd --reload
HAProxyを構成する
haproxyを使用して、ectd、ingress http、ingress httpsなどのOpenshiftサービスと、openshiftconsoleなどのアプリの負荷分散を行います。
それでは、最初に次のdnfコマンドを実行してhaproxyをインストールしましょう。
[[email protected] ~]# dnf install -y haproxy
haproxy confileを編集し、それに次のコンテンツを追加します
[[email protected] ~]# vi /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
log global
mode http
option httplog
option dontlognull
option http-server-close
option redispatch
option forwardfor except 127.0.0.0/8
retries 3
maxconn 20000
timeout http-request 10000ms
timeout http-keep-alive 10000ms
timeout check 10000ms
timeout connect 40000ms
timeout client 300000ms
timeout server 300000ms
timeout queue 50000ms
# Enable HAProxy stats
listen stats
bind :9000
stats uri /stats
stats refresh 10000ms
# Kube API Server
frontend k8s_api_frontend
bind :6443
default_backend k8s_api_backend
mode tcp
backend k8s_api_backend
mode tcp
balance source
server ocp-bootstrap 192.168.110.216:6443 check
server cp1 192.168.110.217:6443 check
server cp2 192.168.110.218:6443 check
server cp3 192.168.110.219:6443 check
# OCP Machine Config Server
frontend ocp_machine_config_server_frontend
mode tcp
bind :22623
default_backend ocp_machine_config_server_backend
backend ocp_machine_config_server_backend
mode tcp
balance source
server ocp-bootstrap 192.168.110.216:22623 check
server cp1 192.168.110.217:22623 check
server cp2 192.168.110.218:22623 check
server cp3 192.168.110.219:22623 check
# OCP Ingress - layer 4 tcp mode for each. Ingress Controller will handle layer 7.
frontend ocp_http_ingress_frontend
bind :80
default_backend ocp_http_ingress_backend
mode tcp
backend ocp_http_ingress_backend
balance source
mode tcp
server cp1 192.168.110.217:80 check
server cp2 192.168.110.218:80 check
server cp3 192.168.110.219:80 check
server w1 192.168.110.220:80 check
server w2 192.168.110.221:80 check
frontend ocp_https_ingress_frontend
bind *:443
default_backend ocp_https_ingress_backend
mode tcp
backend ocp_https_ingress_backend
mode tcp
balance source
server cp1 192.168.110.217:443 check
server cp2 192.168.110.218:443 check
server cp3 192.168.110.219:443 check
server w1 192.168.110.220:443 check
server w2 192.168.110.221:443 check ファイルを保存して終了します。
haproxyを起動して有効にし、上記の変更をエフェクトに加えます
[[email protected] ~]# setsebool -P haproxy_connect_any 1 [[email protected] ~]# systemctl start haproxy [[email protected] ~]# systemctl enable haproxy
OSファイアウォールの構成ファイルで定義したHAProxyポートを許可します。コマンドの下で実行
[[email protected] ~]# firewall-cmd --add-port=6443/tcp --zone=internal --permanent [[email protected] ~]# firewall-cmd --add-port=6443/tcp --zone=external --permanent [[email protected] ~]# firewall-cmd --add-port=22623/tcp --zone=internal --permanent [[email protected] ~]# firewall-cmd --add-service=http --zone=internal --permanent [[email protected] ~]# firewall-cmd --add-service=http --zone=external --permanent [[email protected] ~]# firewall-cmd --add-service=https --zone=internal --permanent [[email protected] ~]# firewall-cmd --add-service=https --zone=external --permanent [[email protected] ~]# firewall-cmd --add-port=9000/tcp --zone=external --permanent [[email protected] ~]# firewall-cmd --reload [[email protected] ~]#
NFSサーバーの構成
OpenShiftレジストリーに永続ストレージを提供するためにNFSサーバーが必要です。
次のコマンドを実行してnfsサーバーをインストールします
[[email protected] ~]# dnf install nfs-utils -y
次のディレクトリを作成し、必要な権限を設定します。このディレクトリはNFS共有としてエクスポートされます
[[email protected] ~]# mkdir -p /shares/registry [[email protected] ~]# chown -R nobody:nobody /shares/registry [[email protected] ~]# chmod -R 777 /shares/registry
次に、次の行を/ etc / exportsファイルに追加して、共有をエクスポートします。
[[email protected] ~]# vi /etc/exports /shares/registry 192.168.110.0/24(rw,sync,root_squash,no_subtree_check,no_wdelay)
ファイルを保存して閉じ、「exportfs-rv」を実行してディレクトリをエクスポートします
[[email protected] ~]# exportfs -rv exporting 192.168.110.0/24:/shares/registry [[email protected] ~]#
NFSサービスを開始して有効にする
[[email protected] ~]# systemctl start nfs-server rpcbind nfs-mountd [[email protected] ~]# systemctl enable nfs-server rpcbind
OSファイアウォールでNFSサービスを許可し、次のコマンドを実行します
[[email protected] ~]# firewall-cmd --zone=internal --add-service mountd --permanent [[email protected] ~]# firewall-cmd --zone=internal --add-service rpc-bind --permanent [[email protected] ~]# firewall-cmd --zone=internal --add-service nfs --permanent [[email protected] ~]# firewall-cmd --reload
ステップ3)マニフェストとイグニッションファイルを生成する
ブートストラップ、コントロールプレーン、およびワーカーノードのイグニッションファイルを生成するには、次の手順を参照してください
a)SSHキーを生成する
[[email protected] ~]# ssh-keygen
これらのsshキーは、ブートストラップ、コントロールプレーン、およびワーカーノードにリモートアクセスするために使用されます。
b)次の内容でinstall-config.yamlファイルを作成します
[[email protected] ~]# vi /ocp-install/install-config.yaml
apiVersion: v1
baseDomain: linuxtechi.lan #base domain name
compute:
- hyperthreading: Enabled
name: worker
replicas: 0 # Must be set to 0 for User Provisioned Installation as worker nodes will be manually deployed.
controlPlane:
hyperthreading: Enabled
name: master
replicas: 3
metadata:
name: lab # Cluster name
networking:
clusterNetwork:
- cidr: 10.128.0.0/14
hostPrefix: 23
networkType: OpenShiftSDN
serviceNetwork:
- 172.30.0.0/16
platform:
none: {}
fips: false
pullSecret: '{"auths": ...}' # Copy the pullsecret here
sshKey: "ssh-ed25519 AAAA..." # Copy ssh public key here 23行目と24行目で、上記で生成したプルシークレットと公開鍵の内容をコピーします。
変更ファイルを作成すると、次のようになります。
c)マニフェストファイルを生成する
次のopenshift-installコマンドを実行します
[[email protected] ~]# ~/openshift-install create manifests --dir ~/ocp-install
上記の警告メッセージは、マスターノードがスケジュール可能であることを示しています。これは、コントロールプレーンにワークロードを設定できることを意味します(コントロールプレーンはワーカーノードとしても機能します)。これを無効にする場合は、次のsedコマンドを実行します。
# sed -i 's/mastersSchedulable: true/mastersSchedulable: false/' ~/ocp-install/manifests/cluster-scheduler-02-config.yml
注:私の場合、無効にすることはありません。
d)イグニッションと認証ファイルを生成する
openshift-installコマンドの下で実行します
[[email protected] ~]# ~/openshift-install create ignition-configs --dir ~/ocp-install/
出力、
e)ウェブサーバーを介してマニフェスト、イグニッション、コアOSイメージファイルを提供する
/ var / www / html / ocp4ディレクトリを作成し、すべてのファイルを「/ root/ocp-install」からocp4にコピーします。
[[email protected] ~]# mkdir /var/www/html/ocp4 [[email protected] ~]# cp -R ~/ocp-install/* /var/www/html/ocp4 [[email protected] ~]# mv ~/rhcos-metal.x86_64.raw.gz /var/www/html/ocp4/rhcos
ocp4ディレクトリに必要な権限を設定します
[[email protected] ~]# chcon -R -t httpd_sys_content_t /var/www/html/ocp4/ [[email protected] ~]# chown -R apache: /var/www/html/ocp4/ [[email protected] ~]# chmod 755 /var/www/html/ocp4/
curlコマンドを使用してこれらのファイルにアクセスできるかどうかを確認します
[[email protected] ~]# curl 192.168.110.215:8080/ocp4/
出力は次のようになります
これで、導入を開始する準備が整いました。
ステップ4)OpenShiftデプロイメントを開始します
rhcos-liveISOファイルを使用してブートストラップVMを起動します。次の画面が表示されます
ISOファイルで起動すると、次の画面が表示されます。
coreos-installerコマンドを入力し、Enterキーを押します
$ sudo coreos-installer install /dev/sda --insecure --image-url http://192.168.110.215:8080/ocp4/rhcos --ignition-url http://192.168.110.215:8080/ocp4/bootstrap.ign --insecure-ignition
インストールが完了すると、次の画面が表示されます。
今回はハードディスクで起動するように、ブートストラップノードを再起動します。
$ sudo reboot
同様に、RHEL Core OS(rhcos)ISOファイルを使用して3つのコントロールプレーンノードをすべて起動します。コントロールノードが起動したら、次のコマンドを実行してEnterキーを押します
$ sudo coreos-installer install /dev/sda --insecure --image-url http://192.168.110.215:8080/ocp4/rhcos --ignition-url http://192.168.110.215:8080/ocp4/master.ign --insecure-ignition
コントロールプレーンを再起動し、ハードディスクで起動します。
残りのコントロールプレーンに対してこの手順を繰り返し、次のコマンドを使用してブートストラッププロセスを監視します。
[[email protected] ~]# ~/openshift-install --dir ~/ocp-install wait-for bootstrap-complete --log-level=debug
ここで、Core OS ISOファイルを使用して両方のワーカーノードを起動し、起動したら、ノードで次のコマンドを実行します
$ sudo coreos-installer install /dev/sda --insecure --image-url http://192.168.110.215:8080/ocp4/rhcos --ignition-url http://192.168.110.215:8080/ocp4/worker.ign --insecure-ignition
コントロールプレーンとワーカーノードのブートストラッププロセスは、インフラストラクチャによっては10〜15分かかる場合があります。次のコマンドを使用してノードのステータスを確認します
[[email protected] ~]# export KUBECONFIG=~/ocp-install/auth/kubeconfig [[email protected] ~]# oc get nodes NAME STATUS ROLES AGE VERSION cp1.lab.linuxtechi.lan Ready master,worker 69m v1.22.0-rc.0+894a78b cp2.lab.linuxtechi.lan Ready master,worker 66m v1.22.0-rc.0+894a78b cp3.lab.linuxtechi.lan Ready master,worker 68m v1.22.0-rc.0+894a78b [[email protected] ~]#
次に、ワーカーノードの保留中のCSRをすべて承認して、クラスターに参加して準備ができるようにします。次のocコマンドを実行して、保留中のCSRを表示します
[[email protected] ~]# oc get csr
次のocコマンドを実行して、保留中のCSRを承認します
[[email protected] ~]# oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs oc adm certificate approve 上記の2つのコマンドの出力は、次のようになります。
数分後、ワーカーノードはクラスターに参加し、準備完了状態になり、コマンドの下で実行して同じことを確認します。
[[email protected] ~]# oc get nodes
上記は、両方のワーカーノードがクラスターに参加し、準備完了状態にあることを確認しています。
また、ブートストラップのステータスを確認すると、出力に次のように表示されます。
[[email protected] ~]# ~/openshift-install --dir ~/ocp-install wait-for bootstrap-complete --log-level=debug
上記は、ブートストラッププロセスも完了していることを確認しており、ブートストラップVMリソースとブートストラップエントリを停止してhaproxyファイルから削除することをお勧めします。
これで記事は終わりです。お役に立てば幸いです。フィードバックやコメントを共有してください。
また読む :RHEL8でシングルノードOpenShiftクラスターをセットアップする方法