我们可以在已经运行的 Kubernetes pod 中运行一个可执行的 jar 文件吗?

问题描述

我需要执行为我的应用程序编写的诊断程序。该应用程序正在 Kubernetes pod 中运行/部署。我想在 Kubernetes pod 中复制一个诊断可执行 jar 文件并在不停止 pod 的情况下执行它。如何做到这一点?是否有特定的方式使用 Kubernetes pod 环境运行可执行 jar 包?

解决方法

您可以尝试使用 kubectl cp 命令:

来自docs

将 /tmp/foo_dir 本地目录复制到远程 pod 中的 /tmp/bar_dir 默认命名空间

kubectl cp /tmp/foo_dir <some-pod>:/tmp/bar_dir

将 /tmp/foo 本地文件复制到特定远程 pod 中的 /tmp/bar 容器

kubectl cp /tmp/foo <some-pod>:/tmp/bar -c <specific-container>

将 /tmp/foo 本地文件复制到命名空间中远程 pod 中的 /tmp/bar

kubectl cp /tmp/foo <some-namespace>/<some-pod>:/tmp/bar

从远程 pod 复制 /tmp/foo 到本地的 /tmp/bar

kubectl cp <some-namespace>/<some-pod>:/tmp/foo /tmp/bar

将可执行文件添加到容器中后,您可以exec 进入 pod 并手动执行该文件。

,

打开交互式 bash 终端

for event in df_events['ts']:
    matches = []
    for idx,a,b,c in df_intervals.itertuples():
        print(idx,c)
        if b <= event <= c:
            matches.append(True)
        else:
            matches.append(False)
    print(matches)
            

在此之后,找到您的可执行 jar 并运行它。完成后,退出终端。

你可以直接运行它。

import pandas as pd 
import random

intervals = [['foo',1612211397,1612297797],\
        ['foo',1612384197,1612470597],['foo',1612470597,1612556997],1612556997,1612643397],1612643397,1612729797],1612729797,1612816197],1612816197,1613075397],1612988997],1612988997,1613075397]] 
   
df_intervals = pd.DataFrame(intervals,columns = ['Var1','start_ts','end_ts']) 
   
df_intervals['start_ts']= pd.to_datetime(df_intervals['start_ts'],unit='s')
df_intervals['end_ts']= pd.to_datetime(df_intervals['end_ts'],unit='s')



ts = [1612947871,1611899777,1610812783,1611567640,1611765897,1610890123,1612352770,1612264609,1611249135,1611027870]
bar = ['bar'] * 10

d = {'Var2': bar,'ts':ts}
df_events = pd.DataFrame(d)

df_events['ts']= pd.to_datetime(df_events['ts'],unit='s')

查看官方 k8s 页面 https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#exec