Knative

7777 ワード

Knative概念


  • 2018年7月に発売された新プロジェクト

  • 3つの製品と機能
  • サービス:サーバレスアプリケーション管理、ルーティング、自動スケーリング、Blu-ray導入
  • イベント:イベントソースおよび転送構造
  • 構築:クラスタ内の構築および実行構造の定義->tektonパイプ
  • に変更されました
  • モニタ:grafana、prometheusなどのモニタ
  • を使用

  • こつ
  • アプリケーションの導入が容易
  • cpu,memory,コンテナパラメータ
  • を有効/無効にする
  • Pass、Faas導入可能
  • サーバ開発導入なし
  • 自動拡張処理、要求に基づく活性化、および遠隔測定可能な構造
  • .
  • buildを使用してソース・リポジトリからDockerを構築および導入する構造

  • istioにバインド
  • サービスmesh機能
  • を使用

  • こつこうぞう
  • Knativeアプリケーションの導入

  • service
  • はrunLastest->構成->テンプレート構造の改訂として配備され、上記の関係から管理と通信が表示されます.
  • apiVersion: serving.knative.dev/v1alpha1
    kind: Service
    metadata:
      name: "helloworld"
    spec:
      runLatest:
        configuration:
          revisionTemplate:
            spec:
              container:
                image: "gcr.io/knative-samples/helloworld-go"
                env:
                  - name: "TARGET"
                    value: "world"
    kubectl get configuration,revision,route
    
    NAME                                           CREATED AT
    configuration.serving.knative.dev/helloworld   28m
    NAME                                            CREATED AT
    revision.serving.knative.dev/helloworld-00001   28m
    NAME                                   CREATED AT
    route.serving.knative.dev/helloworld   28m

  • istio gatewayによる受信trafaricの定義と確認

  • Istioの有効化
  • が配備されると、istioベースのknactive-ingressgatewayという単一の共通負荷バランサが定義され、生成されたknactiveアプリケーションはここで定義されたアドレスを介して入力されます.
  • istiogatewayの外部IPを実際の外部接続のIP
  • に変更する必要がある.
  • また、Knactive-ingress Gatewayのドメインを変更
  • kubectl get service --namespace=istio-system knative-ingressgateway
  • ここでは
  • のホストアドレス*です.default.example.comとして定義します.

  • コツアプリケーションの設定
  • kubectl get ksvc helloworld --output jsonpath='{.status.domain}'
  • ここのドメイン名アドレスはhelloworldです.default.example.comとして定義します.

  • テストと検証方法
  • curl -H "Host: helloworld.default.example.com" http://IP_ADDRESS
    Hello world!
  • Knative (blue/green deploy), routing traffic


  • blue/green deployとは、新しいバージョンのアプリケーションがデプロイメントポリシーを使用して作成された場合、version 2(green)にトラフィックの一部を送信することで、実行環境に問題があるかどうかを確認し、トラフィックを増加させながらVersion 2に完全に変更する方法論です.
  • これもCanianrealese、testと呼ばれています.

  • この点をテストするためにyamlを修正する必要があります
  • 以前に導入されたものとは異なり、サービスを定義する必要があります.
  • runLatestおよびTemplateの改訂が必要な部分
  • のバージョンとリビジョンに変更し、複数のリビジョンをテストできます.

  • 初期v 1導入
  • apiVersion: serving.knative.dev/v1alpha1
    kind: Service
    metadata:
      name: canary
    spec:
      runLatest:
        configuration:
          revisionTemplate:
            spec:
              container:
                image: gcr.io/knative-samples/knative-route-demo:blue
                env:
                - name: T_VERSION
                  value: "blue"

  • 配備後、改訂名がcanary-001(仮称)であることを確認できます.

  • v 2とともに青/緑を配置
  • バージョン、リビジョン、rolloutPercent情報が含まれていることを確認できます.
  • この場合、リビジョンは偽の名前で、下図に示すように、配布後canary-001、canary-002はリビジョン情報に基づいて名前を変更する必要がある場合があります.
  • apiVersion: serving.knative.dev/v1alpha1
    kind: Service
    metadata:
      name: canary
    spec:
      release:
        revisions: ["canary-00001", "canary-00002"] # [current, candidate]
        rolloutPercent: 20                          # 20% to green revision
        configuration:
          revisionTemplate:
            spec:
              container:
                image: gcr.io/knative-samples/knative-route-demo:green
                env:
                - name: T_VERSION
                  value: "green"
  • はこのように配布され、curlでテストされ、canary−002(green)に約20%が送信されると決定することができる.
  • を参照してください.releaseモードに構成されている場合は、要求を代表ドメインに送信し、パーセンテージで分割できますが、特定のドメインに送信することもできます.
  • は、ドメイン送信要求を次の複数のバージョンで指定できます.
  • blue : current.canary.default.example.com
  • green : candidate.canary.default.example.com
  • 特定:最新.canary.default.example.com
    最近のバージョンでなくても、「リリースリビジョン」フィールド
  • .
  • ルートの情報を見て...次の定義を確認できます.
  • これもreleaseモードにおいて、ルーティング割り当てトラフィックの機能を見ることができる.
  • runLastetは、1つの場所100に送信される.
  • kubectl describe route canary
    
    ...
    Status:
      Traffic:
        Name:           current
        Percent:        80
        Revision Name:  canary-00001
        Name:           candidate
        Percent:        20
        Revision Name:  canary-00002
        Name:           latest
        Percent:        0
        Revision Name:  canary-00002      

    Autoscale

  • AutoscaleはKnactiveが提供する内蔵機能で、hpa(cpu)クバーネディスが提供するAutoscaleのほか、同時要求のConcurrencyと1秒当たりの処理要求数のRPSも提供されている.
  • はデフォルトでConcurrencyに設定されており、デフォルトの同時要求が200の場合、podの数が増加します.
  • に示すようにrunLatestでサービスを導入し、Heyというlibraryでテストした結果、podの数が増加しました.
  • より詳細な結果を表示するには、監視を使用することが望ましい.

    Build->Tekton Pipelines

  • は現在、Tekton Pipplinesプロジェクトに変更され、適用されていますが、簡単な定義で何をしたいのかを理解したいと考えています.
  • Kubernetesではbuild、buildTemplate、ClusterBuildTemplate APIが提供されており、ユーザーがAPIを定義して配置する場合、定義された内容に基づいてgit pull、docker build、docker pushを行うことができ、JenkinsのCI機能と同様である.
  • の機能は次のとおりです.
  • KubernetesのAPIによって提供され、ジョブの実行中にPodが生成され、完了時に完了する.
  • 部分Pipilineを構成し、Git pull、Docker build/pushのステップ操作を実現する.
  • Build API
  • を使用
    apiVersion: build.knative.dev/v1alpha1
    kind: Build
    metadata:
      name: example-build
    spec:
      source:
        git:
          url: "https://github.com/knative/docs.git"
          revision: "v0.1.x"
        subPath: "serving/samples/helloworld-go/"
      steps:
      - name: build-and-push
        image: "gcr.io/kaniko-project/executor:v0.6.0"
        args:
        - "--dockerfile=/workspace/Dockerfile"
        - "--destination=gcr.io/<your-project-id>/helloworld-go:v1"

  • 内部にステージがあります...
  • build-step-credential-initializer:Git認証情報を初期化します(この場合は存在しません).
  • build-step-git-source:gitリポジトリを/workspaceディレクトリにインポートします.
  • build-step-build-and-push:上記で指定したKaniko構築手順を実行します.

  • BuildTemplate, ClusterBuildTemplate
  • apiVersion: build.knative.dev/v1alpha1
    kind: BuildTemplate
    metadata:
      name: kaniko
    spec:
      parameters:
      - name: IMAGE
        description: name of the image to be tagged and pushed
      steps:
      - name: build-and-push
        image: "gcr.io/kaniko-project/executor:v0.6.0"
        args: ["--destination=${IMAGE}"]
        
        
    ---
    apiVersion: build.knative.dev/v1alpha1
    kind: Build
    metadata:
      name: templatized-build
    spec:
      source:
        git:
          url: "https://github.com/knative/docs.git"
          revision: "v0.1.x"
        subPath: "serving/samples/helloworld-go/"
      template:
        name: kaniko
        arguments:
          - name: IMAGE
            value: "gcr.io/<your-project-id>/helloworld-go:v2"
  • に示すようにgitフェーズとdockerフェーズをテンプレートとして定義して分割することができる.
  • は、複数の段階に分けることができる.
  • その他の構築手順
    構成
  • では、ソース、リポジトリ、ボリュームのマウント機能が必要になる場合があります.いずれもオプションで構成されています.
  • https://codelabs.developers.google.com/codelabs/knative-intro#0