機能と拡張フラグ¶
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
...
警告
shareProcessNamespace
とhostPID
の両方を設定することはできません。
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
...