私はこのバグに何時間も悩まされてきましたが、まだ理由がわかりません!
それぞれ config1 と secret1 という単純な Configmap と Secret を作成しました。(これらの Yaml ファイルは、このリポジトリ内にあります: https://github.com/hoangphanthai/test )
その後、Statefulset と Deployment を作成するために Go ファイル (上記の test.go) を作成しました。すべての Pod (Statefulset と Deployment によって作成されたもの) が Env 変数でこれらの Configmap と Secret を参照するようにします。Statefulset と Deployment の両方のメタデータと仕様は、名前を除いて同一です。
ただし、Statefulset のみが正常に作成されますが、Deployment. エラーは「Deployment.apps "d1" が無効です: spec.template.spec.containers[0].envFrom: 無効な値: "": 一度に複数のフィールドが指定されていない可能性があります」
2 回目の実行では、Statefulset と Deployment の両方が成功せず、「Failed to continue - runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation] Unable to propogate EXC_BAD_ACCESS signal to target process and panic ( httpsを参照)」が表示されます。 ://github.com/go-delve/delve/issues/852 ) 最後の既知の即時スタックトレース (ゴルーチン ID 1):""
重要なコードは次のとおりです (完全なコードは、リポジトリの test.go ファイル内にあります)。
deployment := &appsv1.Deployment{
ObjectMeta: metav1.ObjectMeta{
Name: "d1",
},
Spec: appsv1.DeploymentSpec{
Replicas: &repNo,
Selector: &metav1.LabelSelector{
MatchLabels: map[string]string{
"app": "postgres",
},
},
Template: apiv1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{
"app": "postgres",
},
},
Spec: apiv1.PodSpec{
Containers: containerList,
},
},
},
}
statefulset := &appsv1.StatefulSet{
ObjectMeta: metav1.ObjectMeta{
Name: "s1",
},
Spec: appsv1.StatefulSetSpec{
Replicas: &repNo,
Selector: &metav1.LabelSelector{
MatchLabels: map[string]string{
"app": "postgres",
},
},
Template: apiv1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{
"app": "postgres",
},
},
Spec: apiv1.PodSpec{
Containers: containerList,
},
},
},
}
最初は、ConfigMapRef と SecretRef を同時に設定することはできないと思いますが、コードとまったく同じ yaml (上記の dep.yaml) を介して展開を適用しようとしましたが、うまくいきました。
私もそれをグーグルで調べましたが、それを解決する方法がわかりません。
誰かがこれを修正する方法を教えてくれたら、とても感謝しています。
お読みいただきありがとうございます。