Cockpit (Linux サーバ管理ツール) で複数サーバを管理する方法を検証してみた

こんにちは。サイオステクノロジー 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/ にアクセス及びログインし、画面右上のユーザ名が表示されているプルダウンから「認証」を選択します。

001_auth

すると、以下の様な画面が表示されます。この画面で、先程作成した秘密鍵 “id_rsa” が “オン” になっていることを確認します。

002_auth_on

もし、秘密鍵 “id_rsa” が “オフ” になっている場合は、この画面で “オン” に設定を変更しておきます。

003_auth_off

004_auth_turn_on

005_auth_turn_on_2

これで、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 << EOF > /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) がプルダウンから選択できるようになっています。

006_list_of_servers

各サーバを選択後、端末からホスト名を確認すると、それぞれのサーバに接続できていることが確認できます。

007_terminal_0

008_terminal_1

009_terminal_2

これで、前回の記事で紹介した各種管理操作を、各サーバで実行することが可能です。

更に、画面左のリストから “ダッシュボード” タブを選択すると、各サーバの CPU 使用率等の情報を見ることもできます。

010_dashboard_1

010_dashboard_2

また、前述した方法では設定ファイルを作成していますが、このダッシュボード画面から管理対象のサーバを追加することも可能です。

サーバ欄の “Add Server” を選択し、追加するサーバの IP アドレスを入力すると、管理対象のサーバを追加できます。

011_add_server_1

 

011_add_server_2-2

011_add_server_3

■最後に

今回は Linux サーバの管理ツールである Cockpit で複数サーバを管理する方法を検証してみました。

台数が増えてくると管理が難しくなりそうですが、数台程度であれば Cockpit を使うことでちょっとした管理作業をお手軽に Web UI から実施できそうです。

Cockpit では、追加のモジュールをインストールすることで Web UI から Docker コンテナの操作を実施することも可能であるため、次回はその機能の検証を実施してみようと思います。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

1人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です