Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Kubernetes Meetup Tokyo #20 / KubeCon Recap: Te...
Search
jyoshise
June 18, 2019
Technology
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Kubernetes Meetup Tokyo #20 / KubeCon Recap: Tekton
jyoshise
June 18, 2019
More Decks by jyoshise
See All by jyoshise
GitLab Duo Agent Platform + Local LLMサービングで幸せになりたい
jyoshise
0
870
米軍Platform One / Black Pearlに学ぶ極限環境DevSecOps
jyoshise
2
1.1k
AIがコード書きすぎ問題にはAIで立ち向かえ
jyoshise
14
15k
Nutanix Kubernetes PlatformでLLMを動かす話
jyoshise
0
580
CNDT2023_Nutanix_jyoshise
jyoshise
0
670
クラウドネイティブインフラおじさんがNutanixに入社することになったので以下略
jyoshise
0
1.3k
これは分散KVS? NoSQL? NewSQL? 謎の HarperDBにせまる
jyoshise
0
660
全てがクラウドネイティブで良いのか。その謎を明らかにすべく我々はエンプラの奥地に向かった
jyoshise
8
6.1k
Kubeadmによるクラスタアップグレード・その光と闇
jyoshise
3
4.8k
Other Decks in Technology
See All in Technology
おそらく日本で唯一のDevRelインターン生として
husengs7
0
170
Meet AgentCore Identity Consent Portal
hironobuiga
3
190
Datadog の学び方 - あるいは、オブザーバビリティを学ぶとは何か
mananyuki
1
430
今こそ知りたいAmplifyGen2
mkdev10
2
150
SREでアラート疲れを 解決しよう!
kairim0
1
200
SDDの運用にめげずに向き合った話
sansantech
PRO
0
130
全人類(ほぼ)AWS Organizations の上でAWSを利用している、その世界を知る話
htan
0
110
調査タスクをAIと乗り切る 〜過去の調査をナレッジ化し 調査手順をスキルにする〜
mot_techtalk
1
110
BedrockとLambdaで作る リアルタイム進行型推理ゲーム
kawametho
0
190
ログラスのマルチプロダクトを 支える認証基盤 〜テナントごとに異なる統制とどう向き合うか〜
dada4386
3
390
自主式軟體工廠
philipz
0
220
AgentCoreで実践するハーネスエンジニアリング
yakumo
1
280
Featured
See All Featured
From π to Pie charts
rasagy
1
390
Unsuck your backbone
ammeep
672
58k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Un-Boring Meetings
codingconduct
0
440
Test your architecture with Archunit
thirion
2
2.4k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
So, you think you're a good person
axbom
PRO
2
2.2k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
Scaling GitHub
holman
464
140k
Agile that works and the tools we love
rasmusluckow
331
22k
Marketing to machines
jonoalderson
1
5.8k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Transcript
Modern CI/CD with Tekton and Prow Automated via Jenkins X
Kubernetes Meetup #20 @jyoshise
Slide: https://static.sched.com/hosted_files/kccnceu19/ 98/Modern%20CI_CD%20with%20Tekton%20and %20Prow%20Automated%20via%20Jenkins%20X. pdf Video: https://www.youtube.com/watch?v=4EyTGYB7Gv A
whoami 3 • Junichi Yoshise / 吉瀬 淳一 • @jyoshise
• Chief Architect, Cloud Native Computing • Hewlett Packard Enterprise
4
私のふだんの仕事によくあるパターン DevOpsの見積もりをください。 コンテナの。 ( ゚Д゚)ざっくりしてんな!
「DevOpsがやりたい」とエンタープライズなお客さん(インフラ/運 用部門)が言ったとき • だいたい以下のようなことを意味している • インフラ構築の手間を減らしたい →コンテナで解決するんでしょ? • アプリケーションリリースの手間を減らしたい →CI/CDで解決するんでしょ?(開発ベンダーはCIやってるみたいだけど)
• クラウドネイティブっぽいことがやりたい →時代はクラウドネイティブなんでしょ? • というわけで、「クラウド Kubernetesネイティブな、コンテナアプ リケーションのCI/CD」の検討が始まる • やっぱ違うね、となることもしばしば
CI/CDのざっくりイメージ Code Build/UT IT Deploy Continuous Stage
レガシーなCI/CD さすがにGit (SVNとかまだ 見るけど) ビルドサーバー でMavenとか ステージング環 境でテスト実行 本番環境のアプ リケーション
サーバーにデプ ロイ Code Build/UT IT Deploy Continuous Stage ステージング環 境のアプリケー ションサーバー にデプロイ • Artifact • Trigger
Continuous Delivery Foundation • The Linux Foundationの下位組織(CNCFと横並び)として2019年3月に発足 • 夢はCI/CDのAPI標準化 •
https://cd.foundation
Continuous Delivery Summit Presentations: https://github.com/cdfoundation/presentat ions/tree/master/2019-summit-barcelona Video: https://www.youtube.com/watch?v=P7hFp bAJNVY&list=PL2KXbZ9- EY9RB8bVvmiSOqB39eNMs-fAe
CI/CDツールの生まれた時代 11 2011 2015 2018 2019 オンプレベアメタル/仮想マシン クラウド仮想マシン コンテナ Kubernetes
Kubernetes Nativeであることとは • あらゆるプロセスはコンテナとして実行できる • オブジェクトはDeclarative(宣言的)に記述される • 状態の変更は拡張可能なKubernetes APIを通じて行われる
レガシーなCI/CD さすがにGit (SVNとかまだ 見るけど) ビルドサーバー でMavenとか ステージング環 境でテスト実行 本番環境のアプ リケーション
サーバーにデプ ロイ Code Build/UT IT Deploy Continuous Stage ステージング環 境のアプリケー ションサーバー にデプロイ • Artifact • Trigger
Kubernetes NativeなCI/CD さすがにGit (SVNとかまだ 見るけど) ビルドサーバー でMavenとか ステージング環 境でテスト実行 本番環境のアプ
リケーション サーバーにデプ ロイ Code Build/UT IT Deploy Continuous Stage ステージング環 境のアプリケー ションサーバー にデプロイ • Artifact • Trigger • Source Repo • Dockerfile / Docker Image • Kubernetes Manifest / Template • 各タスクをKubernetes上で(それぞれのタスクに特化 したコンテナとして)実行 • スケール、ログ、認証などはKubernetesエコシステム を利用 • Eventing (webhook) • Kube API
突然ですがGitOpsについて • GitOps とは • Desired Stateを全てコードとして、Git Repositoryで管理する • Git
Repository上の状態と実環境の状態は常に一致させる(Continuous Deployment) •そのためのツールは必要 • 変更はGit Repositoryに対するPull Request → Merge • 実環境上でコマンドを叩くオペレーションは原則禁止 • 状態定義がDeclarativeにできることが前提 • Kubernetesに最適(みんな大好きYAML) 15
各レイヤーでのGitOpsが考えられる • アプリのGitOps • Pod, Service • いわゆるCI/CD • インフラのGitOps
• Ingress Controller, 共通の Operator/CRD(Rook, Prometheus)など • secretは除く • そもそもKubernetes自体 • CI/CDパイプラインのGitOps • Pipeline as Code 16
Kubernetes NativeなCI/CD さすがにGit (SVNとかまだ 見るけど) ビルドサーバー でMavenとか ステージング環 境でテスト実行 本番環境のアプ
リケーション サーバーにデプ ロイ Code Build/UT IT Deploy Continuous Stage ステージング環 境のアプリケー ションサーバー にデプロイ • Artifact • Trigger • 各タスクをKubernetes上で(それぞれのタスクに特化 したコンテナとして)実行 • スケール、ログ、認証などはKubernetesエコシステム を利用 パイプライン定義も Kubernetes Object • Source Repo • Dockerfile / Docker Image • Kubernetes Manifest / Template • Eventing (webhook) • Kube API
そこでTektonですよ • 出身はKnative: Kubernetes上でのPaaS/Serverlessプラットフォームを 実現するプロジェクト 18 Knative-build Knative-serving Knative-eventing Knative-build-
pipeline https://github.com/tektoncd
tektoncd/pipelineの実体 • Deployment: • controller • webhook 19 $ kubectl
apply -f https://storage.googleapis.com/tekton-releases/latest/release.yaml その他サブプロジェクト: • tektoncd/dashboard • ダッシュボード(Web UI) • tektoncd/cli • tkn(CLI) • tektoncd/catalog • Taskの見本帳 • CRD: • PipelineResource • Task • TaskRun • Pipeline • PipelineRun • ClusterTask
Example(簡単なPipeline) image build source Dockerfile Manifest template Deploy Tekton Manifests
GitHub Repo Pipeline DockerHub kaniko Manifest 加工 kubectl Kubernetes Pipeline Task PipelineResource Step
PipelineResource CRD image build source Dockerfile Manifest template Deploy Tekton
Manifests GitHub Repo Pipeline DockerHub kaniko Manifest 加工 kubectl Kubernetes Pipeline Task PipelineResource Step
PipelineResource CRD • TaskがInput/Outputとして使うリソースを 定義 • typeは現時点で以下の四つだけ • git :
Gitレポジトリ • image : コンテナイメージのレジストリ • cluster : Kubernetesクラスタ • storage : GCS 22 apiVersion: tekton.dev/v1alpha1 kind: PipelineResource metadata: name: git-tektondemo spec: type: git params: - name: revision value: master - name: url value: https://github.com/jyoshise/tekton-demo- app.git
Task CRD image build source Dockerfile Manifest template Deploy Tekton
Manifests GitHub Repo Pipeline DockerHub kaniko Manifest 加工 kubectl Kubernetes Pipeline Task PipelineResource Step
Task CRD • 実行するタスクを定義 • spec.inputs / spec.outputs でタスクの入力/ 出力となるリソースの型を指定
• 実際にどのPipelineResourceを使うかは PipelineRun/TaskRunで実行時に指定する • spec.stepsはコンテナのspec • stepは複数指定可能。順番に実行される 24 apiVersion: tekton.dev/v1alpha1 kind: Task metadata: name: deploy-using-kubectl spec: inputs: resources: - name: source type: git - name: image type: image params: - name: path description: Path to the manifest to apply - name: yqArg description: Arg passed to yq - name: yamlPathToImage description: The path to the image to replace in the yaml manifest (arg to yq) steps: - name: replace-image image: mikefarah/yq command: ["yq"] args: - "w" - "-i" - "${inputs.params.yqArg}" - "${inputs.params.path}" - "${inputs.params.yamlPathToImage}" - "${inputs.resources.image.url}" - name: run-kubectl image: lachlanevenson/k8s-kubectl command: ["kubectl"] args: - "apply" - "-f" - "${inputs.params.path}"
Catalog • Taskの見本帳 • Knative-buildプロジェク トもいずれこちらに統 合されるかも 25
Pipeline CRD image build source Dockerfile Manifest template Deploy Tekton
Manifests GitHub Repo Pipeline DockerHub kaniko Manifest 加工 kubectl Kubernetes Pipeline Task PipelineResource Step
Pipeline CRD • パイプラインを定義 • 複数のTaskを並べ、Taskごとにパラメー ターとinputs/outputsを宣言する • inputとして前のTaskのoutputを指定する ことで依存関係が指定できる
27 apiVersion: tekton.dev/v1alpha1 kind: Pipeline metadata: name: demo-pipeline spec: resources: - name: source-repo type: git - name: web-image type: image tasks: - name: build-web taskRef: name: build-docker-image-from-git-source params: ... - name: deploy-web taskRef: name: deploy-using-kubectl resources: inputs: - name: source resource: source-repo - name: image resource: web-image from: - build-web params: - name: path value: /workspace/source/manifests/deployment.yaml - name: yqArg value: "-d1" - name: yamlPathToImage value: "spec.template.spec.containers[0].image"
PipelineRun/TaskRun CRD • PipelineやTaskを起動するためには、 PipelineRun/TaskRunのオブジェクトを生 成する必要がある • Event Triggeringがまだ実装されていないため •
権限を要するTaskを実行するには、ここ でserviceAccountを指定する • PipelineResourceはここで指定する 28 apiVersion: tekton.dev/v1alpha1 kind: PipelineRun metadata: name: demo-pipeline-run-1 spec: serviceAccount: build-bot pipelineRef: name: demo-pipeline resources: - name: source-repo resourceRef: name: git-tektondemo - name: web-image resourceRef: name: image-tektondemo
いちおうDashboardもあります 29
Demo 30
Tektonに今のところ足りてないモノ • Event Triggering • Log Persistence • SCM support
• Pipeline Resource / Taskの拡張性 31
Tektonの使い方いろいろ 32 https://www.slideshare.net/ChristieWilson3/tekton-showcase-cdf-summit-kubecon-barcelona-2019
Jenkins X + Prow + Tekton • Prow https://github.com/kubernetes/test-infra/tree/master/prow •
Kubernetes自体のCI/CDのために開発された • 各種プラグインによりGitHub上でChatOpsを実現する • Jenkins X Pipelines (Tekton Mode) https://jenkins-x.io/getting-started/next-gen- pipeline/ • まだearly work(隠しモード的な)。たぶんGKEでしか動かない • PipelineはJenkinsfileではなくjenkins-x.yamlで記述される→Tekton Pipelineに内部で変換される • Pipelineの実行はTektonのPipeline Controllerが行う。Jenkins Serverがいらない • デモは動画見てください! 33
まとめ 34
まとめ • Kubernetesを拡張してなんでも載せていく方向性としては、Tektonは筋が いい、なぜなら • Kubernetesの上で実行するCI/CDパイプラインをKubernetes Nativeに記述できる • それによってCI/CDパイプラインも宣言的に管理できる •
とはいえ現時点では単体でCI/CDツールとして完結するものではない • Jenkins Xのように、他ツールがTektonを利用する動きはこれから出てくる のでは • なのでTekton流のPipeline as Codeに親しんでおいて損はない 35
Thank You 36