サイドカーコンテナを使用する場合のデフォルトコンテナを定義する

サイドカーコンテナを使用する場合のデフォルトコンテナを定義する

私は、クラスター上の複数のポッドのサイドカー コンテナーとして keycloak gatekeeper を使用して、それらのサービスに対して SSO を有効にしています。

kubectl exec -it PODNAMEしかし、実行したり、ログを表示したりしようとすると、ただコンテナに入るのではなく、どのコンテナを使用するかを尋ねられます。フラグを渡さない場合などに使用するデフォルトのコンテナを定義する方法はありますか-c?

答え1

あなたが求めているものは現在機能していますが、非常に限られています。kubectl exec ドキュメントフラグを見逃す可能性があります-c:

-c, --container="": コンテナ名。省略した場合は、ポッド内の最初のコンテナが選択されます。

dateただし、、bashまたはなどのアクション/コマンドも指定する必要がありますsh

デフォルトでは最初のコンテナを使用して、ポッド123456-7890から「date」を実行して出力を取得します。kubectl exec 123456-7890 date

これは非常に限定的だと言うが、最初のコンテナYAML マニフェストで指定されたリストから選択します。-cフラグを使用する場合は、どれを選択するかを指定できますexecute

spec:
  containers:
  - image: httpd
    name: httpd
  - image: busybox
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
    name: busybox

出力

コマンドを使用せずに:

$ kubectl exec -ti test-pod
error: you must specify at least one command for the container

コマンドを使用するとdate、ポッドの YAML/説明から最初のコンテナが使用されます。

$ kubectl exec -ti test-pod -- date
Defaulting container name to httpd.
Use 'kubectl describe pod/test-pod -n default' to see all of the containers in this pod.
Mon Jan  4 14:06:27 UTC 2021

Date指定されたポッドを持つコマンド

$ kubectl exec -ti test-pod -c busybox -- date
Mon Jan  4 14:06:36 UTC 2021

Kubectl exec アノテーション - デフォルト コンテナ

そのうちの1つではGithubの機能強化安定した Kubernetes バージョン (1.23) でこの機能を導入する予定があるという情報が見つかります。

次のようになります:

kubectl annotate pod test-pod kubectl.kubernetes.io/default-exec-container=<conatinerName>

Kubectl ログ注釈 - デフォルト コンテナ

同様の機能ですが、 に関してはlogsexec導入されましたkubectl 1.18。 で言及されました。Githubスレッドそれを実現するには、新しい注釈を追加する必要がありますkubectl.kubernetes.io/default-logs-container=<containerName>

シナリオ私のtest-podポッドbusyboxhttpd

$ kubectl logs test-pod
error: a container name must be specified for pod test-pod, choose one of: [busybox httpd]

$ kubectl annotate pod test-pod kubectl.kubernetes.io/default-logs-container=httpd
pod/test-pod annotated

$ kubectl logs test-pod
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.4.1.12. Set the 'ServerName' directive globally to suppress this message
[Mon Jan 04 14:05:08.191117 2021] [mpm_event:notice] [pid 1:tid 140379730310272] AH00489: Apache/2.4.46 (Unix) configured -- resuming normal operations
[Mon Jan 04 14:05:08.191428 2021] [core:notice] [pid 1:tid 140379730310272] AH00094: Command line: 'httpd -D FOREGROUND'

$ kubectl logs test-pod -c httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.4.1.12. Set the 'ServerName' directive globally to suppress this message
[Mon Jan 04 14:05:08.191117 2021] [mpm_event:notice] [pid 1:tid 140379730310272] AH00489: Apache/2.4.46 (Unix) configured -- resuming normal operations
[Mon Jan 04 14:05:08.191428 2021] [core:notice] [pid 1:tid 140379730310272] AH00094: Command line: 'httpd -D FOREGROUND'

関連情報