问题描述
我需要执行为我的应用程序编写的诊断程序。该应用程序正在 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