コンテンツにスキップ

機能と拡張フラグ

Knative APIはポータブルになるように設計されており、ユーザーデプロイメントの特定の実装の詳細を抽象化しています。 APIの目的は、ユーザーが選択したプラットフォーム内で可能な追加機能と拡張機能を表面化できるようにすることです。

このドキュメントでは、2つの概念を紹介します。

機能
Knative APIへの機能の導入を段階的に行う方法。
拡張機能
Knative APIのポータブルな概念を超えてKnativeを拡張する方法。

フラグの構成

機能と拡張機能は、フラグによって制御されます。

フラグは、knative-serving名前空間のconfig-features ConfigMapで定義できます。

フラグには、次の値を指定できます。

有効
機能または拡張機能が有効になり、現在使用中です。
許可
機能または拡張機能は有効になっており、たとえば、リソースに追加のアノテーションまたはスペック構成を使用することで使用できます。
無効
機能は使用できません。

ライフサイクル

機能と拡張機能がKnativeに導入されると、3つのステージのライフサイクルに従います。

アルファステージ
バグが含まれている可能性があります。
機能のサポートは、予告なしにいつでも削除される可能性があります。
APIは、後のソフトウェアリリースで、予告なしに古いリリースと互換性がなくなるような方法で変更される可能性があります。
バグのリスクの増加と長期的なサポートの欠如のため、短期的なテストクラスターでのみ使用することをお勧めします。
ベータステージ
機能は十分にテストされており、有効にしても安全です。
全体的な機能のサポートは削除されませんが、詳細は変更される可能性があります。
オブジェクトのスキーマとセマンティクスは、後続のベータリリースまたは安定版リリースで互換性のない方法で変更される可能性があります。 この場合、次のバージョンに移行するための手順が提供されます。 これらのタイプの変更では、APIオブジェクトの削除、変更、または再作成が必要になる場合があり、機能に依存するアプリケーションでダウンタイムが必要になる場合があります。
後続のリリースで互換性のない変更が発生する可能性があるため、ビジネスに不可欠ではない用途にのみお勧めします。 独立してアップグレードできる複数のクラスターがある場合は、この制限を緩和できる可能性があります。
一般公開(GA)ステージ
機能または拡張機能の安定版は、公式の安定版Knativeリリースに含まれています。

機能のライフサイクルステージ

機能はフラグを使用して、Knative APIへの新しい変更を安全に導入します。 次の定義は、さまざまなステージでの機能のデフォルトの実装を説明しています。

アルファステージ
機能はデフォルトで無効になっていますが、手動で有効にできます。
ベータステージ
機能はデフォルトで有効になっていますが、手動で無効にできます。
GAステージ
機能は常に有効になっています。無効にすることはできません。
対応する機能フラグは不要になり、Knativeから削除されます。

拡張機能のライフサイクルステージ

拡張機能は、特定のKnative実装の詳細、または基盤となる環境の機能を表面化します。

注意

拡張機能は、ポータブルではないため、コアKnative APIに含まれることはありません。

各拡張機能は常にフラグによって制御され、デフォルトで有効になることはありません。

アルファステージ
機能はデフォルトで無効になっていますが、手動で有効にできます。
ベータステージ
機能はデフォルトで許可されています。
GAステージ
機能はデフォルトで許可されています。

使用可能なフラグ

複数のコンテナ

  • タイプ: 機能
  • ConfigMapキー: multi-container

このフラグを使用すると、Knative Serviceスペックで複数のユーザーコンテナを指定できます。

リクエストを処理できるコンテナは1つだけであるため、正確に1つのコンテナにportを指定する必要があります。

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
  template:
    spec:
      containers:
        - name: first-container
          image: ghcr.io/knative/helloworld-go:latest
          ports:
            - containerPort: 8080
        - name: second-container
          image: gcr.io/knative-samples/helloworld-java

複数コンテナのプロービング

  • タイプ: 機能
  • ConfigMapキー: multi-container-probing

このフラグを使用すると、Knative Serviceスペックで複数のコンテナのプローブ(準備完了/生存)を指定できます。 この機能フラグは、上記の複数のコンテナと組み合わせて使用してください。

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
  template:
    spec:
      containers:
        - name: first-container
          image: ghcr.io/knative/helloworld-go:latest
          ports:
            - containerPort: 8080
          readinessProbe:
            httpGet:
              port: 8080
        - name: second-container
          image: gcr.io/knative-samples/helloworld-java
          readinessProbe:
            httpGet:
              port: 8090

Kubernetes EmptyDirボリューム

  • タイプ: 拡張機能
  • ConfigMapキー: kubernetes.podspec-volumes-emptydir

この拡張機能は、emptyDirボリュームを指定できるかどうかを制御します。

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
  template:
    spec:
      containers:
          ...
          volumeMounts:
            - name: cache
              mountPath: /cache
      volumes:
        - name: cache
          emptyDir: {}

Kubernetes PersistentVolumeClaim(PVC)

  • タイプ: 拡張機能
  • ConfigMapキー: kubernetes.podspec-persistent-volume-claim
    kubernetes.podspec-persistent-volume-write

この拡張機能は、PersistentVolumeClaim (PVC)を指定できるかどうか、および対応するボリュームに対する書き込みアクセスが許可されるかどうかを制御します。

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
 template:
   spec:
     containers:
         ...
         volumeMounts:
           - mountPath: /data
             name: mydata
             readOnly: true
     volumes:
       - name: mydata
         persistentVolumeClaim:
           claimName: minio-pv-claim
           readOnly: true

Kubernetesノードアフィニティ

  • タイプ: 拡張機能
  • ConfigMapキー: kubernetes.podspec-affinity

この拡張機能は、ノードアフィニティを指定できるかどうかを制御します。

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
  template:
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/e2e-az-name
                operator: In
                values:
                - e2e-az1
                - e2e-az2

Kubernetesホストエイリアス

  • タイプ: 拡張機能
  • ConfigMapキー: kubernetes.podspec-hostaliases

このフラグは、ホストエイリアスを指定できるかどうかを制御します。

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
  template:
    spec:
      hostAliases:
      - ip: "127.0.0.1"
        hostnames:
        - "foo.local"
        - "bar.local"

Kubernetesノードセレクター

  • タイプ: 拡張機能
  • ConfigMapキー: kubernetes.podspec-nodeselector

このフラグは、ノードセレクターを指定できるかどうかを制御します。

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
  template:
    spec:
      nodeSelector:
        labelName: labelValue

Kubernetesトレラント

  • タイプ: 拡張機能
  • ConfigMapキー: kubernetes.podspec-tolerations

このフラグは、トレランスを指定できるかどうかを制御します。

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
  template:
    spec:
      tolerations:
      - key: "example-key"
        operator: "Exists"
        effect: "NoSchedule"

Kubernetes Downward API

  • タイプ: 拡張機能
  • ConfigMapキー: kubernetes.podspec-fieldref

このフラグは、Downward API (環境変数ベース)を指定できるかどうかを制御します。

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
  template:
    spec:
      containers:
        - name: user-container
          image: ghcr.io/knative/helloworld-go:latest
          env:
            - name: MY_NODE_NAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName

Kubernetes優先度クラス名

  • タイプ: 拡張機能
  • ConfigMapキー: kubernetes.podspec-priorityclassname

このフラグは、priorityClassNameを指定できるかどうかを制御します。

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
  template:
    spec:
      priorityClassName: high-priority
...

Kubernetesドライラン

  • タイプ: 拡張機能
  • ConfigMapキー: kubernetes.podspec-dryrun

このフラグは、Knativeがオブジェクトを受け入れる前に、Kubernetes APIサーバーを使用してKnative Serviceスペックから派生したPodスペックを検証しようとするかどうかを制御します。

この拡張機能がenabledの場合、サーバーは常にこの検証を実行します。

この拡張機能がallowedの場合、サーバーはデフォルトではこの検証を実行しません。

この拡張機能がallowedの場合、features.knative.dev/podspec-dryrun: enabledアノテーションを追加することで、個々のサービスに対してこの検証を実行できます。

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  annotations: features.knative.dev/podspec-dryrun: enabled
...

Kubernetes ランタイムクラス

  • タイプ: 拡張機能
  • ConfigMap キー: kubernetes.podspec-runtimeclassname

このフラグは、ランタイムクラスを使用できるかどうかを制御します。

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
  template:
    spec:
      runtimeClassName: myclass
...

Kubernetes セキュリティコンテキスト

  • タイプ: 拡張機能
  • ConfigMap キー: kubernetes.podspec-securitycontext

このフラグは、セキュリティコンテキストのサブセットを使用できるかどうかを制御します。

enabledまたはallowedに設定すると、次のPodSecurityContextプロパティが許可されます。

  • FSGroup
  • RunAsGroup
  • RunAsNonRoot
  • SupplementalGroups
  • RunAsUser

enabledまたはallowedに設定すると、次のコンテナのSecurityContextプロパティが許可されます。

  • RunAsNonRoot(trueに設定されている場合のみ、このフラグなしでも許可されます)
  • RunAsGroup
  • RunAsUser(このフラグなしでもすでに許可されています)

警告

このフラグは慎重に使用してください。PodSecurityContextプロパティは、Knativeまたはサービスメッシュからの非ユーザーサイドカーコンテナに影響を与える可能性があります。

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
  template:
    spec:
      securityContext:
        runAsUser: 1000
...

Kubernetes セキュリティコンテキストの機能

  • タイプ: 拡張機能
  • ConfigMap キー: kubernetes.containerspec-addcapabilities

このフラグは、ユーザーがコンテナのsecurityContextに機能を追加できるかどうかを制御します。

enabledまたはallowedに設定すると、Linux capabilitiesをコンテナに追加できます。

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go
spec:
 template:
  spec:
   containers:
     - image: ghcr.io/knative/helloworld-go:latest
       env:
         - name: TARGET
           value: "Go Sample v1"
       securityContext:
         capabilities:
           add:
             - NET_BIND_SERVICE

タグヘッダーベースルーティング

  • タイプ: 拡張機能
  • ConfigMap キー: tag-header-based-routing

このフラグは、タグヘッダーベースルーティングが有効かどうかを制御します。

Kubernetes initコンテナ

  • タイプ: 拡張機能
  • ConfigMap キー: kubernetes.podspec-init-containers

このフラグは、initコンテナを使用できるかどうかを制御します。

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
  template:
    spec:
      ...
      initContainers:
        - name: init-myservice
          image: busybox
          command: ['sh', '-c', "service_setup.sh"]
...

Queue Proxy Pod情報

  • タイプ: 拡張機能
  • ConfigMap キー: queueproxy.mount-podinfo

QPOptionsを使用する場合は、この機能を"enabled"または"allowed"に設定する必要があります。このフラグは、Knativeがpod-infoボリュームをqueue-proxyコンテナにマウントするかどうかを制御します。

pod-infoボリュームをマウントすると、QPOptionsを使用する拡張機能は、/etc/podinfo/annnotationsファイルを読み取ることで、サービスのアノテーションにアクセスできます。詳細については、QPOptionsを使用したQueue Proxyイメージの拡張を参照してください。

この機能がenabledの場合、pod-infoボリュームは常にマウントされます。これは、クラスターのすべてのサービスまたはほとんどのサービスがQPOptionsに依存する拡張機能を使用する必要がある場合に役立ちます。

この機能がallowedの場合、pod-infoボリュームはデフォルトではマウントされません。代わりに、以下に示すようにfeatures.knative.dev/queueproxy-podinfo: enabledアノテーションを追加したサービスに対してのみ、ボリュームがマウントされます。

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  annotations: features.knative.dev/queueproxy-podinfo: enabled
...

Kubernetes トポロジースプレッド制約

  • タイプ: 拡張機能
  • ConfigMap キー: kubernetes.podspec-topologyspreadconstraints

このフラグは、トポロジースプレッド制約を指定できるかどうかを制御します。

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
  template:
    spec:
      ...
      topologySpreadConstraints:
      - maxSkew: 1
        topologyKey: node
        whenUnsatisfiable: DoNotSchedule
        labelSelector:
          matchLabels:
            foo: bar
...

Kubernetes DNSポリシー

  • タイプ: 拡張機能
  • ConfigMap キー: kubernetes.podspec-dnspolicy

このフラグは、DNSポリシーを指定できるかどうかを制御します。

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
  template:
    spec:
      dnsPolicy: ClusterFirstWithHostNet
...

Kubernetes スケジューラー名

  • タイプ: 拡張機能
  • ConfigMap キー: kubernetes.podspec-schedulername

このフラグは、スケジューラー名を指定できるかどうかを制御します。

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
  template:
    spec:
      ...
      schedulerName: custom-scheduler-example
...

Kubernetes 共有プロセス名前空間

  • タイプ: 拡張機能
  • ConfigMap キー: kubernetes.podspec-shareprocessnamespace

このフラグは、共有プロセス名前空間を使用できるかどうかを制御します。

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
  template:
    spec:
      ...
      shareProcessNamespace: true
...

警告

shareProcessNamespacehostPIDの両方を設定することはできません。

Kubernetes ホストIPC

  • タイプ: 拡張機能
  • ConfigMap キー: kubernetes.podspec-hostipc

このフラグは、ホストのipc名前空間を使用できるかどうかを制御します。

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
  template:
    spec:
      ...
      hostIPC: true
...

Kubernetes ホストPID

  • タイプ: 拡張機能
  • ConfigMap キー: kubernetes.podspec-hostpid

このフラグは、ホストのpidを使用できるかどうかを制御します。

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
  template:
    spec:
      ...
      hostPID: true
...

Kubernetes ホストネットワーク

  • タイプ: 拡張機能
  • ConfigMap キー: kubernetes.podspec-hostnetwork

このフラグは、ホストのネットワーク名前空間を使用できるかどうかを制御します。

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
  template:
    spec:
      ...
      hostNetwork: true
...

当サイトでは、サイトのトラフィックを理解するためにアナリティクスとCookieを使用しています。当サイトの利用に関する情報は、その目的のためにGoogleと共有されます。詳細はこちら