おうちKubernetesにTektonインストール

TektonはKubernetes上で動作するクラウドネイティブなCI/CDツールです。
オープンソースで手軽に試せるので自宅のKubernetes環境にインストールしてみました。

いつもの如くラズパイKubernetesを利用します。
構築手順はこちら を参考にしてください。
MetalLBとIngressが追加で必要です。

Tekton Operatorでインストール

Tekton Operator は Tektonコンポーネントを管理してくれるらしいので、
Operatorを使ってTektonをインストールします。

OLMに馴染みがないので今回はhelmでインストールします。
ドキュメントはこちら

ubuntu@k8s1:~$ git clone https://github.com/tektoncd/operator.git
Cloning into 'operator'...
remote: Enumerating objects: 55883, done.
remote: Counting objects: 100% (5559/5559), done.
remote: Compressing objects: 100% (3013/3013), done.
remote: Total 55883 (delta 2246), reused 5264 (delta 2114), pack-reused 50324
Receiving objects: 100% (55883/55883), 86.52 MiB | 11.32 MiB/s, done.
Resolving deltas: 100% (28371/28371), done.
Updating files: 100% (10421/10421), done.

ubuntu@k8s1:~$ helm install tekton-operator -n tekton-operator --create-namespace --set installCRDs=true ./operator/chart
NAME: tekton-operator
LAST DEPLOYED: Sat Sep  2 19:20:50 2023
NAMESPACE: tekton-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None

まずOperatorがRunningになります。

NAMESPACE                  NAME                                                      READY   STATUS      RESTARTS        AGE
tekton-operator            tekton-operator-5879dc4776-6zsts                          2/2     Running     0               54s
tekton-operator            tekton-operator-webhook-547f49c7bf-czz28                  1/1     Running     0               54s

数分待てば、インストール完了すると思います。

NAMESPACE                  NAME                                                      READY   STATUS      RESTARTS        AGE
tekton-operator            tekton-operator-5879dc4776-6zsts                          2/2     Running     0               4m19s
tekton-operator            tekton-operator-webhook-547f49c7bf-czz28                  1/1     Running     0               4m19s
tekton-pipelines           tekton-chains-controller-7496dbbf48-vmwtv                 1/1     Running     0               88s
tekton-pipelines           tekton-dashboard-7596bc9fbd-h99nk                         1/1     Running     0               63s
tekton-pipelines           tekton-operator-proxy-webhook-7688bbcd5b-k4p7l            1/1     Running     0               3m16s
tekton-pipelines           tekton-pipelines-controller-5cc97755d-jwtcf               1/1     Running     0               3m24s
tekton-pipelines           tekton-pipelines-remote-resolvers-74b6d4974c-dvr2w        1/1     Running     0               3m24s
tekton-pipelines           tekton-pipelines-webhook-799d966779-xd24p                 1/1     Running     0               3m20s
tekton-pipelines           tekton-triggers-controller-55b574bf75-mzxgk               1/1     Running     0               2m22s
tekton-pipelines           tekton-triggers-core-interceptors-6ff74cdcb5-4ppwp        1/1     Running     0               2m21s
tekton-pipelines           tekton-triggers-webhook-7d57796565-l7rgx                  1/1     Running     0               2m21s

カスタムリソースを確認します。
Profileがデフォルトでallなのでダッシュボードも入ってます。
バージョンここで確認できるようですね。

ubuntu@k8s1:~$ kubectl get TektonConfig,TektonPipeline,TektonDashboard,TektonInstallerSet,TektonResults,TektonTrigger --all-namespaces
NAME                                      VERSION   READY   REASON
tektonconfig.operator.tekton.dev/config   v0.67.0   True    

NAME                                          VERSION   READY   REASON
tektonpipeline.operator.tekton.dev/pipeline   v0.47.0   True    

NAME                                            VERSION   READY   REASON
tektondashboard.operator.tekton.dev/dashboard   v0.35.0   True    

NAME                                                                        READY   REASON
tektoninstallerset.operator.tekton.dev/chain-jk6nn                          True    
tektoninstallerset.operator.tekton.dev/chain-secret-hhg75                   True    
tektoninstallerset.operator.tekton.dev/dashboard-main-deployment-r6cs5      True    
tektoninstallerset.operator.tekton.dev/dashboard-main-static-kfqz7          True    
tektoninstallerset.operator.tekton.dev/pipeline-main-deployment-92zq8       True    
tektoninstallerset.operator.tekton.dev/pipeline-main-static-9wl6c           True    
tektoninstallerset.operator.tekton.dev/tektoncd-pruner-rvwkb                True    
tektoninstallerset.operator.tekton.dev/trigger-main-deployment-6r56f        True    
tektoninstallerset.operator.tekton.dev/trigger-main-static-rxjf5            True    
tektoninstallerset.operator.tekton.dev/validating-mutating-webhoook-vtb2p   True    

NAME                                        VERSION   READY   REASON
tektontrigger.operator.tekton.dev/trigger   v0.24.0   True

ダッシュボードにアクセスする

こちらのドキュメント に書いてあるとおり、
デフォルトだとクラスタ外からダッシュボードにアクセスできないので、
Ingressでアクセスします。

ubuntu@k8s1:~$ DASHBOARD_URL=dashboard.domain.tld
ubuntu@k8s1:~$ kubectl apply -n tekton-pipelines -f - <<EOF
> apiVersion: networking.k8s.io/v1
> kind: Ingress
> metadata:
>   name: tekton-dashboard
>   namespace: tekton-pipelines
> spec:
>   rules:
>   - host: $DASHBOARD_URL
>     http:
>       paths:
>       - pathType: ImplementationSpecific
>         backend:
>           service:
>             name: tekton-dashboard
>             port:
>               number: 9097
> EOF
ingress.networking.k8s.io/tekton-dashboard created

なんかアドレス2個ありますが、ひとまず手元PCのhostsを編集して名前解決します。

NAME                                         CLASS   HOSTS                  ADDRESS                     PORTS   AGE
ingress.networking.k8s.io/tekton-dashboard   nginx   dashboard.domain.tld   192.168.0.52,192.168.0.53   80      45s

ブラウザでダッシュボードが表示できればOKです。

tekton_01.png

Operatorで設定を変更する

TektonConfigカスタムリソースを編集してダッシュボードを読み取り専用にしてみます。

デフォルトだと以下の画像のように作成ボタンが表示されています。

tekton_02.png

リソースをeditして、readonlyをtrueに書き換えます。

ubuntu@k8s1:~$ kubectl edit TektonConfig config

spec:
  dashboard:
    readonly: true

tektonconfig.operator.tekton.dev/config edited

editした途端、dashboadのpodが再作成されます。

NAMESPACE                  NAME                                                      READY   STATUS        RESTARTS        AGE
tekton-pipelines           tekton-dashboard-5887d8648f-mxv28                         1/1     Running       0               4s
tekton-pipelines           tekton-dashboard-7596bc9fbd-h99nk                         1/1     Terminating   0               142m

もう一度ダッシュボードにアクセスすると、変更が反映されていると思います。

tekton_03.png

こうやって設定を一元管理するんですねー
ラズパイKubernetes環境でもTektonはすんなりインストールできました。

※2023/9/25追記
GitLabとTektonの連携 を書きました。