一般に、Stackdriver でのロギングは、Container Engine -> cluster -> namespace -> application name (たとえば「postgres」) に移動することで、GKE 上の Kubernetes から自動的にログを取得するのに優れています。
GKE の Kubernetes デフォルト名前空間でステージング アプリケーションと本番アプリケーションを実行するポッドの 2 つのグループがあります。これらのうち 1 つのみが、Stackdriver 上の Pod のデフォルト アプリケーション名に記録されます。
切り捨てられた 2 つの postgres デプロイメント構成のスニペット:
製造
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: postgres
spec:
replicas: 1
template:
metadata:
labels:
app: database-production
track: production
spec:
containers:
- name: postgres
image: postgres
演出
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: postgres-staging
spec:
replicas: 1
template:
metadata:
labels:
app: database-staging
track: staging
spec:
containers:
- name: postgres-staging
image: postgres
これらのログの 1 つだけpostgres
が Stackdriver に記録され、もう 1 つはまったく表示されません。デプロイのコンテナー名を変更しようとしましたが、効果はありません。うまくいくと思われる唯一の方法は、アプリケーション全体を別の名前空間でホストすることですが、Kubernetes のドキュメントでは、アプリケーションが巨大でない限り、名前空間を使用しないことを推奨しています。
Stackdriver Logging / GKE 名が Kubernetes デプロイ構成を介してログを記録する方法を具体的に定義する方法はありますか?