我想在kubernetes上运行的Elasticsearch集群中播种数据。我拥有的数据在Bigquery上,我想使用dataflow(python)加载数据。 python apache-beam版本似乎没有弹性搜索接收器。我在数据流中编写了自己的elasticsearch编写器,但是我需要从kubernetes集群中转发我的elasticsearch端口。所以我需要安装google-cloud-sdk和kubectl,以便我可以转发端口写入我的数据,然后将其关闭。当我在本地运行作业时,我的代码似乎可以正常运行,但似乎无法在工人上安装google-cloud-sdk和kubectl。
当我在本地运行作业时,我的代码似乎可以正常工作,但似乎无法在工人上安装google-cloud-sdk和kubectl。
这些是在子过程setup.py中调用的命令。Popen
['export', 'CLOUD_SDK_REPO="cloud-sdk-$(lsb_release', '-c', '-s)"'],
['echo', '"deb', 'https://packages.cloud.google.com/apt', '$CLOUD_SDK_REPO', 'main"', '|', 'sudo', 'tee', '-a', '/etc/apt/sources.list.d/google-cloud-sdk.list'],
['sudo', 'rm', '/etc/apt/sources.list.d/partner.list'],
['sudo', 'apt-get', 'install', 'google-cloud-sdk', 'kubectl']
这是我用于在start_bundle中转发Elasticsearch服务的端口的方法
def _open_connection(self):
tries = 0
connected = False
while tries <= 3 and not connected:
tries += 1
try:
res = requests.get('http://{0}:{1}'.format(self.host, self.port))
connected = (res.status_code == 200)
except Exception as e:
logging.warning(e)
subprocess.check_call('gcloud container clusters get-credentials {0}'.format(ES_CLUSTER_NAME), shell=True)
try:
subprocess.check_call('kubectl version', shell=True)
except exception as ee:
logging.warning(ee)
subprocess.check_call('gcloud components install kubectl', shell=True)
subprocess.call('kubectl port-forward elasticsearch-0 {0}:{0} & disown'.format(self.port), shell=True)
time.sleep(3)
return connected
我希望这些命令(我尝试过变体)会在每个工作程序上安装所需的软件包,但安装仍会失败。
答案 0 :(得分:0)
我通过跳过端口转发并改为在我的Elasticsearch端口上实现internal load balancer来解决此问题。这样,我的数据流工作人员可以直接连接到内部IP来写入数据。