如何在kubernetes容器中安装sth

时间:2019-06-04 19:53:04

标签: python mysql docker kubernetes

我想在python容器中安装mysql-connector == 2.1.6。一种方法是在DockerFile中编写此命令

RUN pip install mysql-connector==2.1.6

然后制作图像并在kubernetes中使用该图像。但是我想运行python映像,然后安装mysql-connector == 2.1.6。但是在崩溃容器或重新启动它之后,我应该再次安装mysql-connector == 2.1.6。 经过大量搜索后,我看到cloud_provider将软件包安装在运行容器中。但是它没有解释它是如何做到的。现在我有了kubernetes,我想在正在运行的容器上永久安装一些软件包。  我该怎么办?

我知道我可以提交容器,但是我不想要它,因为我不知道用户何时安装软件包。

3 个答案:

答案 0 :(得分:0)

对容器进行临时更改是一条硬性规定。如果容器关闭,它们就不见了。您可能会尝试将所有配置文件放入永久存储,但这将是一场噩梦。长话短说,如果要持续下去,则需要使其成为图像的一部分。

答案 1 :(得分:0)

您是否考虑过initContainers

Init容器始终在Pod中的App Container之前运行。此外,所有initContainers 必须成功完成(可以有一系列initContainers)。 根据{{​​3}}:

  

属于容器的初始化容器列表。在里面   容器在启动容器之前按顺序执行。如果   任何初始化容器失败,则该Pod被视为已失败,并且   根据其restartPolicy处理。

通过initContainers,您可以包含一些不应在图像中显示的安全性内容,它可以包含实用程序或脚本(例如mysql-connector的安装)。

有关initContainers和示例documentation的更多信息。

答案 2 :(得分:0)

听起来您似乎正在尝试使用Kubernetes吊舱代替传统的“虚拟机”或“ VPS”,在这种虚拟机中,用户“登录”吊舱并手动运行命令以安装其应用程序。

Kubernetes并非设计用于这种方式。它被设计为将豆荚视为一次性的。在许多不同的情况下(节点关闭,节点资源用尽等),它会自动重新启动Pod。当pod重新启动时,所有“手动更改”都将丢失。这是设计,您不应该尝试与之抗争。

您需要在Dockerfile中构建包括Python,库和应用程序代码的 final,final 容器映像,然后对其进行构建并将其推送至注册表,然后在Kubernetes中运行它。您永远不需要手动登录到容器。

类似的事情应该起作用

FROM python:3.7

# Install any dependencies you need
RUN pip install mysql-connector==2.1.6

# Copy all the application source to the container.
COPY src/ /app

# Set the entrypoint to your main python file.
ENTRYPOINT ["/app/main.py"]