[Tekton Pipelines] Tektonのダッシュボードを使ってみよう

この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Tekton Pipelinesは、Kuernetes上で実行するCI/CD形式のパイプラインツールです。Kubernetes Nativeなオープンソースとして開発されています。 TektonはThe Continuous Delivery Foundation(CDF)のプロジェクトとして採用されています。

本記事ではTekton PipelinesのWebベースのUIであるTekton Dashboardのインストール方法と概要を紹介します。

対象読者

  • Kubernetes-nativeなCI/CDツールを探している人
  • Cloud Delivery Foundation(CDF)に興味がある人
  • Cloud Nativeの思想に興味がある人

関連記事

もくじ

  1. はじめに
  2. 検証環境の紹介
  3. Dashboardをインストールする
  4. Dashboardへのアクセス方法
  5. Tektonリソースをインポートする
  6. Docker Hub認証情報の作成
  7. Pipelineを実行する
  8. おわりに

はじめに

Tekton DashboaedはTekton PipelinesのWebベースのUIです。Tekton Pipelinesのタスクの管理や参照、実行などを行うことができます。Tekton Dashboardの実行には、Tekton Pipelines v0.5以上のインストールが必要です。Tekton Pipelinesのインストール方法は、前回の記事を参照してください。

検証環境の紹介

GKE環境で検証を行いました。検証に利用したKubernetesのクライアントおよびサーバのバージョンは以下の通りです。

$ kubectl version --short
Client Version: v1.14.1
Server Version: v1.12.8-gke.10

Dashboardをインストールする

はじめにTekton DashboardのソースをGit Hubからクローンします。

$ git clone https://github.com/tektoncd/dashboard.git

kubectl applyコマンドでTekton Dashboardのマニフェストファイルを指定します。

$ kubectl apply -f dashboard/config/release/gcr-tekton-dashboard.yaml

Tekton Dashboardは、Tekton Pipelinesと同じtekton-pipelinesというネームスペースにインストールされます。ネームスペースを指定してPodの起動を確認してみます。

$ kubectl get pods --namespace tekton-pipelines
NAME                                          READY   STATUS    RESTARTS   AGE
tekton-dashboard-fb5d8df96-s6xpd              1/1     Running   0          117s
tekton-pipelines-controller-756bc5764-lz9bf   1/1     Running   0          2m22s
tekton-pipelines-webhook-747c74f59f-n4g2v     1/1     Running   0          2m19s

Dashboardがインストールされ、実行状態となっています。

Dashboardへのアクセス方法

Tekton Dashboardは、ClusterIPを経由してアクセスすることができます。ClusterIPのポート場号は9097です。

$ kubectl get services -n tekton-pipelines
NAME                          TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
tekton-dashboard              ClusterIP   10.0.3.151    <none>        9097/TCP   5m28s
tekton-pipelines-controller   ClusterIP   10.0.13.160   <none>        9090/TCP   6m10s
tekton-pipelines-webhook      ClusterIP   10.0.4.144    <none>        443/TCP    6m7s

kubectl proxyを利用したアクセス

ClusterIP経由でアクセスするために、kubectl proxyコマンドを利用します。

$ kubectl proxy
Starting to serve on 127.0.0.1:8001

ブラウザでhttp://localhost:8001/api/v1/namespaces/tekton-pipelines/services/tekton-dashboard:http/proxy/にアクセスしてみます。

port-forwardを利用したアクセス

kubectl port-forwardを利用したアクセス方法です。

$ kubectl --namespace tekton-pipelines port-forward svc/tekton-dashboard 9097:9097
Forwarding from 127.0.0.1:9097 -> 9097
Forwarding from [::1]:9097 -> 9097

ブラウザでhttp://localhost:9097にアクセスします。kubectl proxyとURLの指定が異なるので注意してください。

どちらの方法でもDashboardへのアクセスを終了する場合は、Ctrl + cでプロキシもしくはポートフォワードの実行を停止してください。

Tektonリソースをインポートする

Tekton DashboardからTektonのリソースをインポートして、パイプラインの設定を行ってみます。Tektonリソース(yamlファイル)のGitリポジトリを指定してインポートを行うことができます。はじめにDashboardの左側のメニューからImport Tekton resourcesを選択します。

項目 入力内容
Repository URL Tektonリポジトリを格納したGitリポジトリのURL
Namespace Tektonリソースを実行するネームスペース
Repository directory (optional) インポートするリポジトリのディレクトリ。指定しない場合場トップディレクトリが対象。
Service Account(optional) Tektonリソースを実行するサービスアカウント。デフォルトはtekton-dashboard

Import and Applyボタンを押すと、Tektonリソースのインポートと適用が実行されます。 ダッシュボードはデフォルトの設定で、サービスアカウントtekton-dashboard、ネームスペースtekton-pipelinesとして実行されています。 ネームスペースtekton-pipelinesのサービスアカウントtekton-dashboardには最低限の権限のみ付与されているため、作成したマニフェストファイルが権限不足で実行できない場合があります。

記事の執筆時点ではServiceAccountの新規作成などが、ダッシュボードのインポートからは行えません。一般的には、クラスタ管理者がServiceAccountの作成を行いますので、ダッシュボードの一般利用の権限としては正しいものと思われます。

今回の実行例では、cluster-adminの権限を付与したサービスアカウントを作成して、そのサービスアカウントを利用します。
ダッシュボードからインポートを行う前に、サービスアカウントと権限付与を行うマニフェストファイルを作成しておきます。

# dashboardAccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app: tekton-dashboard
  name: tekton-dashboard
  namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: dashboard-cluster-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: tekton-dashboard
  namespace: default

作成したマニフェストファイルをKubernetes上に適用しておきます。

$ kubectl apply -f dashboardAccount.yaml
serviceaccount/tekton-dashboard created

今回は前回の記事で作成したパイプラインの実行例で利用したTektonリソースをインポートしてみます。Repository URLNamespaceに以下の値を指定しました。

項目 入力内容
Repository URL https://github.com/sumomo-99/TektonSample.git
Namespace default
Repository directory (optional) tekton
Service Account(optional) tekton-dashboard

Import and Applyボタンを押すと、ボタンの下にリンクが表示されます。

リンクをクリックすることで、インポート(apply)の状態を確認することができます。

Docker Hub認証情報の作成

Docker Hubへイメージをプッシュするために、Docker Hubの認証情報をKubernetesのSecretに定義します。

前回の記事と同じファイルを利用します。ファイル内容の説明は、前回の記事を参照してください。

# secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: basic-user-pass
  annotations:
    tekton.dev/docker-0: https://index.docker.io/v1/
type: kubernetes.io/basic-auth
stringData:
  username: <username>
  password: <password>

作成したSecretをKubernetesに適用します。

$ kubectl apply -f secret.yaml
secret/basic-user-pass created

Pipelineを実行する

Tektonリソースのインポートが完了したので、Pipelineを実行してみます。
Import Tekton resourcesでPipelineRunをインポートして実行します。

項目 入力内容
Repository URL https://github.com/sumomo-99/TektonSample.git
Namespace default
Repository directory (optional) tekton_run
Service Account(optional) tekton-dashboard

Import and Applyボタンを押して、PipelineRunを実行してみましょう。しばらく待つと、ダッシュボード上のパイプラインのステータスが以下のように変化していきます。

すべてのタスクが緑色で表示されれば、パイプラインの実行は成功です。実行に失敗したタスクは赤字で表示されます。

さいごにkubectlコマンドでもPodが起動したのか確認をしておきましょう。

$ kubectl get pods
NAME                                                  READY   STATUS      RESTARTS   AGE
test-pipelinerun-build-image-q7mzd-pod-d4d77f         0/3     Completed   0          6m7s
test-pipelinerun-deploy-kubernetes-5p96g-pod-477bc3   0/3     Completed   0          5m27s
testapp-deployment-cdcf6bdb8-wxpxv                    1/1     Running     0          5m11s

正常にPod(testapp-deployment-cdcf6bdb8-wxpxv)が起動しているようです。

おわりに

本記事ではTekton PipelinesのWebベースのUIであるTekton Dashboardのインストール方法と概要を紹介しました。kubectlのコマンドラインベースでは、タスクやパイプラインの実行ログやステータスの確認に非常に手間がかかります。Tekton DashboardはGUIベースで簡単に実行ログやステータスを確認することでできます。便利なツールは積極的に利用してみて、便利さをどんどん周りに伝えていきましょう。

スカイアーチ ファンタジー研究室

スカイアーチ ファンタジー研究室

EasyDoggie