Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2021/9/21 Kubernetes Novice Tokyo #13 ~Kubernet...

2021/9/21 Kubernetes Novice Tokyo #13 ~Kubernetes初心者がKnative Lambda Runtimeを紐解きながら触ってみた~

2021/9/21に開かれたKubernetes Novice Tokyo #13で、初心者向けセッション枠で発表した資料になります。
Kubernetes初心者向けに、Knative Lambda RuntimeというKubernetesクラスタ内でAWS Lambdaを実行できるリソースに関して、実際に動作確認しながら実働の裏側を簡単に紐解いており、内部のKnative, Tektonの動作を含んで説明しています。

Avatar for fujikenairplane

fujikenairplane

September 21, 2021

Other Decks in Technology

Transcript

  1. Knative Lambda Runtimeの概要 オンプレミス・マルチクラウド (k8s環境下)への置き換え Knative Serving Tekton AWS Lambda

    AWSのサーバーレスコンピューティングサービス サーバーのプロビジョニングや管理、ワークロード対応のクラスタース ケーリングロジックの作成、イベント統合の維持、ランタイムの管理を 行わずにコードを実行できる(FaaS)
  2.  2019/1にtriggermesh社(LF, CNCF加盟)が発表  現在はv1.9.0  開発思想  Knativeを利用するクラスタ上で、AWS Lambdaの完全なポータビリティを提供し、ファンクションを書

    き換える必要のないサーバレスクラウドインフラを実現する  利用できる言語 • Python, Node.js, Go, Ruby, Java (参考) Lambdaで利用できる言語 • Python, Node.js, Go, Ruby, Java, C#, Powershell  Knative ServingとTekton、Custom AWS Lambda runtimesを使ってAWS Lambdaの 環境をKubernetesクラスタ内のPodに構築する Knative Lambda Runtimeの概要
  3. Knative Lambda Runtimeの概要 Task.yaml Handler.py Service.yaml (Dockerfile) ② ⓪ ①

    Lambdaで実行したい関数を定義 したファイル Tektonを利用して、Custom AWS Lambda runtimesと実行したい関数を含んだLambda 実行環境Podを構築する際に使う、Container Imageをビルドする枠組みを作るファイル Tektonを利用してビルドしてImageを作成し、 Knative Servingを利用して、Tektonでビルド したContainer Imageから、 Lambda実行環 境Podを構築し、全体を管理するファイル
  4. Knative Lambda Runtimeの概要 Service Route Configuration Revision PipelineResource TaskRun Task

    Container Image Code Pod tm/aws-custom-runtime bootstrap aws/aws-lambda-python Handler.py Service
  5. Knative Lambda Runtimeの概要 Service Route Configuration Revision PipelineResource TaskRun Task

    Container Image Code Pod tm/aws-custom-runtime bootstrap aws/aws-lambda-python Handler.py Service ①Custom AWS Lambda runtimesとHandler.pyを含 んでビルドする枠組みを作る
  6. Knative Lambda Runtimeの概要 Service Route Configuration Revision PipelineResource TaskRun Task

    Container Image Code Pod tm/aws-custom-runtime bootstrap aws/aws-lambda-python Handler.py Service ②Taskの枠組みを利用する TaskRunを作成し、ビルド実 行してImageを作成する
  7. Knative Lambda Runtimeの概要 Service Route Configuration Revision PipelineResource TaskRun Task

    Container Image Code Pod tm/aws-custom-runtime bootstrap aws/aws-lambda-python Handler.py Service ③Knative Servingの Serviceを作成し、Revision がImageからPodを構築する
  8. Knative Servingを利用したアプリケーションのデプロイ  2018/7 Google Cloud Next’18で発表  現在はPre-release (v0.25.0)

     2019/11 GCPのサーバレスサービスであるCloudRun(AWSでいうところの Lambda)で基盤として利用されている(GA)  開発思想 Kubernetes上でインフラストラクチャの運用、管理が不要なサーバレスアーキテクチャ を実現する  機能 • Serving Istion等を利用して、運用・管理を楽にする機能、ゼロスケールでコンテナ管理 する機能 • Eventing イベントドリブンな処理を可能にする機能
  9. Knative Servingを利用したアプリケーションのデプロイ トラフィックをRevisionに紐づける。 KubernetesのIngress/Serviceリ ソースを作成し管理する Route, Configurationを管理し、 ワークロードのライフサイクル全体 を管理する。 KubernetesのDeploymentリ

    ソースのあるべき姿を定義する。 Revisionを作成し管理する。 Configurationのスナップショット。 KubernetesのDeploymentリソー スやKPA (KnativeAutoScaler) を作成する。 Knative Servingは運用・管理の際に4つのリソースを管理している
  10. Knative Servingを利用したアプリケーションのデプロイ Serviceへの外部からの アクセスを管理する 単一のエンドポイントを提 供する コンテナを内部に含み稼 働する Deploymentのレプリカ 数を負荷に応じて自動

    的にスケールさせる ReplicaSetを管理し、 アップデートやロールバック を実現する Podのレプリカを作成し、 指定した数のPodを維持 する
  11. Knative Servingを利用したアプリケーションのデプロイ Knative管理下のPodの挙動 Podが必要とされたら立ち上がり始める Podの中身にも依るが数秒~数十秒で 立ち上がる ※あまりにも時間がかかる場合は、最 低Pod数を1に設定することも可能 ※時間によってはタイムアウトしてしまう 可能性もあるため、アプリケーション側で

    工夫が必要になる 一定時間利用されないと、Podを終了 する KPA (Knative Pod Autoscaler) によりPodのスケーリングを行う デフォルトだとPodに対してリクエストがあった際にPodを起動、リクエストがないと自動的にPodを停止するという挙動となる 初回リクエスト時には、レスポンスに遅延が生じる可能性がある
  12. Tektonを利用したgithubからdockerhubへのビルド・デプロイ  Continuous Delivery Foundationプロジェクトのうちの一つ  Knative Buildがv0.7.0まで存在していたが、以降からはTektonを推奨  Cloud

    NativeなCI/CDソリューション  機能・コンポーネント • Pipelines: CI/CDワークフローの基礎となるブロック • Triggers: CI/CDワークフローのイベントトリガー • CLI: CI/CDワークフロー管理のコマンドラインインタフェース • Dashboard: Pipeline向けWeb UI
  13. Tektonを利用したgithubからdockerhubへのビルド・デプロイ PipelineResource Task TaskRun 1 2 3 Taskで利用するリソースを定義する 各Stepの内容や使用するContainer Image、パラメータを指定する

    Taskを実行するために利用する。実行する Taskの指定やTask内で利用する Input/Outputリソースを指定 ※必要に応じて、Secret(認証情報を保 存する)やServiceAccount(Podで認証 情報を利用する際に紐づける)を作成する
  14. Tektonを利用したgithubからdockerhubへのビルド・デプロイ PipelineResource Task TaskRun 1 2 3 Taskで利用するリソースを定義する 各Stepの内容や使用するContainer Image、パラメータを指定する

    Taskを実行するために利用する。実行する Taskの指定やTask内で利用する Input/Outputリソースを指定 Inputとなる、Dockerfile が置かれているgithubの URLを指定 Outputとなる、Docker Imageが置かれる予定の DockerHubを指定
  15. Tektonを利用したgithubからdockerhubへのビルド・デプロイ PipelineResource Task TaskRun 1 2 3 Taskで利用するリソースを定義す る 各Stepの内容や使用するContainer

    Image、パラメータを指定する Taskを実行するために利用する。実行する Taskの指定やTask内で利用する Input/Outputリソースを指定 どのImageを使ってどのよ うにビルドするのかを表す 各Stepを定義している パラメータとしてInputとな るgithubのパスを指定。 PipelineResourceを利 用している
  16. Tektonを利用したgithubからdockerhubへのビルド・デプロイ PipelineResource Task TaskRun 1 2 3 Taskで利用するリソースを定義す る 各Stepの内容や使用するContainer

    Image、パラメータを指定する Taskを実行に移すリソース。実行するTask の指定やTask内で利用するInput/Output リソースを指定 実行するTaskを指定する PipelineResourceを利 用し、input/outputのリ ソースを指定する
  17. Knative Lambda Runtimeの実践 Service Route Configuration Revision PipelineResource TaskRun Task

    Container Image Code Pod tm/aws-custom-runtime bootstrap aws/aws-lambda-python Handler.py Service ③Knative Servingの Serviceを作成し、Revision がImageからPodを構築する ①Custom AWS Lambda runtimesとHandler.pyを含 んでビルドする枠組みを作る ②Taskの枠組みを利用する TaskRunを作成し、ビルド実 行してImageを作成する
  18. Knative Lambda Runtimeの実践 task.yaml (抜粋) GitなどのコードレポジトリからDockerfileを持ってくる のではなく、Handler.py, Custom AWS Lambda

    runtimesを含むDockerfileをTask内で定義して いる ビルド手順等の枠組みを定義する部分
  19. Knative Lambda Runtimeの実践 HTTP request API Gateway Lambda 検証した簡易的アーキテクチャ AWS

    Lambda KLR 初回処理時間 146.15 ms 数 s (Podの起動時間) 処理時間 1.26 ms ~1 s メモリ 128 MB (52MB 利用) ~2 MB 利用しているメモリが大きいとはいえ、 やはり早いさすがAWS コンソール上で少し設定するだけで実 行できる
  20. 参考にしたもの 私自身まだまだ初心者ではございますが、これから始めようという方もいるかもしれないので、、 ・”Kubernetes完全ガイド 第2版” 著者:青山真也 言わずと知れた参考書、k8sとは?という段階で利用。全体的な理解に使えた。 ・Udemy “Certified Kubernetes Administrator

    (CKA) with Practice Tests” ・Udemy “Kubernetes Certified Application Developer (CKAD) with Tests” 参考書読むの疲れて手を動かして学習したいときに利用。図が非常にわかりやすい。資格勉強でも利用。 字幕でkubernetesを読み込んでくれていないのが少し悲しいところ。
  21. 【参考】 Custom AWS Lambda runtimes Service Route Configuration Revision PipelineResource

    TaskRun Task Container Image Code Pod tm/aws-custom-runtime bootstrap aws/aws-lambda-python Handler.py Service
  22. 【参考】 Custom AWS Lambda runtimes tm/aws- custom-runtime bootstrap aws/aws- lambda-python

    Handler.py Next Invocation API Invocation Response API Invocation Error API Initialization Error API bootstrap Handler (Function) Runtime API Invoke error error response event KLRアーキ内のPod AWS Lambda 実行環境 Invoke