我有一个可以控制Kubernetes集群的Python程序(从外部)。在执行该程序期间,它将获得一个字节数组。
我已经准备好创建完整的pod规范。
我需要修改pod规范(添加一个初始化容器),以便在主容器启动时,某个文件所在的位置具有这些确切的字节。
最简单的方法是什么?
答案 0 :(得分:1)
这更多是一个意见问题/答案。
如果您的python脚本生成了特定的字节,我将使用带有卷的initContainer
。像这样:
initContainers:
- name: init-container
image: container:version
command: [ 'your-python.py' ]
volumeMounts:
- name: conf
mountPath: /mnt/conf.d
containers:
- name: app-container
image: container:version
command: [ 'your-actual-app' ]
volumeMounts:
- name: conf
mountPath: /mnt/conf.d
例如,如果您的字节是连续的UTF-8字符,则只需使用ConfigMap
答案 1 :(得分:0)
如果我正确理解了您的问题,那么您想运行一个Python脚本,该脚本将在Pod启动之前从某个位置提取或派生一个字节数组,并将此字节数组写入文件以供您的实际应用程序在内部运行时从中读取豆荚。
我可以看到两种方法来实现这一目标:
以后:
template:
spec:
volumes:
- name: byte-array
emptyDir: {}
initContainers:
- name: byte-array-generator
image: your/init-image:latest
command: ["/usr/bin/python", "byte_array_generator.py"]
volumeMounts:
- mountPath: /my/byte-array/
name: byte-array
containers:
- name: application
image: your/actual-app:latest
volumeMounts:
- name: byte-array
mountPath: /byte-array/
我浓缩了所有3个部分:
您还需要考虑的一个重要注意事项是:如果将卷装载到带有实际文件的预先存在的文件夹中,它们将全部被您的卷“覆盖”。源将取代目的地的位置。
您也许可以使用subPath
来防止这种情况,但是我从未尝试过这种方式,我只知道如果将ConfigMaps作为卷挂载就可以使用。
编辑 :评论的答案太长
在容器外部还是在Kubernetes集群外部?也许会有一个误解,以防万一:initContainer不必使用与Pod相同的图像。您甚至可以将脚本作为ConfigMap加载,并使用Python基本映像将其安装到initContainer中以运行它...
但是,如果实际上您的脚本必须在集群外部运行并发送一个文件以使Pod能够启动,则建议您在字节生成中添加逻辑,以将其输出到具有Pod主机名的文件中示例(来自Kubernetes API),然后将其剪切到运行它的Kubernetes节点(也从Kubernetes API中拉出)到已知目标。只需在节点的每个上定义一个文件夹,例如/var/data/your_app/
,然后将其安装在所有Pod上即可。
volumes:
- hostPath:
path: /var/data/your_app
type: Directory
name: bite-arrays
然后将bite-arrays
挂载到任何需要读取的容器中,方法是重用其主机名(以便在必要时进行扩展)。
既然您说过您的脚本正在控制集群,那么我认为它已经在与Kubernetes的API通信...您可能还想创建一个逻辑来清理剩余的数据...
也许我们弄错了所有信息,并且您的脚本还在以某种方式即时生成和应用Pod规范,在这种情况下,可以通过环境变量或ConfigMap附带的ConfigMap来解决。
Pod规格:
volumes:
- name: byte-array
configMap:
name: your-app-bytes
volumeMounts:
- name: byte-array
mountPath: /data/your-app/byte-array
readOnly: true
subPath: byte-array
ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: your-app-bytes
data:
byte-array: |-
WHATEVERBYTESAREGENERATEDHERE