OpenShift 4.5.1:vSphereIPIへのインストール

以前にOpenShiftを扱ったことがある場合は、vSphereにOpenShiftクラスターを最初からインストールするのがいかに面倒かをご存知でしょう。主な理由は、周囲のインフラストラクチャを準備する必要があるためです。OpenShift 4.5.1のリリースにより、このタスクははるかに簡単になりました。







OpenShift 4.5.1のリリース前は、UPI(User Provider Infrastructure)バージョンでのみvSphereプラットフォームにクラスターをインストールすることが可能でした。ユーザーは、インストールに必要なインフラストラクチャを独自に準備する必要がありました。



  • 外部ネットワークバランサー(1つはクラスタートラフィックのバランシング用、もう1つはアプリケーショントラフィックのバランシング用)。
  • SRVレコードを含む多数のDNSレコード。
  • クラスターノードにアドレスを発行するためのDHCPサーバー(または、静的アドレス指定の設定方法を決定します)。
  • RHCOSのインストール時に点火構成を転送するためのHTTPサーバー。


同時に、環境の準備に誤りがあると(そしてご存知のように、「エラーヒューマナムエスト」)、クラスターのインストールに失敗します。どういうわけかこのタスクを容易にするために、サードパーティのプロジェクトが環境の準備をスピードアップし、このプロセスにおける「人的要因」の影響を減らすように見え始めました。最も有名なものの1つは、OCPヘルパーノードプロジェクトです。このプロジェクトは、Ansibleを介して1つのサーバーにOpenShiftをインストールするために必要なすべての構成を準備します。 Terraformを介してインフラストラクチャを準備してクラスターをインストールするためのオプションもありました。



しかし、そのようなプロジェクトは、vSphereにクラスターをデプロイする際のすべての問題を解決したわけではありません。多くの場合、OpenShiftクラスターをサービスとして提供する必要があり(「サービスとしてのkubernetes」)、この場合、OpenShiftインストールの自動化は簡単な作業ではありませんでした。手動による介入が必要でした。クラスターノードへのOSのインストール順序の監視、クラスター内の証明書の確認、クラスターオペレーターのインストールの待機、等必要に応じて、このプロセスを自動化できますが、そのようなソリューションを作成および維持するには、時間とリソースもかかります。



リリース4.5.1以降 2020年7月13日にリリースされたOpenShiftは、IPI(Installer Provided Infrastructure)を使用したvSphereへのインストールをサポートします。これは、インストールプログラムが次のことができることを意味します。



  • vSphereで必要なすべてのリソースを個別に準備します。
  • 1つのコマンドでOpenShiftクラスターを作成します。
  • 以前に作成したOpenShiftクラスターを1つのコマンドで削除します。


さらに、このようなインストール後、管理者はOpenShiftの1つのコマンドでクラスターノードを追加または削除できます。または、自動スケーリングを完全に有効にして、クラスターが負荷の変化に独立して応答できるようにします。



ただし、新しいインストール方法には1つの制限があります。つまり、すべてのクラスターノード、およびインストールの実行元のサーバーは、インターネットに直接アクセスできる必要があります。管理者が企業のプロキシサーバーの背後にいる場合、またはクラスターでインターネットを利用できない場合は、クラスターを以前と同じようにUPIバージョンでインストールする必要があります。



周辺インフラの準備



OpenShiftをインストールする場合、インフラストラクチャを準備せずに行うことはできませんが、タスクのリストはより控えめになっています。



  1. DHCPサーバーが必要です(OpenShiftノードにアドレスを発行するため)。
  2. 2つのDNSレコードが必要です(クラスターAPIの場合はVIP、入力トラフィックの場合はVIP)。
  3. OpenShiftをインストールするためのドキュメント記載されている一連の特権を持つvSphereのアカウントが必要になります


この場合、OpenShiftをインストールして必要なすべてのサービスを実行するために、CentOS7を実行しているshift-is01サーバーを使用しました。



DHCPD構成



ここでは特に何もありません。OpenShiftサーバーのアドレスプール(192.168.111.100 -192.168.111.150)を選択します。



[ocp@shift-is01 ~]$ sudo cat /etc/dhcp/dhcpd.conf 
authoritative;
ddns-update-style interim;
default-lease-time 14400;
max-lease-time 14400;

        option routers                  192.168.111.1;
        option broadcast-address        192.168.111.255;
        option subnet-mask              255.255.255.0;
        option domain-name-servers      192.168.111.10;
        option domain-name              «ocp45.demo.local»;
        subnet 192.168.111.0 netmask 255.255.255.0 {
        interface ens192;
        pool {
                range 192.168.111.100 192.168.111.150;
                  # this is PXE specific
                filename «pxelinux.0»;
                next-server 192.168.111.10;
        }
}


DNS構成



このクラスターでは、ocp45.demo.localゾーンが作成され、DHCP範囲のAレコードとPTRレコードが作成されました。APIと入力に必要なOpenShiftエントリを作成します。BIND



ゾーンからのチャンクocp45.demo.local:



api             IN      A       192.168.111.190
*.apps          IN      A       192.168.111.191


その後、vCenterから証明書をダウンロードし、信頼できるものとしてサーバーにインストールします。



vCenter証明書をインストールします。



[ocp@shift-is01 ~]$ mkdir certs; cd certs; curl -kO https://vc01.demo.local/certs/download.zip
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  5795  100  5795    0     0  15500      0 --:--:-- --:--:-- --:--:-- 15536

[ocp@shift-is01 certs]$ unzip ./download.zip
Archive:  ./download.zip
  inflating: certs/lin/e01a85a3.r1
  inflating: certs/mac/e01a85a3.r1
  inflating: certs/win/e01a85a3.r1.crl
  inflating: certs/lin/e01a85a3.0
  inflating: certs/mac/e01a85a3.0
  inflating: certs/win/e01a85a3.0.crt

[ocp@shift-is01 certs]$ sudo cp ./certs/lin/e01a85a3.* /etc/pki/ca-trust/source/anchors

[ocp@shift-is01 certs]$ sudo update-ca-trust extract


OpenShiftクラスターのインストール



インストール手順自体が可能な限り簡単になりました。



  1. Red HatのWebサイトからインストーラーとキー(プルシークレット)を入手します。
  2. 計画されたクラスター構成でinstall-config.yamlを使用してyamlファイルを準備します。
  3. クラスターをインストールします。


インストーラーとキーを取得します



RedHatからインストールプログラムとPullSecretをダウンロードします。この手順は、インストールガイドで説明されています。この例では、作業に必要なすべてのバイナリは、ユーザーのホームディレクトリocpのbinディレクトリにあります。



[ocp@shift-is01 bin]$ ll
total 499036
-rwxr-xr-x 1 ocp ocp  78599208 Jul 16 11:53 kubectl
-rwxr-xr-x 1 ocp ocp  78599208 Jul 16 11:53 oc
-rwxr-xr-x 1 ocp ocp 353804288 Jul 16 11:53 openshift-install
-rw-r--r-- 1 ocp ocp       954 Jul 16 11:53 README.md


install-config.yamlの準備



[ocp@shift-is01 ~]$ cat ./install-config.yaml 
apiVersion: v1
baseDomain: demo.local
compute:
- hyperthreading: Enabled
  architecture: amd64
  name: worker
  replicas: 3
  platform:
    vsphere:
      cpus: 2
      coresPerSocket: 1
      memoryMB: 8192
      osDisk:
        diskSizeGB: 120
controlPlane:
  hyperthreading: Enabled
  architecture: amd64
  name: master
  replicas: 3
  platform:
    vsphere:
      cpus: 4
      coresPerSocket: 1
      memoryMB: 16384
      osDisk:
        diskSizeGB: 120
metadata:
  name: ocp45
networking:
  networkType: OpenShiftSDN
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  serviceNetwork:
- 172.30.0.0/16
platform:
  vsphere:
    vcenter: _vCenter
    username: __vCenter
    password: _
    datacenter: _Datacenter
    defaultDatastore: _Datastre
    network: _Network
    cluster: _Cluster
    apiVIP: 192.168.111.190
    ingressVIP: 192.168.111.191
fips: false
pullSecret: '_PullSecret'
sshKey: '_SSH_Public_Key'


クラスタの将来の構成でこのファイルを準備するとき、注意すべき3つのことがあります。



まず、クラスターは、install-configで定義されたクラスターのワーカーノードの構成を記憶します。また、クラスターをスケーリングするときに作成する後続のすべてのノードは、まったく同じ構成になります。したがって、ワーカーノードの最適な構成をすぐに決定する必要があります。



次に、クラスターの内部アドレス指定(クラスターネットワークおよびサービスネットワーク)が内部アドレス指定に干渉しないことが望ましいです。そうしないと、クラスター内のPODが外部リソースへの接続を開くことができない可能性があります(たとえば、外部データベースに移動します)。



第3に、クラスター名(メタデータフィールド)は、そのクラスターのドメインと一致する必要があります。この場合、クラスター名はocp45であり、そのアドレスはocp45.demo.localドメインにあります。



openshift-installインストーラーを使用してinstall-config.yamlを準備することもできますが、その場合、ワーカーノードの構成と内部アドレスを決定することはできません。いずれの場合も、インストーラーを使用してinstall-config.yamlを作成し、それを修正することは理にかなっています。



クラスターのインストール



クラスターをインストールする手順そのものは根本的に変わっていません。インストールプログラムを開始した後:



  • インストーラーは、マスターノードを初期化するためのリソースを使用してブートストラップノードを作成します。
  • インストーラーは3つのマスターノードを作成します。
  • ブートストラップノードと3つのマスターノードがクラスター制御プレーンを形成します。
  • インストーラーはブートストラップノードを無効にして削除します。
  • コントロールプレーンはワーカーノードを展開し、必要なクラスターサービスを構成します。




クラスターのセットアッププロセス。



クラスターのインストールを開始して待機します。インストールプロセスには通常30〜40分かかります。



クラスターのインストール



[ocp@shift-is01 ~]$ mkdir ocp45; cp ./install-config.yaml ./ocp45
[ocp@shift-is01 ~]$ ./bin/openshift-install create cluster --dir=ocp45 --log-level=info
INFO Consuming Install Config from target directory
INFO Obtaining RHCOS image file from 'https://releases-art-rhcos.svc.ci.openshift.org/art/storage/releases/rhcos-4.5/45.82.202007062333-0/x86_64/rhcos-45.82.202007062333-0-vmware.x86_64.ova?sha256=4189881eadb0b0cfd85c2f2ab1c32f6a320b71713cac3bd4179dba746ad4070a'

INFO Creating infrastructure resources...
INFO Waiting up to 20m0s for the Kubernetes API at https://api.ocp45.demo.local:6443...
INFO API v1.18.3+8b0a82f up
INFO Waiting up to 40m0s for bootstrapping to complete...
INFO Destroying the bootstrap resources...
INFO Waiting up to 30m0s for the cluster at https://api.ocp45.demo.local:6443 to initialize...
INFO Waiting up to 10m0s for the openshift-console route to be created...
INFO Install complete!
INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/home/ocp/ocp45/auth/kubeconfig'
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.ocp45.demo.local
INFO Login to the console with user: «kubeadmin», and password: «xxxxxxxxxxxxxxx»
INFO Time elapsed: 41m56s


RHCOSブートの問題



インターネット接続が遅い場合、インストールが機能しない可能性があります。インストーラーはRHCOSイメージがロードされるのを待ちません。RHCOSイメージは、インストーラーが表示するリンクから事前にダウンロードできます。結果のファイルは、〜/ .cache / openshift-installer / image_cacheディレクトリに5dad1f50634794b0e1ff8a830cad4b98という名前で配置し、インストールを再開する必要があります。今回はopenshift-installがファイルシステムから取得します。



INFO The file was found in cache: /home/ocp/.cache/openshift-installer/image_cache/5dad1f50634794b0e1ff8a830cad4b98. Reusing...



これで、クラスターの準備が整いました。



[ocp@shift-is01 ~]$ export KUBECONFIG=/home/ocp/ocp45/auth/kubeconfig
[ocp@shift-is01 ~]$ ./bin/oc get nodes

NAME                       STATUS   ROLES    AGE   VERSION
ocp45-64clc-master-0       Ready    master   33m   v1.18.3+6025c28
ocp45-64clc-master-1       Ready    master   33m   v1.18.3+6025c28
ocp45-64clc-master-2       Ready    master   33m   v1.18.3+6025c28
ocp45-64clc-worker-f7bw2   Ready    worker   15m   v1.18.3+6025c28
ocp45-64clc-worker-m277w   Ready    worker   15m   v1.18.3+6025c28
ocp45-64clc-worker-wcjj7   Ready    worker   15m   v1.18.3+6025c28




OpenShiftクラスターのスケーリングと削除



新しい方法の利点は、インストールが簡単になり、準備作業が少なくて済むことだけではありません。IPIを介してvSphereにインストールされたOpenShiftクラスターは、vShpereを本格的なクラウドプラットフォームとして認識し、その「弾力性」の利点を活用できます。



vSphereプラットフォーム(AmazonAWSやGoogleGCPなどの大規模なクラウドプラットフォームなど)上のクラスターには、インストーラーによって自動的に生成されるマシンセットが含まれるようになりました。



OpenShift machineset 
[ocp@shift-is01 ~]$ ./bin/oc get machinesets -n openshift-machine-api
NAME                 DESIRED   CURRENT   READY   AVAILABLE   AGE
ocp45-64clc-worker   3         3         3       3           50m


これにより、クラスターのスケーリングを1つのコマンドの実行に減らすことができます。OpenShiftは独立してノードを作成し、それをクラスターに追加または削除します。



クラスターへのノードの追加



[ocp@shift-is01 ~]$ ./bin/oc scale --replicas=4 machineset ocp45-64clc-worker -n openshift-machine-api
machineset.machine.openshift.io/ocp45-64clc-worker scaled

[ocp@shift-is01 ~]$ ./bin/oc get machinesets -n openshift-machine-api

NAME                 DESIRED   CURRENT   READY   AVAILABLE   AGE
ocp45-64clc-worker   4         4         3       3           61m

[ocp@shift-is01 ~]$ ./bin/oc get nodes

NAME                       STATUS   ROLES    AGE     VERSION
ocp45-64clc-master-0       Ready    master   75m     v1.18.3+6025c28
ocp45-64clc-master-1       Ready    master   75m     v1.18.3+6025c28
ocp45-64clc-master-2       Ready    master   75m     v1.18.3+6025c28
ocp45-64clc-worker-f7bw2   Ready    worker   57m     v1.18.3+6025c28
ocp45-64clc-worker-hvjmn   Ready    worker   9m27s   v1.18.3+6025c28
ocp45-64clc-worker-m277w   Ready    worker   57m     v1.18.3+6025c28
ocp45-64clc-worker-wcjj7   Ready    worker   57m     v1.18.3+6025c28


クラスタからノードを削除する



[ocp@shift-is01 ~]$ ./bin/oc scale --replicas=3 machineset ocp45-64clc-worker -n openshift-machine-api
machineset.machine.openshift.io/ocp45-64clc-worker scaled

[ocp@shift-is01 ~]$ ./bin/oc get nodes

NAME                       STATUS   ROLES    AGE   VERSION
ocp45-64clc-master-0       Ready    master   97m   v1.18.3+6025c28
ocp45-64clc-master-1       Ready    master   98m   v1.18.3+6025c28
ocp45-64clc-master-2       Ready    master   98m   v1.18.3+6025c28
ocp45-64clc-worker-hvjmn   Ready    worker   32m   v1.18.3+6025c28
ocp45-64clc-worker-m277w   Ready    worker   79m   v1.18.3+6025c28
ocp45-64clc-worker-wcjj7   Ready    worker   79m   v1.18.3+6025c28


ノードを自己作成および削除するクラスターの機能を使用して、OpenShfitクラスターの自動スケーリングを構成できます



一般に、vSphere IPIのインストールでは、OpenShiftコンテナオーケストレーションプラットフォームのすべての管理はkubernetes側に行われます。



  1. クラスタのリソースの作成と削除は、マシンセットを介してOpenShift管理者によって管理されます。
  2. クラスタノードのOS設定の構成も、macheneconfigを介してOpenShift管理者によって管理されます。


これは、クラスターの下にある基盤となるインフラストラクチャに対するRedHatのゼロ管理アプローチとよく一致します。



クラスターの作成を自動化することに加えて、新しいインストーラーはクラスターを独自に削除できます。Terraformインストーラーの「内部」およびインストール構成ファイルのあるディレクトリーには、Terraform状態ファイル(terraform.tfstate)が残ります。これにより、他の人のリソースに誤って「触れる」ことを恐れずに、以前に作成したクラスターを削除できます。



[ocp@shift-is01 ~]$./bin/openshift-install destroy cluster --dir=ocp45 --log-level=info


たとえば、テスト環境やトレーニング環境でクラスターを絶えず作成および削除している場合、この機能はこのプロセスを自動化し、プロセスで発生する可能性のある人的エラーを防ぐのにも役立ちます。



結論



VMware vSphereへのOpenShiftのインストールは、最も一般的なインストールオプションです。また、リリース4.5.1で登場したOpenShiftがvSphereをクラウドプラットフォームとして動作する機能により、管理が大幅に簡素化され、プラットフォームの作成、スケーリング、削除からライフサイクルプロセスを自動化するためのターンキーソリューションが提供されます。



現在、Red HatOpenShiftおよびVMwarevSphereに基づくオンプレミスソリューションを提供するためのInfrastructureas Codeアプローチは、実装するのにはるかに手頃な価格になっています。



著者:Sergey Artemov、DevOpsソリューション部門のアーキテクト、Jet Infosystems



PS Telegram DevSecOpsTalksコミュニティに参加してください



All Articles