開発者向け機能 - OpenShift Pipelines / OpenShift GitOps
開発者機能
OpenShift Container Platform
- 開発者向け機能の位置付け
- S2Iビルド/Red Hat 公式コンテナイメージ
- CodeReady Workspaces(IDE)
- OpenShift Pipelines/OpenShift GitOps(CICD)
- OpenShift Serverless
OpenShift Virtualization
OpenShiftで提供するCI/CDツール
OpenShift Pipelines
OpenShift GitOps
OpenShift Pipelines
- Built for Kubernetes
-
- Kubernetesネイティブな宣言型CI/CDツール
- 中央サーバーの管理、プラグインの調整からの脱却
- オンデマンドな拡張性
-
- 独立したコンテナ内で実行・拡張されるパイプライン
- 再現性のある予測可能な結果
- セキュアなパイプラインの実行
-
- OpenShiftのRBACと連携し、アプリケーションのセキュリティポリシーと整合性が取れる安全なパイプライン
- 高いユーザービリティ
-
- OpenShiftのGUIや専用CLIを使ったパイプライン作成
- OperatorHubを使ったインストール・アップグレード
- 既存TaskとPipelineの利用(Tekton Hub)
OpenShift Pipelinesのコンポーネント
- Tekton Pipelines
- CICDにおける各タスクとパイプラインの定義、実行
- Tekton Triggers
- Gitリポジトリのイベントを契機としたタスク/パイプラインのトリガー
- Tekton Catalog
- 一般公開されている共通利用可能なタスク集
Tekton Pipelinesのカスタムリソース
Task/PipelineによるCICDパイプライン構築
- CICDパイプラインにおける一つ一つのアクションをTaskとして定義
- Taskを組み合わせてPipelineを構築
- 一度定義したTask/Pipelineは入力するパラメータを変えることで再利用可能
apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: hello-world spec: steps: - name: first-step image: registry.access.redhat.com/ubi8/ubi-minimal:latest command: ["echo"] args: ["hello world"] apiVersion: tekton.dev/v1beta1 kind: Pipeline metadata: name: hello-pipe spec: tasks: - name: hello-world-task taskRef: name: hello-world
Task/Pipelineの実行
TaskRun
- Taskを実行するためのカスタムリソース
- Task実行時に必要なパラメータを渡す
PipelineRun
- Pipelineを実行するためのカスタムリソース
- Pipeline実行時に必要なパラメータを渡す
- Pipelineで定義された内容に基づきTaskRunを作成
- Task間でデータを受け渡すためのPVを定義
apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: generateName: pipeline-run- spec: pipelineRef: name: hello-pipe params: - name: git-url value: 'https://gitlab.com/.../...' - name: git-revision value: 'main' … workspaces: - name: shared-workspace persistentVolumeClaim: claimName: shared-workspace - name: temp-dir emptyDir: {}
Tekton Triggersのカスタムリソース
TriggerTemplate
- Webhookを受け取った際に作成するリソース(PipelineRun、等)の定義
TriggerBinding
- Webhookで受け取ったJSONからPipelineRunに渡すパラメータの定義
EventListner
- Webhookの受け口(Service+Pod)の作成と、使用するTriggerTemplate /TriggerBindingの指定
Interceptorsによるフィルタリング
トリガー実行条件の詳細化
- Webhookに設定したSecretを利用することで特定のリポジトリからのWebhookのみ許可
- Gitイベントの種類や、実行対象のブランチを限定したパイプラインの実行
apiVersion: triggers.tekton.dev/v1alpha1 kind: EventListener metadata: name: test-event-listener spec: serviceAccountName: sample-sa triggers: - bindings: - ref: test-trigger-binding template: ref: test-pipeline-template interceptors: - github: secretRef: ecretName: github-webhook secretKey: secretkey eventTypes: - push - cel: filter: "body.ref == \"refs/heads/master\""
OpenShift GitOps
- 宣言的なデプロイメントの実現
-
- Gitに記録されるマニフェスト情報を正とするデプロイメント
- マニフェストからの逸脱(ドリフト)の検知と自動修正
- マルチクラスタへの対応
-
- 複数のOpenShift, Kubernetesクラスタにおけるデプロイメントの管理・制御
- 複雑なデプロイ戦略への柔軟な対応
- デプロイメントと環境の可視化
-
- デプロイメントとKubernetesリソースの可視化
- デプロイメント履歴の表示とロールバック
- 自動的なインストールと構成
-
- OperatorHubを使った自動的なインストール・構成・アップグレード
Argo CDのカスタムリソース
Application
- デプロイ先クラスタ、NameSpaceを指定
- 同期(Sync)するGitリポジトリを登録
- 180秒ごとにリポジトリの状態をチェック、新たなcommitがあればそれを自動デプロイ
- ❶
- Gitでリソースが削除されたらクラスタからも削除
- ❷
- クラスタに直接加えられた変更を検知し、リポジトリの状態に合わせ修正
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: app-develop namespace: openshift-gitops labels: app: node-build-config-openshift environment: dev spec: destination: namespace: app-develop server: https://kubernetes.default.svc project: dev-health source: kustomize: path: deploy/overlays/dev repoURL: https://gitlab.com/.../... targetRevision: main syncPolicy: automated: prune: true selfHeal: true syncOptions: - ApplyOutOfSyncOnly=true - CreateNamespace=true