Learn クラスタ要件

  • Version
    1.2.0
  • Author
    Exastro Developer
  • Release date
    2022/03/18
  • Last modified
    2023/05/24

はじめに

本書ではデプロイツールを用いて構築されたKuberneteクラスタ上へExastro EPOCH(以下EPOCH)をインストールする場合に、クラスタに求められる要件を扱います。これには以下の内容が含まれます。

本書の対象読者

kubeadmkopskubesprayその他のKubernetesデプロイツールを用いて、クラウドもしくはオンプレミス上のデータセンタにデプロイされたKubernetes上へEPOCHをインストールする方が対象です。

クラウドプロパイダーが提供するマネージドKubernetes(Amazon EKS, Azure Kubernetes Service, Google Kubernetes Engineなど)を利用する場合、別途Learn一覧からそれらのサービス向けのドキュメントを参照してください。

構成イメージ

下記はKubernetesクラスタへEPOCHをインストールした場合の構成イメージです。 青の矢印はEPOCHのインストール作業を表しています。EPOCHのインストールではマニフェストファイルをクラスタに適用し、各種リソースを作成します。 その他の矢印の詳細については本書「ネットワーク構成の要件」項で説明します。

unmanaged_k8s_nw.png

凡例 意味
admin EPOCHのインストールを実行するクラスター管理者
epoch_user EPOCHのUIにアクセスする利用者
blue_arrow EPOCHのインストール作業
brown_user EPOCHの利用者からGUIへのアクセス
green_user Github から送出されたWebhook

Kubernetesクラスタの要件

kubectlのインストールと権限設定

kubectlはKubernetesクラスターを操作するためのコマンドラインツールです。 EPOCHのインストールやその後の管理作業に利用されます。したがって、Kubernetesクラスタにアクセス可能なマシンにkubectlがインストールされている必要があります。

kubectlのインストール

コマンドの有無を事前に確認する

既にkubectlがインストールされている場合、インストール作業を実行する必要はありません。下記のコマンドが成功する場合、コマンドがインストール済みであることが確認できます。

kubectlのインストール確認コマンド

kubectl version --client --short

出力例(インストール済みの場合)

Client Version: v1.24.11
インストールを実行する

下記はLinux環境にkubectl v1.24をインストールする場合のコマンドです。 Linux環境以外の場合においては、Kubernetes公式のインストール手順を参考に、kubectlをインストールしてください。

コマンド(Linuxにkubectl v1.24をインストールする場合)

# バイナリファイルのダウンロード
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.24.0/bin/linux/amd64/kubectl

# バイナリへの実行アクセス許可
chmod +x ./kubectl

# バイナリを PATH のフォルダにコピーする
sudo mv ./kubectl /usr/local/bin/kubectl
kubectlとKubernetesクラスタのバージョンを確認する

Kubernetesクラスタと、ここでインストールしたkubectlマイナーバージョンの差が1以内である必要があります。 たとえばKubernetesクラスタがv1.24である場合、kubectlは1.23,1.24,1,25のいずれかでなければなりません。

※2023年5月現在、EPOCHが対応しているKubernetesクラスターバージョンは1.21 ~ 1.24です。

コマンド

kubectl version --short

出力例(バージョンが共にv1.21である場合)

Client Version: v1.21.1
Server Version: v1.21.8

権限設定

EPOCHのインストールを実行するとき、クラスタ管理者は複数のkubectlコマンドを実行する必要があります。 その際kubectlコマンドが利用するユーザーには、デフォルトのClusterRoleであるcluster-admin(もしくは同等の権限を持つClusterRoleリソース)が割り当てられている必要があります。

下記のコマンドでkubectlコマンドを利用するユーザの実行権限を確認することができます。

コマンド

kubectl auth can-i --list

下記のような権限設定が表示に含まれている場合、EPOCHのインストールに必要な権限を有していることが確認できます。

出力例(必要な権限を有している場合)

Resources  Non-Resource URLs   Resource Names     Verbs
*.*          []                  []                 [*]
             [*]                 []                 [*]

適切な権限がない場合、RBAC認可についてのKubernetes公式のドキュメントを参照し、kubectlやユーザ権限の必要な設定を行ってください。

cluster-adminClusterRoleは全Namespaceを含むクラスタ内の全てのリソースを管理可能な権限です。扱いには十分な注意を払ってください。

構成ノードの要件

サーバリソース

Kubernetesクラスタに要求されるサーバリソースについては、 インストール手順より、「要求スペック」項を参照してください。

CPUアーキテクチャ

2023年5月現在、EPOCHを構成するコンテナイメージが対応しているCPUアーキテクチャはamd64のみであり、マルチCPUアーキテクチャには未対応です。 したがって、Kubernetes構成ノードのCPUアーキテクチャはamd64である必要があります。

下記のコマンドを実行すると、ノード毎のCPUアーキテクチャが表示されます。表示が全てamd64であることを確認してください。

コマンド

kubectl get nodes -o=jsonpath='{range .items[*]}{.metadata.name}{": "}{.status.nodeInfo.architecture}{"\n"}{end}'

出力例(クラスタ構成ノードが2台の場合)

sample-k8s-master: amd64
sample-k8s-worker: amd64

ネットワーク構成の要件

下記はKubernetesクラスタへEPOCHをインストールした場合の構成イメージです。 unmanaged_k8s_nw.png

凡例 意味
admin EPOCHのインストールを実行するクラスター管理者
epoch_user EPOCHのUIにアクセスする利用者
blue_arrow EPOCHのインストール作業
brown_user EPOCHの利用者からGUIへのアクセス
green_user Github から送出されたWebhook

EPOCHのUIへのアクセスに用いるNodePort

EPOCHはArgoCDExastro ITATEKTONなどのソフトウェアをPodとして内包しており、これらのUIへのアクセスにはKubernetesのNodePortを利用します。(図内茶色の矢印を参照)また、EPOCHの認証プロセスにはKeycloakを利用しており、同様にNodePortを利用してアクセスします。

したがって、インストール後にEPOCHを利用するためには、利用者のブラウザからKubernetesクラスタのNodePortへアクセスできるネットワーク環境が必要となります。 下記のNodePortがKubernetesクラスタで利用可能であり、利用者からアクセス可能であることを確認してください。

  • 30443
  • 31183

下記のコマンドを実行すると、Kubernetesクラスタが既に利用しているNodeportの一覧が表示されます。出力はService名とNodePortの番号で構成されています。 NodePort3044331183が含まれていないことを確認してください。

コマンド

kubectl get svc -A -o jsonpath='{range .items[?(@.spec.type=="NodePort")]}{.metadata.name}{": "}{.spec.ports[
*].nodePort}{"\n"}{end}'

出力例

example-Nodeport1: 31189
example-Nodeport2: 32714

Github WebhookからEPOCHへのアクセスに用いるNodePort

EPOCHはコードリポジトリからのWebhookをNodeportで受信し、EPOCH内のTEKTONにCIパイプラインを実行させます。

Githubをコードリポジトリとして利用する場合、Github Webhookから送出されるPOSTリクエストをNodePortが受け取ることのできるネットワーク環境が必要となります。(図内緑色の矢印を参照)

下記のNodePortがKubernetesクラスタで利用可能であり、Github Webhookのリクエストを受け取り可能であることを確認してください。確認方法のコマンドはEPOCHのUIへのアクセスに用いるNodePortを参照してください。

  • 30443

Github Webhookの詳細については下記をご参照ください。
ーーー
Github Webhookの詳細: Github Docs / About Webhooks
Githubが利用するIPアドレス情報: Github Docs / GitHub’s IP addresses

EPOCHのインストール

インストール手順は下記の記事を参照してください。

本書の内容は以上です。

Page Top