こんにちは。サイオステクノロジー OSS サポート担当 Y です。
今回は Linux サーバの管理ツールである Cockpit を使って、複数の Linux サーバを管理する方法について検証してみました。(※以下の内容は CentOS 7.6/Cockpit 195 にて検証しています。)
■はじめに
前回の記事では、Cockpit を利用し Web UI から 1台の Linux サーバを管理する方法を検証しましたが、Cockpit では複数台の Linux サーバを一括で (1つの Web UI 上で) 管理することが可能です。
今回は、以下の様な構成 (Primary server である cockpit-0 の Web UI から、Secondary sever 2台を含む計 3台の Linux サーバを管理する構成) で複数台の Linux サーバを管理する方法を検証してみました。
環境構成
+---> [cockpit-1 (Secondary server)] [cockpit-0 (Primary server)] ---+ +---> [cockpit-2 (Secondary server)]
■cockpit-0 (Primary server) でのインストール
まずはインストールです。cockpit-0 (Primary server) にて、前回の記事で紹介したインストール方法を参考にしながら Cockpit をインストールします。
ただし、今回はリモートサーバの監視に必要な cockpit-dashboard というパッケージも cockpit-0 に追加でインストールします。
[root@cockpit-0 ~]# yum install -y cockpit cockpit-dashboard ~(中略)~ ======================================================================================================== Package アーキテクチャー バージョン リポジトリー 容量 ======================================================================================================== インストール中: cockpit x86_64 195.1-1.el7.centos.0.1 extras 48 k cockpit-dashboard x86_64 195.1-1.el7.centos.0.1 extras 183 k 依存性関連でのインストールをします: cockpit-bridge x86_64 195.1-1.el7.centos.0.1 extras 552 k cockpit-system noarch 195.1-1.el7.centos.0.1 extras 1.6 M cockpit-ws x86_64 195.1-1.el7.centos.0.1 extras 806 k libssh x86_64 0.7.1-7.el7 extras 195 k トランザクションの要約 ======================================================================================================== ~(中略)~ インストール: cockpit.x86_64 0:195.1-1.el7.centos.0.1 cockpit-dashboard.x86_64 0:195.1-1.el7.centos.0.1 依存性関連をインストールしました: cockpit-bridge.x86_64 0:195.1-1.el7.centos.0.1 cockpit-system.noarch 0:195.1-1.el7.centos.0.1 cockpit-ws.x86_64 0:195.1-1.el7.centos.0.1 libssh.x86_64 0:0.7.1-7.el7 完了しました! [root@cockpit-0 ~]# [root@cockpit-0 ~]# systemctl enable --now cockpit.socket Created symlink from /etc/systemd/system/sockets.target.wants/cockpit.socket to /usr/lib/systemd/system/cockpit.socket. [root@cockpit-0 ~]#
また、Web UI にアクセス可能にするために、cockpit-0 では Firewalld で Cockpit の通信を許可する設定を実施します。
[root@cockpit-0 ~]# firewall-cmd --permanent --zone=public --add-service=cockpit success [root@cockpit-0 ~]# [root@cockpit-0 ~]# firewall-cmd --reload success [root@cockpit-0 ~]#
■cockpit-1, cockpit-2 (Secondary server) でのインストール
次に管理対象のサーバ (cockpit-1, cockpit-2) へのインストールです。こちらについても、前回の記事で紹介したインストール方法を参考にしながら Cockpit をインストールします。
[root@cockpit-1 ~]# yum install -y cockpit ~(中略)~ ======================================================================================================== Package アーキテクチャー バージョン リポジトリー 容量 ======================================================================================================== インストール中: cockpit x86_64 195.1-1.el7.centos.0.1 extras 48 k 依存性関連でのインストールをします: cockpit-bridge x86_64 195.1-1.el7.centos.0.1 extras 552 k cockpit-system noarch 195.1-1.el7.centos.0.1 extras 1.6 M cockpit-ws x86_64 195.1-1.el7.centos.0.1 extras 806 k トランザクションの要約 ======================================================================================================== ~(中略)~ インストール: cockpit.x86_64 0:195.1-1.el7.centos.0.1 依存性関連をインストールしました: cockpit-bridge.x86_64 0:195.1-1.el7.centos.0.1 cockpit-system.noarch 0:195.1-1.el7.centos.0.1 cockpit-ws.x86_64 0:195.1-1.el7.centos.0.1 完了しました! [root@cockpit-1 ~]# [root@cockpit-1 ~]# systemctl enable --now cockpit.socket Created symlink from /etc/systemd/system/sockets.target.wants/cockpit.socket to /usr/lib/systemd/system/cockpit.socket. [root@cockpit-1 ~]#
[root@cockpit-2 ~]# yum install -y cockpit ~(中略)~ ======================================================================================================== Package アーキテクチャー バージョン リポジトリー 容量 ======================================================================================================== インストール中: cockpit x86_64 195.1-1.el7.centos.0.1 extras 48 k 依存性関連でのインストールをします: cockpit-bridge x86_64 195.1-1.el7.centos.0.1 extras 552 k cockpit-system noarch 195.1-1.el7.centos.0.1 extras 1.6 M cockpit-ws x86_64 195.1-1.el7.centos.0.1 extras 806 k トランザクションの要約 ======================================================================================================== ~(中略)~ インストール: cockpit.x86_64 0:195.1-1.el7.centos.0.1 依存性関連をインストールしました: cockpit-bridge.x86_64 0:195.1-1.el7.centos.0.1 cockpit-system.noarch 0:195.1-1.el7.centos.0.1 cockpit-ws.x86_64 0:195.1-1.el7.centos.0.1 完了しました! [root@cockpit-2 ~]# [root@cockpit-2 ~]# systemctl enable --now cockpit.socket Created symlink from /etc/systemd/system/sockets.target.wants/cockpit.socket to /usr/lib/systemd/system/cockpit.socket. [root@cockpit-2 ~]#
以上でインストール作業は完了です。管理対象側のサーバ (cockpit-1, cockpit-2) の Web UI に直接アクセスしない場合は、Firewalld の設定は不要です。
■SSH 公開鍵認証準備
Cockpit の Primary Server (cockpit-0) と Secondary Server (cockpit-1 及び cockpit-2) の間の通信は SSH を利用して行われるため、cockpit-0 にて SSH の公開鍵認証で利用するキーペアを作成し、cockpit-1 及び cockpit-2 に公開鍵を登録しておきます。
[root@cockpit-0 ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:vCVK8Y1DOdB9PutdgRfmD+1NB8LDaBIMt2btTdv1wmU root@cockpit-0.example.com SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX root@cockpit-0.example.com The key's randomart image is: +---[RSA 2048]----+ | XXXX X | | XXXX X XX | | X XXXXXXXXX| | X X XXXXXX| | XXX X XXXXX| | X X X X XX| | X X X X X | | X X | | | +----[SHA256]-----+ [root@cockpit-0 ~]# [root@cockpit-0 ~]# ssh-keyscan -H 10.1.3.30 >> ~/.ssh/known_hosts # 10.1.3.30:22 SSH-2.0-OpenSSH_7.4 # 10.1.3.30:22 SSH-2.0-OpenSSH_7.4 # 10.1.3.30:22 SSH-2.0-OpenSSH_7.4 [root@cockpit-0 ~]# [root@cockpit-0 ~]# ssh-keyscan -H 10.1.2.157 >> ~/.ssh/known_hosts # 10.1.2.157:22 SSH-2.0-OpenSSH_7.4 # 10.1.2.157:22 SSH-2.0-OpenSSH_7.4 # 10.1.2.157:22 SSH-2.0-OpenSSH_7.4 [root@cockpit-0 ~]# [root@cockpit-0 ~]# ssh-copy-id root@10.1.3.30 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@10.1.3.30's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@10.1.3.30'" and check to make sure that only the key(s) you wanted were added. [root@cockpit-0 ~]# [root@cockpit-0 ~]# ssh-copy-id root@10.1.2.157 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@10.1.2.157's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@10.1.2.157'" and check to make sure that only the key(s) you wanted were added. [root@cockpit-0 ~]# [root@cockpit-0 ~]# ssh root@10.1.3.30 Last login: Mon Oct 21 14:27:10 2019 from cockpit-0.labs.sios.com [root@cockpit-1 ~]# [root@cockpit-1 ~]# hostname cockpit-1.example.com [root@cockpit-1 ~]# [root@cockpit-1 ~]# exit ログアウト Connection to 10.1.3.30 closed. [root@cockpit-0 ~]# [root@cockpit-0 ~]# ssh root@10.1.2.157 Last login: Mon Oct 21 14:27:18 2019 from cockpit-0.labs.sios.com [root@cockpit-2 ~]# [root@cockpit-2 ~]# hostname cockpit-2.example.com [root@cockpit-2 ~]# [root@cockpit-2 ~]# exit ログアウト Connection to 10.1.2.157 closed. [root@cockpit-0 ~]#
次に、上記の手順で作成した秘密鍵が Cockpit から利用可能になっているかを確認します。
https://cockpit-0.example.com:9090/ にアクセス及びログインし、画面右上のユーザ名が表示されているプルダウンから「認証」を選択します。
すると、以下の様な画面が表示されます。この画面で、先程作成した秘密鍵 “id_rsa” が “オン” になっていることを確認します。
もし、秘密鍵 “id_rsa” が “オフ” になっている場合は、この画面で “オン” に設定を変更しておきます。
これで、SSH 接続に必要なキーペアの準備は完了です。
■管理対象のサーバ追加
次に、Cockpit (cockpit-0) にて、管理対象のサーバ (cockpit-1, cockpit-2) の追加作業を実施します。
Multiple Machines のドキュメントの内容を参考に、cockpit-0 の /etc/cockpit/machines.d/ 配下に 05-mymachine.json ファイルを作成し、05-mymachine.json 内に以下の様な設定を記載します。
{ "10.1.3.30" : { "visible" : true, "color" : "rgb(211, 158, 0)", "address" : "10.1.3.30" }, "10.1.2.157" : { "visible" : true, "color" : "rgb(0, 211, 159)", "address" : "10.1.2.157" } }
[root@cockpit-0 ~]# touch /etc/cockpit/machines.d/05-mymachine.json [root@cockpit-0 ~]# [root@cockpit-0 ~]# cat /etc/cockpit/machines.d/05-mymachine.json > { > "10.1.3.30" : { > "visible" : true, > "color" : "rgb(211, 158, 0)", > "address" : "10.1.3.30" > }, > "10.1.2.157" : { > "visible" : true, > "color" : "rgb(0, 211, 159)", > "address" : "10.1.2.157" > } > } > EOF [root@cockpit-0 ~]# [root@cockpit-0 ~]# cat /etc/cockpit/machines.d/05-mymachine.json { "10.1.3.30" : { "visible" : true, "color" : "rgb(211, 158, 0)", "address" : "10.1.3.30" }, "10.1.2.157" : { "visible" : true, "color" : "rgb(0, 211, 159)", "address" : "10.1.2.157" } } [root@cockpit-0 ~]#
設定ファイル作成後、設定を反映させるために cockpit.socket を再起動します。(※再起動時に接続が切断されるため、既に Web UI にログインしている場合は、再度 Web UI にてログインする必要があります。)
[root@cockpit-0 ~]# systemctl restart cockpit.socket [root@cockpit-0 ~]#
これで、管理対象のサーバ (cockpit-1, cockpit-2) の追加作業は完了です。
■Web UI への接続
再起動実施後に改めて Web UI にログインしてみると、以下の様に追加したサーバ (cockpit-1, cockpit-2) がプルダウンから選択できるようになっています。
各サーバを選択後、端末からホスト名を確認すると、それぞれのサーバに接続できていることが確認できます。
これで、前回の記事で紹介した各種管理操作を、各サーバで実行することが可能です。
更に、画面左のリストから “ダッシュボード” タブを選択すると、各サーバの CPU 使用率等の情報を見ることもできます。
また、前述した方法では設定ファイルを作成していますが、このダッシュボード画面から管理対象のサーバを追加することも可能です。
サーバ欄の “Add Server” を選択し、追加するサーバの IP アドレスを入力すると、管理対象のサーバを追加できます。
■最後に
今回は Linux サーバの管理ツールである Cockpit で複数サーバを管理する方法を検証してみました。
台数が増えてくると管理が難しくなりそうですが、数台程度であれば Cockpit を使うことでちょっとした管理作業をお手軽に Web UI から実施できそうです。
Cockpit では、追加のモジュールをインストールすることで Web UI から Docker コンテナの操作を実施することも可能であるため、次回はその機能の検証を実施してみようと思います。