This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.第4章 マスターホストの置き換え
失敗したマスターホストを置き換えることができます。
まず、失敗したマスターホストをクラスターから削除し、次に置き換えマスターホストを追加します。失敗したマスターホストが etcd を実行していた場合、etcd を新規のマスターホストに追加して etcd を拡張します。
このトピックのすべてのセクションを完了する必要があります。
4.1. マスターホストの使用の終了 リンクのコピーリンクがクリップボードにコピーされました!
マスターホストは OpenShift Container Platform API およびコントローラーサービスなどの重要なサービスを実行します。マスターホストの使用を終了するには、これらのサービスが停止している必要があります。
OpenShift Container Platform API サービスはアクティブ/アクティブサービスであるため、サービスを停止しても、要求が別のマスターサーバーに送信される限り環境に影響はありません。ただし、OpenShift Container Platform コントローラーサービスはアクティブ/パッシブサービスであり、サービスは etcd を利用してアクティブなマスターを判別します。
複数マスターアーキテクチャーでマスターホストの使用を終了するには、新しい接続でのマスターの使用を防ぐためにマスターをロードバランサープールから削除することが関係します。このプロセスは使用されるロードバランサーによって大きく異なります。以下の手順では、マスターの haproxy
からの削除についての詳しく説明しています。OpenShift Container Platform がクラウドプロバイダーで実行されている場合や、F5
アプライアンスを使用する場合は、特定の製品ドキュメントを参照してマスターをローテーションから削除するようにしてください。
手順
/etc/haproxy/haproxy.cfg
設定ファイルでbackend
セクションを削除します。たとえば、haproxy
を使用してmaster-0.example.com
という名前のマスターの使用を終了する場合、ホスト名が以下から削除されていることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次に、
haproxy
サービスを再起動します。sudo systemctl restart haproxy
$ sudo systemctl restart haproxy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow マスターがロードバランサーから削除された後に、API およびコントローラーサービスを無効にします。
sudo systemctl disable --now atomic-openshift-master-api sudo systemctl disable --now atomic-openshift-master-controllers
$ sudo systemctl disable --now atomic-openshift-master-api $ sudo systemctl disable --now atomic-openshift-master-controllers
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - マスターホストはスケジュール可能な OpenShift Container Platform ノードであるため、「ノードホストの使用終了」のセクションの手順に従ってください。
マスターホストを
/etc/ansible/hosts
Ansible インベントリーファイルの[masters]
および[nodes]
グループから削除し、このインベントリーファイルを使用して Ansible タスクを実行する場合の問題を回避できます。警告Ansible インベントリーファイルに一覧表示される最初のマスターホストの使用を終了するには、とくに注意が必要になります。
/etc/origin/master/ca.serial.txt
ファイルは Ansible ホストインベントリーに一覧表示される最初のマスターでのみ生成されます。最初のマスターホストの使用を終了する場合は、このプロセスの実行前に/etc/origin/master/ca.serial.txt
ファイルを残りのマスターホストにコピーします。kubernetes
サービスにはマスターホスト IP がエンドポイントとして含まれています。マスターの使用が適切に終了していることを確認するには、kubernetes
サービスの出力を確認して、使用が終了したマスターが削除されているかどうかを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow マスターの使用が正常に終了している場合、マスターが以前に実行されていたホストを安全に削除できます。
4.2. ホストの追加 リンクのコピーリンクがクリップボードにコピーされました!
scaleup.yml Playbook を実行して新規ホストをクラスターに追加できます。この Playbook は、マスターをクエリーし、新規ホストの新規証明書を生成して配布し、これらの新規ホストでのみ設定 Playbook を実行します。scaleup.yml Playbook を実行する前に、前提条件となるホストの準備手順をすべて完了してください。
scaleup.yml の Playbook は新規ホストの設定のみを設定します。マスターサービスの NO_PROXY の更新やマスターサービスの再起動は行いません。
scaleup.yml Playbook を実行するには、現在のクラスター設定を表す既存のインベントリーファイル (/etc/ansible/hosts など) が必要です。以前に atomic-openshift-installer
コマンドを使用してインストールを実行した場合は、~/.config/openshift/hosts を調べて、インストーラーによって生成された最新のインベントリーファイルを見つけ、そのファイルをインベントリーファイルとして使用することができます。このファイルは必要に応じて変更することができます。後で ansible-playbook
を実行する際に -i
オプションを使用してそのファイルの場所を指定する必要があります。
推奨される最大ノード数については、「クラスターの制限」のセクションを参照してください。
手順
atomic-openshift-utils パッケージを更新して最新の Playbook を取得します。
yum update atomic-openshift-utils
# yum update atomic-openshift-utils
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/ansible/hosts ファイルを編集し、 new_<host_type> を [OSEv3:children] セクションに追加します。
たとえば、新規ノードホストを追加するには、new_nodes を追加します。
[OSEv3:children] masters nodes new_nodes
[OSEv3:children] masters nodes new_nodes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新規マスターホストを追加するには、new_masters を追加します。
[new_<host_type>] セクションを作成して、新規ホストのホスト情報を指定します。以下の新規ノードの追加例で示されているように、既存のセクションと同じ様になフォーマットにこのセクションをフォーマットします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow その他のオプションについては、「ホスト変数の設定」を参照してください。
新規マスターを追加する場合は、[new_masters] セクションと [new_nodes] セクションの両方に新規ホストを追加して、新規マスターホストが OpenShift SDN の一部となるようにします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要マスターホストに
node-role.kubernetes.io/infra=true
ラベルを付け、それ以外に専用インフラストラクチャーノードがない場合は、エントリーにopenshift_schedulable=true
を追加してホストにスケジュール可能であることを示すマークを明示的に付ける必要もあります。そうしないと、レジストリー Pod とルーター Pod をどこにも配置できなくなります。scaleup.yml Playbook を実行します。インベントリーファイルがデフォルトの /etc/ansible/hosts 以外の場所にある場合は、
-i
オプションで場所を指定します。ノードを追加する場合は、以下を指定します。
ansible-playbook [-i /path/to/file] \ /usr/share/ansible/openshift-ansible/playbooks/openshift-node/scaleup.yml
# ansible-playbook [-i /path/to/file] \ /usr/share/ansible/openshift-ansible/playbooks/openshift-node/scaleup.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow マスターを追加する場合は、以下を実行します。
ansible-playbook [-i /path/to/file] \ /usr/share/ansible/openshift-ansible/playbooks/openshift-master/scaleup.yml
# ansible-playbook [-i /path/to/file] \ /usr/share/ansible/openshift-ansible/playbooks/openshift-master/scaleup.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- Playbook の実行後に、「インストールを確認」します。
[new_<host_type>] セクションで定義したホストを適切なセクションに移動します。このようにホストを移動することで、このインベントリーファイルを使用するその後の Playbook の実行で、正しくノードが処理されるようになります。[new_<host_type>] セクションは空のままにできます。たとえば、新規ノードを追加する場合は以下のように指定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3. etcd のスケーリング リンクのコピーリンクがクリップボードにコピーされました!
etcd クラスターは、リソースを etcd ホストに追加して垂直的に拡張することも、etcd ホストを追加して水平的に拡張することもできます。
etcd が使用する投票システムのために、クラスターには常に奇数のメンバーが含まれている必要があります。
奇数の etcd ホストを含むクラスターの場合、フォールトトレランスに対応できます。奇数の etcd ホストがあることで、クォーラム (定足数) に必要な数が変わることはありませんが、障害発生時の耐性が高まります。たとえば、クラスターが 3 メンバーで構成される場合、クォーラム (定足数) は 2 で、1 メンバーが障害耐性用になります。これにより、クラスターはメンバーの 2 つが正常である限り、機能し続けます。
3 つの etcd ホストで構成される実稼働クラスターの使用が推奨されます。
新規ホストには、新規の Red Hat Enterprise Linux version 7 専用ホストが必要です。etcd ストレージは最大のパフォーマンスを達成できるように SSD ディスクおよび /var/lib/etcd
でマウントされる専用ディスクに置かれる必要があります。
前提条件
- 新規 etcd ホストを追加する前に、「etcd 設定およびデータのバックアップ」を行ってデータの損失を防ぎます。
現在の etcd クラスターステータスを確認し、新規ホストを正常でないクラスターに追加することを防ぎます。
v2 etcd api を使用する場合、以下のコマンドを使用します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow v3 etcd api を使用する場合は、以下のコマンドを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
scaleup
Playbook を実行する前に、新規ホストが適切な Red Hat ソフトウェアチャンネルに登録されていることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow etcd は
rhel-7-server-extras-rpms
ソフトウェアチャンネルでホストされています。現在の etcd ノードで etcd および iptables をアップグレードします。
yum update etcd iptables-services
# yum update etcd iptables-services
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - etcd ホストの /etc/etcd 設定をバックアップします。
- 新規 etcd メンバーが OpenShift Container Platform ノードでもある場合は、「必要な数のホストをクラスターに追加」します。
- この手順の残りでは 1 つのホストを追加していることを前提としていますが、複数のホストを追加する場合は、各ホストですべての手順を実行します。
4.3.1. Ansible を使用した新規 etcd ホストの追加 リンクのコピーリンクがクリップボードにコピーされました!
手順
Ansible インベントリーファイルで、
[new_etcd]
という名前の新規グループを作成し、新規ホストを追加します。次に、new_etcd
グループを[OSEv3]
グループの子として追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform がインストールされており、Ansible インベントリーファイルをホストするホストから、etcd
scaleup
Playbook を実行します。ansible-playbook /usr/share/ansible/openshift-ansible/playbooks/byo/openshift-etcd/scaleup.yml
$ ansible-playbook /usr/share/ansible/openshift-ansible/playbooks/byo/openshift-etcd/scaleup.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Playbook が実行された後に、新規 etcd ホストを
[new_etcd]
グループから[etcd]
グループに移行し、現在のステータスを反映するようにインベントリーファイルを変更します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Flannel を使用する場合には、OpenShift Container Platform のホストごとに、
/etc/sysconfig/flanneld
にあるflanneld
サービス設定を変更し、新しい etcd ホストを追加します。FLANNEL_ETCD_ENDPOINTS=https://master-0.example.com:2379,https://master-1.example.com:2379,https://master-2.example.com:2379,https://etcd0.example.com:2379
FLANNEL_ETCD_ENDPOINTS=https://master-0.example.com:2379,https://master-1.example.com:2379,https://master-2.example.com:2379,https://etcd0.example.com:2379
Copy to Clipboard Copied! Toggle word wrap Toggle overflow flanneld
サービスを再起動します。systemctl restart flanneld.service
# systemctl restart flanneld.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.2. 新規 etcd ホストの手動による追加 リンクのコピーリンクがクリップボードにコピーされました!
手順
現在の etcd クラスターの変更
etcd 証明書を作成するには、値を環境の値に置き換えて openssl
コマンドを実行します。
環境変数を作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記etcd_v3_ca_*
として使用されるカスタムのopenssl
拡張には、subjectAltName
としての $SAN 環境変数が含まれます。詳細は、/etc/etcd/ca/openssl.cnf
を参照してください。設定および証明書を保存するディレクトリーを作成します。
mkdir -p ${PREFIX}
# mkdir -p ${PREFIX}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバー証明書要求を作成し、これに署名します (server.csr および server.crt)。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ピア証明書要求を作成し、これに署名します (peer.csr および peer.crt)。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 後で変更できるように、現在の etcd 設定および
ca.crt
ファイルをサンプルとして現在のノードからコピーします。cp /etc/etcd/etcd.conf ${PREFIX} cp /etc/etcd/ca.crt ${PREFIX}
# cp /etc/etcd/etcd.conf ${PREFIX} # cp /etc/etcd/ca.crt ${PREFIX}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 存続する etcd ホストから、新規ホストをクラスターに追加します。etcd メンバーをクラスターに追加するには、まず最初のメンバーの
peerURLs
値のデフォルトの localhost ピアを調整する必要があります。member list
コマンドを使用して最初のメンバーのメンバー ID を取得します。etcdctl --cert-file=/etc/etcd/peer.crt \ --key-file=/etc/etcd/peer.key \ --ca-file=/etc/etcd/ca.crt \ --peers="https://172.18.1.18:2379,https://172.18.9.202:2379,https://172.18.0.75:2379" \ member list
# etcdctl --cert-file=/etc/etcd/peer.crt \ --key-file=/etc/etcd/peer.key \ --ca-file=/etc/etcd/ca.crt \ --peers="https://172.18.1.18:2379,https://172.18.9.202:2379,https://172.18.0.75:2379" \
1 member list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
--peers
パラメーター値でアクティブな etcd メンバーのみの URL を指定するようにしてください。
etcd がクラスターピアについてリッスンする IP アドレスを取得します。
ss -l4n | grep 2380
$ ss -l4n | grep 2380
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 直前の手順で取得されたメンバー ID および IP アドレスを渡して、
etcdctl member update
コマンドを使用してpeerURLs
の値を更新します。etcdctl --cert-file=/etc/etcd/peer.crt \ --key-file=/etc/etcd/peer.key \ --ca-file=/etc/etcd/ca.crt \ --peers="https://172.18.1.18:2379,https://172.18.9.202:2379,https://172.18.0.75:2379" \ member update 511b7fb6cc0001 https://172.18.1.18:2380
# etcdctl --cert-file=/etc/etcd/peer.crt \ --key-file=/etc/etcd/peer.key \ --ca-file=/etc/etcd/ca.crt \ --peers="https://172.18.1.18:2379,https://172.18.9.202:2379,https://172.18.0.75:2379" \ member update 511b7fb6cc0001 https://172.18.1.18:2380
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
member list
コマンドを再実行し、ピア URL に localhost が含まれなくなるようにします。
新規ホストを etcd クラスターに追加します。新規ホストはまだ設定されていないため、新規ホストを設定するまでステータスが
unstarted
のままであることに注意してください。警告各メンバーを追加し、1 回に 1 つずつメンバーをオンライン状態にします。各メンバーをクラスターに追加する際に、現在のピアの
peerURL
一覧を調整する必要があります。peerURL
一覧はメンバーが追加されるたびに拡張します。etcdctl member add
コマンドは、以下に説明されているように、メンバーを追加する際に etcd.conf ファイルで設定する必要のある値を出力します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- この行で、
10.3.9.222
は etcd メンバーのラベルです。ホスト名、IP アドレスまたは単純な名前を指定できます。
サンプル
${PREFIX}/etcd.conf
ファイルを更新します。以下の値を直前の手順で生成された値に置き換えます。
- ETCD_NAME
- ETCD_INITIAL_CLUSTER
- ETCD_INITIAL_CLUSTER_STATE
以下の変数は、直前の手順で出力された新規ホストの IP に変更します。
${NEW_ETCD_IP}
は、値として使用できます。ETCD_LISTEN_PEER_URLS ETCD_LISTEN_CLIENT_URLS ETCD_INITIAL_ADVERTISE_PEER_URLS ETCD_ADVERTISE_CLIENT_URLS
ETCD_LISTEN_PEER_URLS ETCD_LISTEN_CLIENT_URLS ETCD_INITIAL_ADVERTISE_PEER_URLS ETCD_ADVERTISE_CLIENT_URLS
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - メンバーシステムを etcd ノードとして使用していた場合には、/etc/etcd/etcd.conf ファイルの現在の値を上書きする必要があります。
ファイルで構文エラーや欠落している IP アドレスがないかを確認します。エラーや欠落がある場合には、etced サービスが失敗してしまう可能性があります。
vi ${PREFIX}/etcd.conf
# vi ${PREFIX}/etcd.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
インストールファイルをホストするノードでは、/etc/ansible/hosts インベントリーファイルの
[etcd]
ホストグループを更新します。古い etcd ホストを削除し、新規ホストを追加します。 証明書、サンプル設定ファイル、および
ca
を含むtgz
ファイルを作成し、これを新規ホストにコピーします。tar -czvf /etc/etcd/generated_certs/${CN}.tgz -C ${PREFIX} . scp /etc/etcd/generated_certs/${CN}.tgz ${CN}:/tmp/
# tar -czvf /etc/etcd/generated_certs/${CN}.tgz -C ${PREFIX} . # scp /etc/etcd/generated_certs/${CN}.tgz ${CN}:/tmp/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
新規 etcd ホストの変更
iptables-services
をインストールして etcd の必要なポートを開くために iptables ユーティリティーを指定します。yum install -y iptables-services
# yum install -y iptables-services
Copy to Clipboard Copied! Toggle word wrap Toggle overflow etcd の通信を許可する
OS_FIREWALL_ALLOW
ファイアウォールルールを作成します。- クライアントのポート 2379/tcp
ピア通信のポート 2380/tcp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記この例では、新規チェーン
OS_FIREWALL_ALLOW
が作成されます。これは、OpenShift Container Platform インストーラーがファイアウォールルールに使用する標準の名前になります。警告環境が IaaS 環境でホストされている場合には、インスタンスがこれらのポートに入ってくるトラフィックを許可できるように、セキュリティーグループを変更します。
etcd をインストールします。
yum install -y etcd
# yum install -y etcd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow バージョン
etcd-2.3.7-4.el7.x86_64
以降がインストールされていることを確認します。etcd サービスが実行されていないことを確認します。
systemctl disable etcd --now
# systemctl disable etcd --now
Copy to Clipboard Copied! Toggle word wrap Toggle overflow etcd 設定およびデータを削除します。
rm -Rf /etc/etcd/* rm -Rf /var/lib/etcd/*
# rm -Rf /etc/etcd/* # rm -Rf /var/lib/etcd/*
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 証明書および設定ファイルを展開します。
tar xzvf /tmp/etcd0.example.com.tgz -C /etc/etcd/
# tar xzvf /tmp/etcd0.example.com.tgz -C /etc/etcd/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ファイル所有者のパーミッションを変更します。
chown -R etcd/etcd /etc/etcd/* chown -R etcd/etcd /var/lib/etcd/
# chown -R etcd/etcd /etc/etcd/* # chown -R etcd/etcd /var/lib/etcd/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新規ホストで etcd を起動します。
systemctl enable etcd --now
# systemctl enable etcd --now
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホストがクラスターの一部であることと現在のクラスターの正常性を確認します。
v2 etcd api を使用する場合は、以下のコマンドを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow v3 etcd api を使用する場合は、以下のコマンドを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
各 OpenShift Container Platform マスターの変更
すべてのマスターの
/etc/origin/master/master-config.yaml
ファイルのetcClientInfo
セクションでマスター設定を変更します。新規 etcd ホストを、データを保存するために OpenShift Container Platform が使用する etcd サーバーの一覧に追加し、失敗したすべての etcd ホストを削除します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow マスター API サービスを再起動します。
全マスターのインストールに対しては、以下を実行します。
systemctl restart atomic-openshift-master-api
# systemctl restart atomic-openshift-master-api
Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、単一マスタークラスターのインストールでは以下を実行してください。
#systemctl restart atomic-openshift-master
#systemctl restart atomic-openshift-master
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告etcd ノードの数は奇数でなければなりません。そのため、2 つ以上のホストを追加する必要があります。
Flannel を使用する場合、新規 etcd ホストを組み込むために、すべての OpenShift Container Platform ホストの
/etc/sysconfig/flanneld
にあるflanneld
サービス設定を変更します。FLANNEL_ETCD_ENDPOINTS=https://master-0.example.com:2379,https://master-1.example.com:2379,https://master-2.example.com:2379,https://etcd0.example.com:2379
FLANNEL_ETCD_ENDPOINTS=https://master-0.example.com:2379,https://master-1.example.com:2379,https://master-2.example.com:2379,https://etcd0.example.com:2379
Copy to Clipboard Copied! Toggle word wrap Toggle overflow flanneld
サービスを再起動します。systemctl restart flanneld.service
# systemctl restart flanneld.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow