高可用性クラスタの設定方法

ランチャークラスタを使用してShieldシステムをセットアップするには、高可用性を実現するために、以下の手順に従ってください。

ノードの準備

HAクラスタに必要なノード数は、以下のノードを追加したShieldサーバの数(必要な展開ごとに)です。

  • 管理者ワークステーション用の 1 ノード
  • Rancher クラスタへのゲートウェイとして機能する負荷分散プロキシ用の 2 ノード。

参考

LBノードを追加して使用することもできますが,HAでは2つのLBノードが最小となります.

<Total#ofNodes> = <#ofShieldServers> + <2LBServers> + <1AdminWS>

例えば、RancherHAを使用した5ノード(マネージャー3名、ブラウザファーム2名)のShieldシステムでは、8ノードが必要になります。

参考

推奨される展開については、Shieldアーキテクチャ のページを参照してください。

ソフトウェア要件

  • Linux Ubuntu Server 18.04 (ワークステーションではない 64 ビット)
  • 固定IPアドレスを持つこと
  • 一意のホスト名を持っているか
  • 他のノードと 同じ ユーザーとパスワードを持つ
  • (システム内の他のマシンと)同じタイムゾーンを持っているか
  • SSHサーバーがインストールされているか

Shieldノードは、これらの 要件 を持っている必要があります。他のノード(LBと管理者ワークステーション)は、最低限のメモリとCPUリソースを持つ必要があります。

このシステムに対して、アクセス可能なローカルDNSサーバーが存在することを確認します。

管理者ワークステーションの設定

  • WS に ssh-keygen と ssh-copy-id プログラムがあることを確認してください。

  • Shield リポジトリを WS に複製します。

    git clone --branch Rel-20.03 --single-branch https://github.com/EricomSoftwareLtd/Shield.git && cd Shield/Kube/scripts/RKE
    
  • 最新の安定版である Kubectl をインストールします (こちら を参照してください)。

    curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
    chmod +x ./kubectl
    sudo mv ./kubectl /usr/local/bin/kubectl
    kubectl version –client
    

    結果は以下の通りです。

    Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.0", GitCommit:"9e991415386e4cf155a24b1da15becaa390438d8", GitTreeState:"clean", BuildDate:"2020-03-25T14:58:59Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"}
    
  • helm2の最新の安定版をインストールします。(APP_VERSION=v2.16.5)。

    curl -fsSL https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get -o /tmp/get_helm.sh
    chmod +x /tmp/get_helm.sh
    sudo /tmp/get_helm.sh -v "$APP_VERSION"
    rm -f /tmp/get_helm.sh
    
  • RKE をインストールします。

    wget https://github.com/rancher/rke/releases/download/v1.0.6/rke_linux-amd64
    chmod +x rke_linux_amd64
    
  • すべてのノードにDockerをインストールします(seld-prepare-serversを使用)。

    cd ../
    curl -s -L -o shield-prepare-servers https://github.com/EricomSoftwareLtd/Shield/releases/download/shield-prepare-servers-Rel-20.03/shield-prepare-servers
    chmod +x shield-prepare-servers
    ./shield-prepare-servers [-u <USER>] <SERVERIPADDRESSES>
    

    <USER>をすべてのノードにマッチするユーザに置き換えてください。<SERVERIPADDRESSES>をシステム内の全てのノードのIPアドレスのリストで置き換えます。

  • すべてのノードがWSから<USER>アカウントでSSH公開鍵を使ってアクセスできることを確認します。以下を実行して鍵ペアを生成し、公開鍵を全ノードに配布します (各ノードごとに個別に行う必要があります)。詳細は、こちら を参照してください。

    ssh-keygen
    ssh-copy-id <IPADDRESSNODE1>
    ssh-copy-id <IPADDRESSNODE2>
    ssh-copy-id <IPADDRESSNODE3>
    .
    .
    .
    

    キーペアが default パスに配置されていない場合は、rancher-cluster.yml の中にpathパラメータを次のように追加します。

    ssh_key_path: <path>/id_rsa
    

DNS

LBノードを指すFQDNレコードをDNSサーバーに作成します。システム内のすべてのLBノードを指す単一のレコード。`共通`ファイルを編集する - RANCHER_LB_HOSTNAMEをFQDNレコードに設定します。

証明書

**既存**の認証局の証明書(または証明書のチェーン)を使うには、~/Shield/Kube/scripts に移動して、cacerts.pem として保存してください。

さらに、FQDNレコードのサーバ証明書を 生成 し、それに対応する秘密鍵と一緒に同じディレクトリに、それぞれ cert.crtcert.key という名前で保存します。

既存の CA 証明書が ない 場合は、Rancher クラスタで使用するための 新しい CA 証明書と 新しい サーバー証明書(それぞれに一致するキーを含む)を作成し、以下のように実行します。

cd RKE/
./generate_ca.sh    (creates a new CA certificate & key)
./generate_cert.sh  (creates a new server certificate & key)

設定ファイル

システム全体の設定は rancher-cluster.yml ファイルで定義されています。このファイルは、システム構成を含むように編集され、後で展開するために使用されます。

LBノードには system-role/ingress-rancher: accept ラベルが付けられています。各LBノードの関連セクションをコピーします。例えば、2つのノードの場合は、以下のようにします。

../../../../_images/ranchercluster11.png

ユーザーを更新します。<USER> - 上記のユーザーを使用してください。

Shield Manager ノードにはロール``[controlplane,worker,etcd]``が設定されています。Worker ノードにはロール``[worker]``が設定されています。

システム内のすべてのShieldノードへの参照を含むようにファイルを修正します。各ノードのラベル/Shieldロール(管理、プロキシ、elk、ファームサービス、リモートブラウザなど)を、Shieldの展開に合わせて一致させます。例えば、以下のようになります。

../../../../_images/ranchercluster21.png

kubernetes_versionv1.17.4-rancher1-2 に変更します。

複数のネットワークインターフェースカードを持つサーバを利用する場合は、ローカルネットワークでの通信に使用した インターフェース名 をflannel_iface(network/options)で指定する必要があります。

../../../../_images/ranchercluster31.png

変更を保存します。

Rancherの展開

Rancherクラスタを構築して展開します。実行::

./0_rke_up.sh
./1_install_tiller.sh
./2_deploy_rancher.sh

致命的なエラーがないことを確認し、Rancherが正常に展開されるのを待ちます。

参考

'Error from server (NotFound): secrets "tls-ca" not found' など、特定のエラーが表示されることがあります。これらは無視されることがあります。

Rancher UI を開く - ブラウザの https://<RANCHER_LB_HOSTNAME>:8443 にアクセスします。指示に従ってください (例: パスワードの設定)。Rancher がエラーなく動作すること、local クラスタがインポートされ、エラーなく機能することを確認してください(準備が整うまでに時間がかかるかもしれません)。

設定ファイルを .kube 以下の適切な場所にコピーしてください。

cp kube_config_rancher-cluster.yml ~/.kube/config

Shieldの展開

通常のShieldインストール手順に進み、実行します:

./add-shield-repo.sh -p <password>
./deploy-shield.sh

Rancher で、名前空間を Default プロジェクトの下に移動します。

Rancher HAでShieldをインストールするようになりました。

既存クラスタの更新

実行中のクラスタを更新するには(例えば、新しい Rancher のバージョンがリリースされたり、Shieldシステムにノードを追加する必要がある場合など)、必要に応じて rancher-cluster.yml を修正し、保存してから実行してください。

./0_rke_up.sh

これで新しい設定が適用され、クラスタが更新されました。