Open4

Tekton+kind雑記

reoringreoring

kindにtektonをインストールする

#!/bin/bash

## Create resources of tekton pipeline
kubectl apply -f https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.24.1/release.yaml

## Create resources of tekton triggers
kubectl apply -f https://storage.googleapis.com/tekton-releases/triggers/previous/v0.14.0/release.yaml
kubectl apply -f https://storage.googleapis.com/tekton-releases/triggers/previous/v0.14.0/interceptors.yaml

## Create resources of tekton dashboard
kubectl apply -f https://storage.googleapis.com/tekton-releases/dashboard/previous/v0.16.1/tekton-dashboard-release.yaml
reoringreoring

kindのingressってどうなるんだろ?

kind Ingress ここに詳細がある。

ドキュメントには、

  1. クラスタを作る
  2. Ingressコントローラを配置する。次のIngressコントローラは動作することがわかっている。
  • Ambassador
  • Contour
  • Ingress NGINX

と記述があるので、Ingress NGINXで作ってみる。

クラスタを作る。

clusterconfig.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  kubeadmConfigPatches:
  - |
    kind: InitConfiguration
    nodeRegistration:
      kubeletExtraArgs:
        node-labels: "ingress-ready=true"
  extraPortMappings:
  - containerPort: 80
    hostPort: 80
    protocol: tcp
  - containerPort: 443
    hostPort: 443
    protocol: tcp

このようにextraPortMappingsと、node-labelsを設定する。

次に、kind create cluster --name localcluster --config clusterconfig.yaml を実行してクラスタを作成する。クラスタ名は自由に変更してよい。

Ingress NGINXの配置

VERSION=$(curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/stable.txt)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/${VERSION}/deploy/static/provider/kind/deploy.yaml

Ingress NGINXのデプロイが完了するのを待つ。

kubectl wait --namespace ingress-nginx \
  --for=condition=ready pod \
  --selector=app.kubernetes.io/component=controller \
  --timeout=90s

サンプルのechoサービスで動作を確認する

サンプルのyamlを、次のコマンドで適用する。

kubectl apply -f https://kind.sigs.k8s.io/examples/ingress/usage.yaml

このyamlのコンテンツを見るには、curl https://kind.sigs.k8s.io/examples/ingress/usage.yaml | cut とする。

bar-appと、foo-appが、kubectl get podsなどで確認して、Runningになったら次のコマンドでリクエストしてみる。

curl localhost/foo # fooと表示される。
curl localhost/bar # barと表示される。

エラーなどが出ず、fooや、barがターミナルに表示されればIngress NGINXは正常に動作している。

reoringreoring

https://kind.sigs.k8s.io/examples/ingress/usage.yaml の中身。

kind: Pod
apiVersion: v1
metadata:
  name: foo-app
  labels:
    app: foo
spec:
  containers:
  - name: foo-app
    image: hashicorp/http-echo:0.2.3
    args:
    - "-text=foo"
---
kind: Service
apiVersion: v1
metadata:
  name: foo-service
spec:
  selector:
    app: foo
  ports:
  # Default port used by the image
  - port: 5678
---
kind: Pod
apiVersion: v1
metadata:
  name: bar-app
  labels:
    app: bar
spec:
  containers:
  - name: bar-app
    image: hashicorp/http-echo:0.2.3
    args:
    - "-text=bar"
---
kind: Service
apiVersion: v1
metadata:
  name: bar-service
spec:
  selector:
    app: bar
  ports:
  # Default port used by the image
  - port: 5678
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - http:
      paths:
      - pathType: Prefix
        path: "/foo"
        backend:
          service:
            name: foo-service
            port:
              number: 5678
      - pathType: Prefix
        path: "/bar"
        backend:
          service:
            name: bar-service
            port:
              number: 5678
---
reoringreoring

tektonのイベントトリガーを叩く

curl -X POST http://localhost \
  -H 'Content-Type: application/json' \
  -H 'X-Hub-Signature: sha1=2da37dcb9404ff17b714ee7a505c384758ddeb7b' \
  -d '{"head_commit":{"id": "main"},"repository":{"full_name": "reoring/hoge.git"}}'