@@ -160,8 +160,8 @@ func getKubectlLogs(pods []kcore.Pod, verbose bool, wrotePending bool, previous
160
160
podCheckCancel <- struct {}{}
161
161
}
162
162
163
- func startKubectlProcess (pod kcore.Pod , previous bool , attrs * os.ProcAttr ) (* os.Process , error ) {
164
- cmdPath := "/bin/bash"
163
+ func startKubectlProcess (pod kcore.Pod , previous bool , attrs * os.ProcAttr ) ([] * os.Process , error ) {
164
+ processList := [] * os. Process {}
165
165
166
166
kubectlArgs := []string {"kubectl" , "-n=" + config .Cortex .Namespace , "logs" , "--follow=true" }
167
167
if previous {
@@ -171,27 +171,55 @@ func startKubectlProcess(pod kcore.Pod, previous bool, attrs *os.ProcAttr) (*os.
171
171
identifier := pod .Name
172
172
kubectlArgs = append (kubectlArgs , pod .Name )
173
173
if pod .Labels ["workloadType" ] == workloadTypeAPI && pod .Labels ["userFacing" ] == "true" {
174
- kubectlArgs = append (kubectlArgs , apiContainerName )
175
- kubectlArgs = append (kubectlArgs , fmt .Sprintf ("--tail=%d" , initLogTailLines ))
174
+
175
+ for _ , container := range pod .Spec .Containers {
176
+ if container .Name == tfServingContainerName {
177
+ tfServingArgs := make ([]string , len (kubectlArgs ))
178
+ copy (tfServingArgs , kubectlArgs )
179
+ tfServingArgs = append (tfServingArgs , tfServingContainerName )
180
+ tfServingIdentifier := pod .Name + " " + tfServingContainerName
181
+ process , err := createKubectlProcess (tfServingArgs , tfServingIdentifier , attrs )
182
+ if err != nil {
183
+ return nil , err
184
+ }
185
+ processList = append (processList , process )
186
+ }
187
+ }
176
188
identifier += " " + apiContainerName
189
+ kubectlArgs = append (kubectlArgs , apiContainerName )
177
190
}
178
191
192
+ process , err := createKubectlProcess (kubectlArgs , identifier , attrs )
193
+ if err != nil {
194
+ for _ , processToKill := range processList {
195
+ processToKill .Kill ()
196
+ }
197
+ return nil , err
198
+ }
199
+
200
+ processList = append (processList , process )
201
+ return processList , nil
202
+ }
203
+
204
+ func createKubectlProcess (kubectlArgs []string , identifier string , attrs * os.ProcAttr ) (* os.Process , error ) {
205
+ cmdPath := "/bin/bash"
206
+
207
+ kubectlArgs = append (kubectlArgs , fmt .Sprintf ("--tail=%d" , initLogTailLines ))
179
208
labelLog := fmt .Sprintf (" | while read -r; do echo \" [%s] $REPLY\" | tail -n +1; done" , identifier )
180
- kubectlCmd := strings .Join (kubectlArgs , " " )
181
- bashArgs := []string {"/bin/bash" , "-c" , kubectlCmd + labelLog }
209
+ kubectlArgsCmd := strings .Join (kubectlArgs , " " )
210
+ bashArgs := []string {"/bin/bash" , "-c" , kubectlArgsCmd + labelLog }
182
211
process , err := os .StartProcess (cmdPath , bashArgs , attrs )
183
212
if err != nil {
184
213
return nil , errors .Wrap (err , strings .Join (bashArgs , " " ))
185
214
}
186
-
187
215
return process , nil
188
216
}
189
217
190
218
func podCheck (podCheckCancel chan struct {}, socket * websocket.Conn , initialPodList []kcore.Pod , previous bool , verbose bool , wrotePending bool , inr * os.File ) {
191
219
timer := time .NewTimer (0 )
192
220
defer timer .Stop ()
193
221
194
- processMap := make (map [string ]* os.Process )
222
+ processMap := make (map [string ][] * os.Process )
195
223
defer deleteProcesses (processMap )
196
224
labels := initialPodList [0 ].GetLabels ()
197
225
podSearchLabels := map [string ]string {
@@ -275,17 +303,17 @@ func podCheck(podCheckCancel chan struct{}, socket *websocket.Conn, initialPodLi
275
303
}
276
304
277
305
for _ , podName := range podsToAdd [:maxPodsToAdd ] {
278
- process , err := startKubectlProcess (latestRunningPodsMap [podName ], previous , & os.ProcAttr {
306
+ processList , err := startKubectlProcess (latestRunningPodsMap [podName ], previous , & os.ProcAttr {
279
307
Files : []* os.File {inr , outw , outw },
280
308
})
281
309
if err != nil {
282
310
socketWriterError <- err
283
311
return
284
312
}
285
- processMap [podName ] = process
313
+ processMap [podName ] = processList
286
314
}
287
315
288
- deleteMap := make (map [string ]* os.Process , len (podsToDelete ))
316
+ deleteMap := make (map [string ][] * os.Process , len (podsToDelete ))
289
317
290
318
for podName := range podsToDelete {
291
319
deleteMap [podName ] = processMap [podName ]
@@ -303,13 +331,17 @@ func podCheck(podCheckCancel chan struct{}, socket *websocket.Conn, initialPodLi
303
331
}
304
332
}
305
333
306
- func deleteProcesses (processMap map [string ]* os.Process ) {
307
- for _ , process := range processMap {
308
- process .Signal (os .Interrupt )
334
+ func deleteProcesses (processMap map [string ][]* os.Process ) {
335
+ for _ , processes := range processMap {
336
+ for _ , process := range processes {
337
+ process .Signal (os .Interrupt )
338
+ }
309
339
}
310
340
time .Sleep (5 * time .Second )
311
- for _ , process := range processMap {
312
- process .Signal (os .Kill )
341
+ for _ , processes := range processMap {
342
+ for _ , process := range processes {
343
+ process .Signal (os .Kill )
344
+ }
313
345
}
314
346
}
315
347
0 commit comments