おうち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です。
Operatorで設定を変更する
TektonConfigカスタムリソースを編集してダッシュボードを読み取り専用にしてみます。
デフォルトだと以下の画像のように作成ボタンが表示されています。
リソースを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
もう一度ダッシュボードにアクセスすると、変更が反映されていると思います。
こうやって設定を一元管理するんですねー
ラズパイKubernetes環境でもTektonはすんなりインストールできました。
※2023/9/25追記
GitLabとTektonの連携
を書きました。