我有一个映像,其中包含/ usr / data / webroot中的数据。此数据应在容器初始化时移至/ var / www / html。
现在我对InitContainers感到沮丧。据我了解,它可用于执行容器初始化上的任务。
但是我不知道在创建amo-magento吊舱之后任务是否被执行,或者是否运行了init任务,以及在创建magento吊舱之后。
我假设initContainers任务运行时,带有magento图像的容器不可用,因此没有内容可移到新目录。
apiVersion: apps/v1
kind: Deployment
metadata:
name: amo-magento
labels:
app: amo-magento
spec:
replicas: 1
selector:
matchLabels:
app: amo-magento
template:
metadata:
labels:
app: amo-magento
tier: frontend
spec:
initContainers:
- name: setup-magento
image: busybox:1.28
command: ["sh", "-c", "mv -r /magento/* /www"]
volumeMounts:
- mountPath: /www
name: pvc-www
- mountPath: /magento
name: magento-src
containers:
- name: amo-magento
image: amo-magento:0.7 # add google gcr.io path after upload
imagePullPolicy: Never
volumeMounts:
- name: install-sh
mountPath: /tmp/install.sh
subPath: install.sh
- name: mage-autoinstall
mountPath: /tmp/mage-autoinstall.sh
subPath: mage-autoinstall.sh
- name: pvc-www
mountPath: /var/www/html
- name: magento-src
mountPath: /usr/data/webroot
# maybe as secret - can be used as configMap because it has not to be writable
- name: auth-json
mountPath: /var/www/html/auth.json
subPath: auth.json
- name: php-ini-prod
mountPath: /usr/local/etc/php/php.ini
subPath: php.ini
# - name: php-memory-limit
# mountPath: /usr/local/etc/php/conf.d/memory-limit.ini
# subPath: memory-limit.ini
volumes:
- name: magento-src
emptyDir: {}
- name: pvc-www
persistentVolumeClaim:
claimName: magento2-volumeclaim
- name: install-sh
configMap:
name: install-sh
# kubectl create configmap mage-autoinstall --from-file=build/docker/mage-autoinstall.sh
- name: mage-autoinstall
configMap:
name: mage-autoinstall
- name: auth-json
configMap:
name: auth-json
- name: php-ini-prod
configMap:
name: php-ini-prod
# - name: php-memory-limit
# configMap:
# name: php-memory-limit
答案 0 :(得分:1)
但是我不知道在创建amo-magento吊舱之后任务是否被执行,或者是否运行了init任务,以及在创建magento吊舱之后。
可以肯定的是,这就是为什么您可以为您的image:
任务指定完全不同的 initContainers:
的原因-它们彼此之间只有相互关联,如您所见,在同一节点上运行并共享卷。好吧,我说“肯定”,但是您有一个错误的用词:在创建magneto
容器之后– Pod是每个的集合容器,initContainers:
和container:
容器
如果我理解您的问题,则对Deployment
的修复只是将image:
中的initContainer:
更新为包含魔法/usr/data/webroot
的那个{更新您的shell命令以引用该图像内的正确路径:
initContainers:
- name: setup-magento
image: your-magic-image:its-magic-tag
command: ["sh", "-c", "mv -r /usr/data/webroot/* /www"]
volumeMounts:
- mountPath: /www
name: pvc-www
# but **removing** the reference to the emptyDir volume
然后在container[0]
启动时,PVC将包含您期望的数据
也就是说,我实际上很确定您要从此故事中删除PVC,因为-根据定义-它在Pod重新启动后是持久的,因此只会随着时间的推移累积文件(因为您的sh
命令当前无法在将文件移至其中之前清除/www
)。如果您将所有pvc
引用替换为emptyDir: {}
引用,则这些目录将始终是“新鲜”的,并且将仅包含initContainer: