DockerコンテナやKubernetesクラスタをGUIで管理できる「Portainer」レビュー
Dockerコンテナの起動やイメージ管理、KubernetesクラスタへのアプリケーションのデプロイなどをGUIで行えるソフトウェアが「Portainer」です。DockerやKubernetesの管理を簡単に行えそうだったので、無料のコミュニティ版を使ってみました。
Portainer | Open Source Container Management GUI for Kubernetes, Docker, Swarm
https://www.portainer.io/
Documentation
https://documentation.portainer.io/
◆Docker編
まずはDockerを利用できる環境で、以下のコマンドを実行しPortainerコンテナを起動します。今回はDocker DesktopをバックエンドとするWSL環境を利用しました。
$ docker volume create portainer_data
$ docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
ブラウザで「http://(Portainerを起動したホストのIPアドレス):9000」にアクセスすると、アカウント設定画面が表示されます。ユーザー名とパスワードを入力して「Create user」をクリック。
続いて管理するプラットフォームを選択。今回は「Docker」を選択して「Connect」をクリックします。
ダッシュボードが現れ、コンテナやイメージの情報が表示されました。PortainerはDocker Engine APIを使ってDockerデーモンの操作やステータス取得を行っています。
「App Templates」では、利用したいサービス一覧から簡単にコンテナを起動することが可能。今回はNGINXコンテナを起動してみます。
コンテナ名と接続するネットワークを選択して「Deploy the container」をクリック。
コンテナが起動しました。
「Quick actions」の各ボタンから、コンテナの操作やステータスの取得を行えます。
一番左側のログボタンをクリックすると、コンテナのログを確認することが可能。
「i」マークのボタンでは、コンテナの詳細な情報を確認することができます。
グラフのボタンをクリックすると、コンテナのメモリやCPU使用率といったステータスがグラフで表示されます。また、この画面でコンテナ内のプロセスを確認することもできます。
一番右側のボタンでは、コンテナのターミナルに接続してコマンド操作を行うことができます。
「Images」タブからは、コンテナレジストリからコンテナイメージを取得したり、ホストに取得済みのイメージを確認したりすることが可能。
「Networks」タブでコンテナネットワークを確認したり……
「Volumes」タブでコンテナのボリュームを確認したりすることもできます。
Portainerのユーザーを追加するには、「Users」タブでユーザー名とパスワードを入力し「Create user」をクリックすればOK。
「Teams」タブからはチームを作成することができますが、ユーザーやチームごとに許可する操作や閲覧可能な情報を制限できる「Roles」機能が有料なので、無料でPortainerを利用する場合は作成する意味がないかもしれません。
Portainerで管理するDockerホストを追加するには、「Endpoints」タブへ移動し「Add endpoint」をクリック。
事前にホスト側でTCP経由でのDocker Engine APIを有効にしておき、エンドポイントの名称とホストのIPアドレス、ポートを入力して「Add endpoint」をクリック。
こんな感じで、管理対象のホストを追加することができました。
ダッシュボードでもホストが追加されていることを確認できます。
なお、TCP経由でDocker Engine APIを利用可能にするには、ホストの「/etc/default/docker」に以下の記述を追加します。Docker Engine APIはDockerデーモンを遠隔で操作可能とするAPIなので、利用にはTLSとの併用が推奨されています。
DOCKER_OPTS="-H tcp://0.0.0.0:2375"
◆Kubernetes編
PortainerはKubernetesのクラスタを管理することも可能。今回はGoogle Kubernetes Engineにクラスタを構築し、Portainerをデプロイしてみます。
gcloudで外部からkubectlによるクラスタ管理ができる状態にして、以下のコマンドを実行。構成ファイルをもとにPortainerをクラスタにデプロイします。
$ kubectl create namespace portainer $ kubectl apply -n portainer -f https://raw.githubusercontent.com/portainer/k8s/master/deploy/manifests/portainer/portainer.yaml
Portainerに外部からアクセスできるように、Ingressを作成。
今回はテストなので、とりあえずすべてのアクセスをPortainerへ送るように設定しました。
IngressのフロントエンドとなるIPアドレスにアクセスすれば、Portainerの画面が表示されます。
Docker編と同じようにアカウントを作成したら、プラットフォームに「Kubernetes」を選択して「Connect」をクリックします。
こんな感じで、エンドポイントにローカルのKubernetesクラスタが表示されるので、クリックします。
ダッシュボードが表示されました。「Resource pools」や「Applications」といった、Dockerを管理する場合とは異なる項目が用意されています。
「Resource pools」はひとつのKubernetesクラスタを複数のチームで共有する場合などに利用します。新しいリソースプールを作成するには、「Resource pools」タブから「Add resource pools」をクリック。
リソースプールの名前を入力し、「Resource limits」でリソースプールが利用できるクラスタのリソース上限を設定。「Create resource pool」をクリックすれば、リソースプールを作成できます。
クラスタにアプリケーションをデプロイするには「Applications」タブから「Add applications」をクリックします。
アプリケーションの名称やコンテナイメージ、デプロイするリソースプールを指定。必要であれば環境変数や設定などを指定することもできます。
「Resource reservations」で、アプリケーションが利用できるリソースの上限を指定。
設定が完了したら「Deploy application」をクリック。これだけでアプリケーションのデプロイは完了です。
画像のように、シングルノードでNGINXコンテナが起動していることがわかります。アプリケーション名をクリックすると……
アプリケーションの詳細を確認することが可能。
下部の「Actions」ボタンでは、Docker編と同じようにログを確認したり、ターミナルに接続したりすることができます。
また、アプリケーション一覧画面の「Tables settings」で「Show system resources」にチェックを入れると、Portainerでデプロイしたアプリケーション以外のアプリケーションを確認することもできます。
構成設定を確認するには「Configurations」タブ
「Volumes」タブでクラスタのボリュームを確認したり……
「Cluster」タブでクラスタのステータスやワーカーノードの一覧を確認したりすることもできます。
なお、追加機能やサポートが利用できる有料版の「Portainer Bussiness」は、ノード数とサポート品質によって価格が変動するサブスクリプション制で、以下のページで料金を試算することができます。
Simple node-based pricing | Portainer Business
https://www.portainer.io/products/portainer-business-pricing
・関連記事
AWSやKubernetesなどのインフラ管理をまとめて行える「Clutch」をLyftがオープンソースで無料公開 - GIGAZINE
Pythonでコードを書いてAWSやKubernetesのシステム構成図を出力できる「Diagrams」 - GIGAZINE
GitHubっぽくデータベースのバージョン管理やホスティングができる「DoltHub」 - GIGAZINE
NGINXがKubernetes向けサービスメッシュ「NGINX Service Mesh」を発表 - GIGAZINE
DOOMで敵を倒してKubernetesのPodを強制終了させまくれる「Kube DOOM」レビュー - GIGAZINE
・関連コンテンツ