このカテゴリでは、独自調査に基づく技術情報を公開します。

K8sにPrometheus Operatorを導入して監視する

Prometheusを利用した、kubernetesの監視ってどんな感じなんだろう?
この記事はそんな方にピッタリです!

Prometheusって?


一言でいうと、メトリクスに特化したオープンソースの監視システムです。
 

メトリクスって?

システムの監視には、ロギング、トレーシング、ヘルスチェック、ブラックボックス監視などいろいろなカテゴリがあります。

その中の一つで様々なタイプの情報やイベントを時間の経過とともに管理できる手法が「メトリクス」です。
Prometheusは個別のイベントではなく、システム全体の健全性、挙動、性能などを追跡できます。

 

PrometheusOperatorを構成する


Prometheusを実際にKubernetesと一緒に操作してみようと思うと、Grafanaやexporterのインストール、監視targetの設定など、手を付けなければならないことが多く、途中で挫折してしまうことが多いと思います。

そこで、今回はHelmとPrometheus Operatorを使って、いっぺんに作っちゃいましょう!

 

作業の流れ


作業はkubeadmにて構成済みのkubernetesクラスタで行います。
概要はこんな感じです。

  1. Helmインストール
  2. Prometheusネームスペース作成
  3. Prometheus Operatorインストール
  4. Prometheusダッシュボード表示
  5. Grafanaダッシュボード表示

1.Helmインストール


Helmというのはkubernetesのパッケージ管理ツールです。
RedHatのyum、Debianのaptのようなものです。

helm install を実行すると、K8sクラスタに対してAPIが発行され、K8sクラスタ上にオブジェクトが作成されます。

ここでは、K8sクラスタに対してkubectlでapiを発行することができるノードにて作業を行います。

Helmのtarballをダウンロードして解凍します。

# wget https://get.helm.sh/helm-v3.2.1-linux-amd64.tar.gz
~
2020-05-20 01:42:31 (59.1 MB/s) - ‘helm-v3.2.1-linux-amd64.tar.gz’ saved 

Kubeadmで構築したクラスタの概要

はじめに


ここでは、オンプレミス環境でkubernetesプロジェクト推奨構成のクラスタを構築できる構築支援ツール[kubeadm]が、どのような動作でクラスタ環境を自動で構築しているのか、

構築支援ツールを利用せずに手動で構築したK8sクラスタと比較して、内部を見てみようと思います。
手動でK8sクラスタを構築した作業は以下の記事で公開しています。
Kubernetes(K8s)を仮想環境でHard Wayに構築してみた

Kubernetesのコンポーネント


K8sは以下のコンポーネントで構成されています。

コントロールプレーン

  • etcd
    クラスタの構成を保存するための分散型キーバリューストア
  • kube-apiserver
    kubectlやほかのコンポーネントとやり取りのためのAPIを提供するコンポーネント
  • kube-controller-manager
    K8s内の様々なコントローラ(DeploymentやDaemonsetなど)を管理しているコンポーネント
  • kube-scheduler
    ポッドをどのノードで起動するか割り当てるコンポーネント
    割り当てだけ行い、各ノードのkubeletがそれぞれ割り当てられたポッドを起動する

ワーカノード

  • kubelet ( + Container Runtime)
    スケジュールされたポッドを起動する
  • kube-proxy
    クラスタ内のサービスと、ポッドネットワーク、クラスタネットワークのルーティングを行う
  • cni plugin
    ワーカノードのポッドネットワークを提供する。

手動で構築したクラスタの場合


Kubernetes The Hard Wayの通りに構築したKubernetesクラスタの場合、各コンポーネントは以下のような構成となっています。

コンポーネント自体は/usr/local/binにバイナリでインストールされていて、systemdのサービスとして起動しています。

コントロールプレーン
# 

Ansible-Vaultの使用方法

目次

  1. Ansible-Vault 使い方
  2. Ansible-Vault コマンド一覧

1. Ansible-Vault 使い方

『Ansible-Vault』を使用することで、パスワードを管理できます。
パスワードを暗号化することでセキュリティ強化につながります。
疎通確認の際に作成したhostsファイルを修正します。
『ansible_password』を追記し、値は変数とします。

[root@Kensyo ansible]# vi hosts
[target]
WIN-Q2VNSHQHMBR ansible_host=192.168.181.102

[target:vars]
ansible_user=Administrator
ansible_password="{{ ansible_password }}"
ansible_port=5986
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore

“{{ ansible_password }}”の値を格納する先として、『group_vars』『host_vars』などを用います。group_varsを使用する場合には直下にグループ名のディレクトリを作成し、host_varsの場合にはホスト名のディレクトリを作成してください。今回は『target』グループを使用するため、group_vars/targetディレクトリを作成し値を格納します。

[root@Kensyo ansible]# mkdir group_vars
[root@Kensyo ansible]# cd group_vars
[root@Kensyo group_vars]#