開発者向け機能 - 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