Kubernetes向けのContrail Insightsのインストール
アーキテクチャと用語
Kubernetes cluster nodes | Contrail Insights によって監視されている Kubernetes クラスターのプライマリ ノードとワーカー ノード。これらのノードは Contrail Insights Agent を実行します。 |
Contrail Insights Platform node | Contrail Insightsプラットフォームのコンポーネントがインストールされるノード。Kubernetes クラスター ノードに到達できる必要があります。 |
図 1 は、Contrail Insights のさまざまなコンポーネントと、それらが Kubernetes クラスターとどのように相互作用するかを示しています。
要件
以下は、Contrail Insights for Kubernetesをインストールするための要件です。
Kubernetes バージョン 1.8 以降。
ハードウェア要件およびソフトウェア要件については 、Contrail Insights の一般要件 をご覧ください。
Kubernetes API サーバーへの API アクセス。Contrail Insights が API サーバーからクラスターに関する情報を読み取ります。構成時に提供されるトークンは、読み取り専用 API 呼び出しに対して十分なアクセス許可を提供する必要があります。また、Contrail Insights プラットフォームは、API サーバーが稼働しているホストとポートへの接続を開くことができる必要があります。
-
メモ:
アップグレードのお知らせ:Contrail Insights 3.2.6 以降、ライセンス ファイルの要件はなくなりました。3.2.6 より前のバージョンをインストールする場合は、インストール前にライセンスが必要です。
ライセンス キーは 、mailto:APPFORMIX-KEY-REQUEST@juniper.net から取得できます。リクエストには、次の情報を入力してください。
Group name: Target customers or use: Cluster type: Kubernetes Number of hosts: Number of instances:
4 つのステップのワークフロー
インストールは、次の手順で構成されます。
初期設定。
Kubernetes を構成する。
Contrail Insights のインストール
Contrail Insights スケジューラ エクステンダーを設定する。
初期設定
初期設定では、次の手順を実行します。
Contrail Insights プラットフォームノードに次の必要なファイルをインストールします。
#Ubuntu apt-get update apt-get install python-pip python-dev build-essential libssl-dev libffi-dev pip install ansible==2.1.2 markupsafe httplib2
#RHEL/CentOS yum install epel-release #Enable EPEL repository In case the above command does not work, manually download and install the epel-release package with one of the below commands, depending on your system’s version. yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm yum groupinstall 'Development Tools' #Install development tools yum install openssl-devel libffi libffi-devel #Dependencies yum install python-pip python-devel #Install Pip pip install ansible==2.3.0 #Install Ansible 2.3 pip install markupsafe httplib2 #Dependencies
メモ:RHEL の場合、ポート 9000 にアクセスするには次の
iptables
ルールが必要です。iptables -t filter -A IN_public_allow -p tcp --dport 9000 -j ACCEPT
/etc/hosts/
Contrail Insights プラットフォーム ノードでファイルを編集し、Kubernetes クラスター ノードの IP アドレスを入力します。vi /etc/hosts <kube-master-ip> k8s-master <kube-worker1-ip> k8s-node1 <kube-worker2-ip> k8s-node2
Contrail InsightsプラットフォームノードとKubernetesクラスターノードの間にパスワードレスSSHを設定します。次のコマンドを実行して、SSH 公開キーを生成し、すべてのノードにコピーします。
ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-master ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-node1 ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-node2 ssh-copy-id -i ~/.ssh/id_rsa.pub root@<IP of Contrail Insights Platform node>
Kubernetesを設定する
Contrail Insights は、Kubernetes クラスター内のリソースに関する情報を読み取ります。このソフトウェアには、 cluster-admin ロール、またはクラスター内のすべてのオブジェクトへの読み取り専用アクセスを提供する別のロールが必要です。Contrail Insights 用の新しいサービス アカウントを作成し、 クラスター管理者 ロールを割り当てることをお勧めします。
新しいサービス アカウントを作成しない場合は、Contrail Insights の設定時に、必要なアクセス権を持つ既存のサービス アカウントからトークンを指定する必要があります。
Contrail Insights に必要なアクセス権を持つ新しいサービス アカウントを作成するには、Kubernetes クラスターで次の手順を実行します。
次の YAML ファイルを作成します。
apiVersion: v1 kind: ServiceAccount metadata: name: appformix
-
appformix
手順 1 で作成したファイルを使用してサービス アカウントを作成します。$ kubectl create -f <file>.yaml
サービス アカウントが作成されていることを確認します。後で必要になるので、名前空間をメモしておいてください。
$ kubectl describe serviceaccount appformix Name: appformix Namespace: default Labels: <none> Annotations: <none> Image pull secrets: <none> Mountable secrets: appformix-token-pkljk Tokens: appformix-token-pkljk Events: <none>
-
ロール
appformix
をcluster-admin
サービス アカウントに追加し、手順 3 でメモした名前空間を <namespace> に置き換えます。$ kubectl create clusterrolebinding appformix-binding --clusterrole=cluster-admin --serviceaccount=<namespace>:appformix
次のコマンドを実行して、サービス アカウントに必要なアクセス権があることを確認します
appformix
。$ kubectl auth can-i get nodes --as=system:serviceaccount:<namespace>:appformix --all-namespaces
コマンドの出力は yes である必要があります。
Contrail Insights は、Kubernetes クラスターと通信するように設定する必要があります。Contrail Insightsのインストール時に使用する以下の詳細をKubernetesクラスターから取得します。
kubernetes_cluster_url これは Kubernetes API Server の URL です。この値を取得するには、Kubernetes クラスターで次のコマンドを実行します。
$ kubectl cluster-info | grep 'Kubernetes master' Kubernetes master is running at https://172.24.1.173:6443
kubernetes_auth_token これは、
appformix
サービス アカウントの認証トークンです。この値を取得するには、Kubernetes クラスターで次のコマンドを実行します。$ kubectl describe serviceaccount appformix Name: appformix Namespace: default Labels: <none> Annotations: <none> Tokens: appformix-token-pkljk [...] $ kubectl describe secret appformix-token-pkljk Name: appformix-token-pkljk Namespace: default [...] token: eyJhb[...]
Contrail Insightsのインストール
Contrail Insights をインストールするには、次の手順に従います。
Contrail Insights インストール パッケージをソフトウェア ダウンロードから Contrail Insights プラットフォーム ノードにダウンロードします。次のファイルを取得します。
contrail-insights-<version>.tar.gz contrail-insights-dependencies-images-<version>.tar.gz contrail-insights-kubernetes-images-<version>.tar.gz contrail-insights-platform-images-<version>.tar.gz contrail-insights-network_device-images-<version>.tar.gz
3.2.6 より前のバージョンをインストールする場合は、Contrail Insights ライセンス ファイルを Contrail Insights プラットフォーム ノードにコピーします。
解凍します
contrail-insights-<version>.tar.gz
。本パッケージには、Contrail Insights のインストールに必要なすべての Ansible プレイブックが含まれています。tar -xvzf contrail-insights-<version>.tar.gz cd contrail-insights-<version>/
メモ:残りの手順は、
contrail-insights-<version>/
ディレクトリ内から実行する必要があります。製品名は「AppFormix」から「Contrail Insights」に変更されましたが、UIと内部コマンド パスには引き続きAppFormixが表示され、後日新しい名前が反映されます。テンプレートとして使用して
sample_inventory
、インストール用のインベントリ ファイルを作成します。セクション内にcompute
Kubernetes クラスター ノードを、セクション内に Contrail Insights Platform ノードをリストアップしますappformix_controller
。cp sample_inventory inventory vi inventory [compute] k8s-master k8s-node1 k8s-node2 [appformix_controller] <IP of the Contrail Insights Platform node>
という名前の
group_vars
ディレクトリを作成します。Contrail Insights に必要な設定変数を含む、このディレクトリ内に という名前のall
ファイルを作成します。mkdir group_vars vi group_vars/all appformix_docker_images: - /path/to/contrail-insights-platform-images-<version>.tar.gz - /path/to/contrail-insights-dependencies-images-<version>.tar.gz - /path/to/contrail-insights-kubernetes-images-<version>.tar.gz - /path/to/contrail-insights-network_device-images-<version>.tar.gz appformix_dns_version: 2 kubernetes_platform_enabled: True openstack_platform_enabled: False kubernetes_cluster_url: <URL from Configuring Kubernetes step 6 above> kubernetes_auth_token: <token from Configuring Kubernetes step 6 above>
3.2.6 より前のバージョンをインストールする場合は、Contrail Insights ライセンス ファイル
group_vars/all
へのパスを に含めます。appformix_license: path/to/<contrail-insights-license-file>.sig
メモ:廃止のお知らせ:
appformix_mongo_cache_size_gb
Contrail Insights 2.19.5 以降で使用可能だったパラメータは廃止され、Contrail Insights 3.2.0 以降ではサポートされなくなります。Contrail Insights バージョン 3.2.0 以降、Mongo は Contrail Insights Platform ノードで使用可能なメモリの最大 40% を使用するように設定されます。クラスターでネットワーク デバイスの監視を有効にするには、ファイルに次の情報を含めます
group_vars/all
。# For enabling pre-requisites for packdge installation. appformix_install_snmp_dependencies: true appformix_install_jti_dependencies: true # For running the appformix-network-device-adapter network_device_discovery_enabled: true appformix_plugins: '{{ appformix_network_device_factory_plugins }}' # After 3.1, SNMP Traps can be enabled also so appformix_plugins can be specified as below: # appformix_plugins: '{{ appformix_network_device_factory_plugins }} + {{ appformix_snmp_trap_factory_plugins }}'
Ansibleプレイブックを実行します。
ansible-playbook -i inventory appformix_kubernetes.yml
プレイブックは、エラーなしで完了するまで実行する必要があります。
Contrail Insights ダッシュボードへの以下の場所からログインします。
http://<contrail-insights-node-ip>:9000
Contrail Insights プラットフォームノードにある以下のファイルから tokenId を使用してログインします。
/opt/appformix/etc/appformix_token.rst
Contrail Insights スケジューラ エクステンダーを設定する
Contrail Insights には、Kubernetes スケジューラに追加できるスケジューラ エクステンダー モジュールが付属しています。このモジュールを配置すると、Kubernetes スケジューラは既定のポリシーに加えてユーザー定義の SLA ポリシーを使用して、クラスター内のポッドをスケジュールする場所を決定します。
スケジューラエクステンダーを設定するには:
Contrail Insights スケジューラ エクステンダーを記述した JSON ファイルを作成します。このファイルを
/etc/kubernetes
Kubernetes プライマリ ノードに配置します。vi /etc/kubernetes/appformix_scheduler_extender.json { "kind" : "Policy", "apiVersion" : "v1", "predicates" : [ {"name": "NoVolumeZoneConflict"}, {"name": "MaxEBSVolumeCount"}, {"name": "MaxGCEPDVolumeCount"}, {"name": "MatchInterPodAffinity"}, {"name": "NoDiskConflict"}, {"name": "GeneralPredicates"}, {"name": "PodToleratesNodeTaints"}, {"name": "CheckNodeMemoryPressure"}, {"name": "CheckNodeDiskPressure"} ], "priorities" : [ {"name" : "SelectorSpreadPriority", "weight" : 1}, {"name" : "InterPodAffinityPriority", "weight" : 1}, {"name" : "LeastRequestedPriority", "weight" : 1}, {"name" : "BalancedResourceAllocation", "weight" : 1}, {"name" : "NodePreferAvoidPodsPriority", "weight" : 10000}, {"name" : "NodeAffinityPriority", "weight" : 1}, {"name" : "TaintTolerationPriority", "weight" : 1} ], "extenders": [ {"urlPrefix" : "http://<contrail-insights-platform-node-ip>:9000/appformix/v1.0/kubernetes_adapter", "filterVerb" : "kubernetes_schedule_request", "weight": 1, "enableHttps" : false} ] }
ブロックに
spec.containers.command
オプションを追加して--policy-config-file
、プライマリノードの にエクステンダーkube-scheduler
を追加します。vi /etc/kubernetes/manifests/kube-scheduler.yaml ... - command: - kube-scheduler - --address=127.0.0.1 - --leader-elect=true - --kubeconfig=/etc/kubernetes/scheduler.conf - --policy-config-file=/etc/kubernetes/appformix_scheduler_extender.json ...
kube-scheduler
プライマリノードでサービスを再起動しkubelet
て、コンテナを更新します。service kubelet restart
は現在
kube-scheduler
、Contrail Insightsスケジューラエクステンダーで実行されています。既定では、Kubernetes では、プライマリ ノードでユーザー ポッドをスケジュールすることはできません。3 ノードの Kubernetes クラスターで Contrail Insights スケジューラ エクステンダーの動作を実際に確認するには、次のコマンドを使用して Kubernetes プライマリ ノードでスケジューリングを有効にします。
kubectl taint nodes master node-role.kubernetes.io/master:NoSchedule-
スケジュール設定での Contrail Insights SLA プロファイルの使用
Contrail Insights にはデフォルトのスケジューリング SLA が付属しています。この SLA には、ハートビートの欠落、CPU 負荷の高い、メモリ使用率の高いアラームが含まれます。
スケジュール SLA のプロファイルを変更するには、次の手順を実行します。
ダッシュボードの右上にあるリストから [ 設定 ] を選択し、[ SLA 設定] > [スケジュール] を選択します。
図 2: ダッシュボード の Contrail Insights 設定[ プロファイルの削除 ] をクリックして、既存のプロファイルを削除します。
図3:スケジューリングプロファイル の削除[ 新しいルールの追加(Add New Rule)] をクリックし、新しいアラームを定義します。
図4:スケジューリングプロファイル への新しいルールの追加使用可能なアラームのリストから新しく作成したアラームを選択し、[ Create Profile] をクリックします。カスタム重みを持つ複数のアラームを SLA プロファイルに追加できます。
図 5: SLA のスケジューリングでのプロファイルの作成スケジューラ エクステンダーの動作を確認するには、スケジュール SLA に違反するように、Kubernetes クラスター ノードの 1 つに負荷を生成します。[アラーム] ページから SLA のステータスを確認します。
図 6: アラーム ページの スケジュール SLA 違反次に、Kubernetes クラスターにいくつかのポッドを作成し、それらがスケジュールされるノードを確認します。スケジューリング SLA に違反しているノードは、スケジュールされた新しいポッドを取得しません。
root@master:~# kubectl scale rc bpsloadgenrc --replicas 4; kubectl get pods -o wide replicationcontroller "bpsloadgenrc" scaled NAME READY STATUS RESTARTS AGE IP NODE bpsloadgenrc-2lsbg 1/1 Running 0 3h 10.244.2.20 node1 bpsloadgenrc-4kddr 0/1 ContainerCreating 0 0s <none> master bpsloadgenrc-fm16h 1/1 Running 0 3h 10.244.0.18 master bpsloadgenrc-sz2r6 0/1 ContainerCreating 0 0s <none> master fectrl-3278x 1/1 Running 0 3h 10.244.1.24 node1 redismaster 1/1 Running 0 3h 10.244.2.19 node1 redissc-ffsqd 1/1 Running 0 3h 10.244.0.17 master root@master:~# kubectl scale rc bpsloadgenrc --replicas 6; kubectl get pods -o wide replicationcontroller "bpsloadgenrc" scaled NAME READY STATUS RESTARTS AGE IP NODE bpsloadgenrc-2lsbg 1/1 Running 0 3h 10.244.2.20 node1 bpsloadgenrc-4kddr 1/1 Running 0 17s 10.244.1.25 master bpsloadgenrc-9zgx5 0/1 ContainerCreating 0 0s <none> master bpsloadgenrc-fm16h 1/1 Running 0 3h 10.244.0.18 master bpsloadgenrc-p7drd 0/1 ContainerCreating 0 0s <none> master bpsloadgenrc-sz2r6 1/1 Running 0 17s 10.244.0.19 master fectrl-3278x 1/1 Running 0 3h 10.244.1.24 node1 redismaster 1/1 Running 0 3h 10.244.2.19 node1 redissc-ffsqd 1/1 Running 0 3h 10.244.0.17 master