Tektonを使用してCI/CD-1を構築

16253 ワード


概要

  • Tekton:Cloud Nativeオープンソース
  • Tektonは、Step、Task、TaskRun、Pipeline、PipelineをKubernetsクライアントリソース(CRD)として定義し、Kubernets内部で実行します.
  • CRD:CustomResourceDefinition、Kubernets Resourceを直接定義および使用できます.
  • Tekton構造


    Tekton Pipeline Entities



  • Step:Tektonのデフォルトの作業ユニットでは、Git clone、Image Build、Deployなど、さまざまなタスクを実行できます.

  • Task:これは順番に並べられたStepのセットです.TektonはTaskをKubertes Podとして実行し、内部Stepに同じ環境を提供したり、KubernetsボリュームをWorkspaceにロードしたりすることができます.

  • TaskRun:TaskRunを単一Taskを実行する役割として作成すると、Podが生成され、実行結果がログで表示されます.

  • Pipeline:タスクの実行条件をシーケンスタスクのセットに設定できます.

  • PipelineRun:PipelineRunを単一のPipelineを実行する役割として作成する場合は、PipelineのTaskを参照してTaskRunを作成してください.

  • Workspace:TaskRunは、TaskRunの実行に必要なボリュームを定義します.永続ボリュームターゲットでは、他のタスクとボリュームを共有したり、Secret、ConfigMap、Service Accountを使用して設定情報を受信したりできます.

  • Parameter:Taskで必要な値を事前に定義し、Pipeline、TaskRun、PipelineRunに入力します.
  • Tektonが使用するKubernetes Resource



  • Secret:GitHub、DockerHubなどの外部サービスへの接続に必要な資格情報を定義します.

  • ConfigMap:ローカルKubernetesクラスタに接続するために必要なkubeconfig値を定義します.

  • ServiceAccount-Secretを接続して使用します.

  • 永続ボリュームターゲット:Taskの実行に必要なボリュームを定義します.
  • Tektonは便利なツールを提供しています


  • Tekton Dashboard-Webベースのツール

  • Tekton Catalog-Task、Pipelineのリポジトリを共有できる

  • Webベースのツールで、Tekton Hub-Tekton Catalogにアクセス
  • Tekton環境の設定


    Kubernetes内部でTektonを使用してCI/CDパイプラインを構築するために環境を構成する方法を見てみましょう.

    Tekton ResourceとDashboardのインストール

    # Tekton Resource 설치
    kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
    # Tekton Dashboard 설치
    kubectl apply --filename https://github.com/tektoncd/dashboard/releases/latest/download/tekton-dashboard-release.yaml
  • Tekton Pipeline,インストールTektonコンポーネント
  • tekton-pipelinesnamespaceにはtekton-pipelines-controllertekton-pipelines-webhookがインストールされます.
  • Tektonのお客様向けリソース:Task、Pipeline、TaskRun、PipelineRun.
  • Tekton DashBoardをインストールしてTekton Pipelineの実行結果
  • を可視化
    # 실행 결과 확인
    vagrant@node-1:~$ k get all -n tekton-pipelines
    
    NAME                                              READY   STATUS    RESTARTS   AGE
    pod/tekton-dashboard-7487777d44-dl2mf             1/1     Running   2          54d
    pod/tekton-pipelines-controller-99b764966-tnwxj   1/1     Running   2          54d
    pod/tekton-pipelines-webhook-55c9dd7446-qnjjh     1/1     Running   2          54d
    
    NAME                                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                              AGE
    service/tekton-dashboard              ClusterIP   10.105.118.80    <none>        9097/TCP                             54d
    service/tekton-pipelines-controller   ClusterIP   10.103.122.232   <none>        9090/TCP,8008/TCP,8080/TCP           54d
    service/tekton-pipelines-webhook      ClusterIP   10.111.117.100   <none>        9090/TCP,8008/TCP,443/TCP,8080/TCP   54d
    
    NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/tekton-dashboard              1/1     1            1           54d
    deployment.apps/tekton-pipelines-controller   1/1     1            1           54d
    deployment.apps/tekton-pipelines-webhook      1/1     1            1           54d

  • port-forwardまたはingressでTekton Dashboardのサービスを外部に露出すると、次の画面が表示されます.

  • kubectl port-forward service/tekton-dashboard 9097 --namespace=tekton-pipelines
  • パイプライン実行結果の表示
  • パイプライン実行ログの表示
  • apiVersion: tekton.dev/v1beta1
    kind: Task
    metadata:
      name: hello
    spec:
      steps:
        - name: hello
          image: ubuntu
          command:
            - echo
          args:
            - "Hello World!"
  • ubuntuイメージにHello WorldのHello Task
  • を出力
  • kubectl apply -f task-hello.yamlによるTask
  • の作成
    apiVersion: tekton.dev/v1beta1
    kind: TaskRun
    metadata:
      generateName: hello-run-
    spec:
      taskRef:
        name: hello
  • HelloTaskのTaskRun
  • kubectl create -f taskRun-hello.yamlによるTaskRun
  • の作成
  • port-forward Tektonダッシュボードで結果を表示
  • Tektonを使用してCI/CDを構築

  • 特定のラベルをハブにプッシュした後、画像をjibに変換します.Tektonでパイプラインを作成し、ドッキングステーションとローカルクラスタにプッシュします.
  • 最終目標は、前の文書で作成したローカルクラスタに配備された配備イメージを置き換えることです.
  • Tektonの実行に必要なK 8 Sリソースの作成


    Persistent Volume & Claim


  • Tektonを実行するには、Taskごとに使用されるボリュームが必要です.

  • 永続ボリューム、永続ボリュームターゲットを定義します.

  • 実際に使用するには、永続ボリュームターゲット(elbなど)を動的に構成するか、ローカルクラスタ上でnfsを構成して永続ボリュームターゲットを動的に割り当てる必要があります(ただし、この文書ではhostPathを使用して永続ボリュームを割り当て、簡単なパイプラインプレゼンテーションを行う).

  • hostPath:フィード上で実行されるフィードとして使用可能なボリュームとして、ローカルファイルシステム内のファイルとディレクトリを提供します.

  • 永続ボリュームターゲットは、StorageClassNameによって永続ボリュームを検索し、正常に接続されたときにバインドされます.
  • apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: task-pv-volume
      labels:
        type: local
    spec:
      storageClassName: manual
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: "/mnt/data"
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: task-pv-claim
    spec:
      storageClassName: manual
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi
    
    ~/Desktop/lion/last/devopsTest/k8s/tekton kubectl get pv
    NAME             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                   STORAGECLASS   REASON   AGE
    task-pv-volume   5Gi        RWO            Retain           Bound    default/task-pv-claim   manual                  3m14s
    
    ~/Desktop/lion/last/devopsTest/k8s/tekton kubectl get pvc
    NAME            STATUS   VOLUME           CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    task-pv-claim   Bound    task-pv-volume   5Gi        RWO            manual         3m13s

    マッピングの構成、Secretの作成

  • Git,Docker Hub接続に必要なSecret情報,クラスタ接続に必要なKubeconfig情報
  • apiVersion: v1
    kind: Secret
    metadata:
    	name: git-credential
      annotations:
        tekton.dev/git-0: https://github.com
    type: kubernetes.io/basic-auth
    stringData:
      username: <cleartext username>
      password: <cleartext password>
    ---
    apiVersion: v1
    kind: Secret
    metadata:
     name: docker-credential
     annotations:
       tekton.dev/docker-0: https://index.docker.io
    type: kubernetes.io/basic-auth
    stringData:
     username: <cleartext username>
     password: <cleartext password>
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: tekton-sa
    secrets:
      - name: git-credential
      - name: docker-credential
  • gitおよびdockerの認証にはbasic-authモード
  • が使用されます.
  • GitHubパスワードに個人Token
  • を入力
  • GitHub Enterprise、専用Docker Registryを使用するには、コメントのアドレス
  • を変更してください.
  • kubectl create configmap kubeconfig --from-file="/path/to/kubeconfig"コマンドによりkubeconfigをconfigmapにする.
  • Desktop/lion/last/devopsTest/k8s/tekton kubectl get secret
    NAME                  TYPE                                  DATA   AGE
    default-token-d8csp   kubernetes.io/service-account-token   3      27h
    docker-credential     kubernetes.io/basic-auth              2      2m30s
    git-credential        kubernetes.io/basic-auth              2      2m30s
    
    Desktop/lion/last/devopsTest/k8s/tekton kubectl get configmap
    NAME         DATA   AGE
    kubeconfig   1      66s

    Reference

  • https://tekton.dev/docs/overview/