Installation

Kuestaのインストール手順

Kuestaをインストールする手順を紹介します。

はじめに

バージョン1.24以上のKubernetesクラスターが必要です。

Kubernetesクラスターをお持ちでない場合は、kindを用いてローカルのKubernetesクラスターを作ることができます。 kindをインストール し、kind create cluster を実行してクラスターを作成してください。 これにより、ローカルで動作し cluster-admin 権限で操作出来るKubernetesクラスターが作成されます。

事前準備

  1. kubectl をインストールしてください。Kubernetesクラスタに対してコマンドを実行する際に使用します。 2cue をインストールしてください。Kuestaのインストールスクリプトの実行に必要です。

Kuestaのインストール

Kuestaをインストールするには、以下のコマンドを実行してください。

git clone https://github.com/nttcom/kuesta.git
cd kuesta/tool/install
cue install

リリースバージョンを指定したい場合、もしくは別のコンテナレジストリを使用してインストールしたい場合は、 version もしくは imageRegistry タグを使用してください。

cue -t imageRegistry=<your_image_registry> -t version=<your_version> install

プロンプトが表示されますので、指示に従ってパラメータを入力してください。

GitHub repository for config: https://github.com/<your_org>/<your_config_repo>
GitHub repository for status: https://github.com/<your_org>/<your_status_repo>
GitHub username: <your_username>
GitHub private access token: <your_private_access_token>
Are these git repositories private? (yes|no): no
Do you need sample driver and emulator for trial?: (yes|no) yes

---
GitHub Config Repository: https://github.com/<your_org>/<your_config_repo>
GitHub Status Repository: https://github.com/<your_org>/<your_status_repo>
GitHub Username: <your_username>
GitHub Access Token: ***
Use Private Repo: true

Image Registry: ghcr.io/nttcom/kuesta
Version: latest
Deploy sample driver and emulator: true
---

Continue? (yes|no) yes

KuestaはGitへのプッシュやプルリクエストの作成を行うため、GitHubの personal access token (PAT) が必要です。 上記で入力したPATは kuesta-system/kuesta-secrets という Secret リソースに保存され、kuestaサーバが git clone・pull・push・PullRequest作成を行うために使用されます。

また、非公開のGitレポジトリサーバに対してHTTPSで接続したい場合は、GitRepository を作成する際にこのPATを使うこともできます。Flux source-controllerにGitプライベートレポジトリへのアクセスを許可するために使用されます。

Flux source-controllerを用いてGitOpsを設定する

Flux source-controllerを用いてGitOpsを行うには、IaCマニフェストを取得するソースを定義するために GitRepository リソースを作成する必要があります。 以下は、getting-started チュートリアルで作成された GitRepository のサンプルです。

apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: GitRepository
metadata:
  name: kuesta-testdata
  namespace: kuesta-getting-started
spec:
  interval: 1m0s
  url: https://github.com/hrk091/kuesta-testdata
  ref:
    branch: main
  secretRef:
    name: kuesta-testdata-secret
  timeout: 60s

GitRepositoryに関するより詳細な情報が知りたければ、Fluxのドキュメントを参照してください。

Kuestaでは、GitRepositoryを作成するとKuestaのsource-watcherコントローラが検知して、対応する DeviceRollout を作成します。 DeviceRollout は、マルチデバイスのトランザクション管理を責務とするカスタムリソースです。 getting-started チュートリアルでは、以下の DeviceRollout が作成されます。

apiVersion: kuesta.hrk091.dev/v1alpha1
kind: DeviceRollout
metadata:
  name: kuesta-testdata
  namespace: kuesta-getting-started
spec:
  deviceConfigMap:
    oc01:
      checksum: 1524caf17ec4c133f6f275326a6c9742a0155007f8eaa28ea601ce7ac39c0566
      gitRevision: main/30746f9beb48d237b6c0e0357708b3ed1f95cd1b
    oc02:
      checksum: 0b03381195ba613e0dd20e5d2683711e9d6082f0634bee7c54014de2eadf0fc9
      gitRevision: main/30746f9beb48d237b6c0e0357708b3ed1f95cd1b
status:
  desiredDeviceConfigMap:
    oc01:
      checksum: 1524caf17ec4c133f6f275326a6c9742a0155007f8eaa28ea601ce7ac39c0566
      gitRevision: main/30746f9beb48d237b6c0e0357708b3ed1f95cd1b
    oc02:
      checksum: 0b03381195ba613e0dd20e5d2683711e9d6082f0634bee7c54014de2eadf0fc9
      gitRevision: main/30746f9beb48d237b6c0e0357708b3ed1f95cd1b
  deviceStatusMap:
    oc01: Completed
    oc02: Completed
  phase: Healthy
  status: Completed      

DeviceRollout の管理はライフサイクル全体を通じて自動化されていますので、作成や変更を行う必要はありません。

Installing Device Driver and configuring Device Custom Resource

以降の記述は、getting-started チュートリアルで使用されているサンプルのKubernetesカスタムオペレータを使用した場合に限定した内容になります。 Kuestaを用いて制御したいターゲットデバイスと、その制御のために実装したKubernetesカスタムオペレータによって、詳細な手順は異なります。

OpenConfig over gNMIをサポートしているデバイスに設定を投入したい場合は、kuesta/device-operator で開発されているサンプルのKubernetesカスタムオペレータを利用できます。 このサンプルのKubernetesカスタムオペレータは基本的なOpenConfig YANGセットをサポートしているデバイスに特化していますが、OpenConfigスタイルに準拠しているYANGであれば任意に追加して拡張することが可能です。

このKubernetesカスタムオペレータは make コマンドもしくは kubectl/kustomize を直接実行することでインストールできますが、 Kuestaのインストールスクリプトを使用するのが一番簡単です。Kuestaのインストールスクリプトを実行すると getting-started という名前でkustomizeのオーバレイディレクトリが作成されますので、これをテンプレートとして自由にカスタムできます。

getting-started オーバレイディレクトリを用いてKubernetesカスタムオペレータをインストールするには、以下のコマンドを実行します:

export IMG=ghcr.io/nttcom/kuesta/device-operator:latest
export KUSTOMIZE_ROOT=overlays/getting-started
make deploy

Kuestaからデバイスに対して設定投入するためには、Kubernetesカスタムオペレータに加えて、各デバイスごとにカスタムリソースを作成する必要があります。 getting-startedチュートリアルでは、gNMIエミュレータ oc01 に対して以下のような OcDemo カスタムリソースを作成します。

apiVersion: kuesta.hrk091.dev/v1alpha1
kind: OcDemo
metadata:
  name: oc01
  namespace: kuesta-getting-started
spec:
  address: gnmi-fake-oc01.kuesta-getting-started
  port: 9339
  rolloutRef: kuesta-testdata
  tls:
    secretName: oc01-cert
    skipVerify: true

OcDemo リソースでは、設定投入を行うターゲットデバイスの接続情報、アドレス、ポート、ユーザ名とパスワード、TLS関連設定、などを定義します。 .spec.rolloutRef フィールドは、Flux source-controllerのGitOpsによって提供されるコンフィグの更新通知を、どの DeviceRollout から取得するかを指定するフィールドであり、必須項目です。 OcDemo リソースの .spec についてより詳細な情報が知りたければ、 kubectl explain ocdemo.spec を実行して確認してください。