Tektonを使用してCI/CD-1を構築
16253 ワード
概要
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 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 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-pipelines
namespaceにはtekton-pipelines-controller
、tekton-pipelines-webhook
がインストールされます.# 실행 결과 확인
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!"
apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
generateName: hello-run-
spec:
taskRef:
name: hello
Tektonを使用してCI/CDを構築
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の作成
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
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
Reference
この問題について(Tektonを使用してCI/CD-1を構築), 我々は、より多くの情報をここで見つけました https://velog.io/@sgwon1996/Tekton으로-CICD-구축하기-1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol