GNU/Linux >> Linux の 問題 >  >> Linux

ベアメタル(UPI)にOpenShift4.9をインストールする方法

こんにちは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クラスターをセットアップする方法


Linux
  1. LinuxにPythonをインストールする方法

  2. CentOS7にVnStatネットワーク監視をインストールする方法

  3. Ubuntu16.04LTSにWiresharkをインストールする方法

  1. Linuxを3つのステップでインストールする方法

  2. ネットワーク接続なしでUbuntuサーバーをインストールするにはどうすればいいですか?

  3. ベアメタル Linux インストールを仮想マシンに移行する方法

  1. ベアメタルサーバーにKubernetesをインストールする方法

  2. ベアメタルクラウドサーバーをデプロイする方法

  3. RHEL8にiperfをインストールする方法