向Kubernetes传递长配置文件

hsvhsicv  于 2023-08-03  发布在  Kubernetes
关注(0)|答案(3)|浏览(103)

我喜欢Kuberenetes的工作方法,使用自包含的映像,并将配置传递到ConfigMap中,作为一个卷。
在我尝试用Liquibase容器做这个事情之前,这个方法一直很好,SQL非常长~1.5K行,Kubernetes拒绝它太长。
来自Kubernetes的错误:
ConfigMap“liquibase-test-content”无效:metadata.annotations:太长:最多必须有262144个字符
我想把.sql文件作为hostPath传递,但据我所知,hostPath的内容可能不会在那里
是否有其他方法可以将配置从K8s目录传递到pod?- 谢谢-谢谢

t9eec4r0

t9eec4r01#

您看到的错误不是关于实际ConfigMap内容的大小,而是关于kubectl apply在每个apply上自动创建的last-applied-configuration注解的大小。如果你使用kubectl create -f foo.yaml而不是kubectl apply -f foo.yaml,它应该可以工作。
请注意,这样做时,您将失去使用kubectl diff的能力,并使用kubectl apply进行增量更新(不替换整个对象)的能力。

oxiaedzo

oxiaedzo2#

从1.18开始,你可以使用服务器端应用来规避这个问题。
第一个月
其中server-side=true在服务器上运行apply命令,而不是在客户端上运行。
这将正确地显示与其他参与者的冲突,包括客户端应用程序,从而失败:

Apply failed with 4 conflicts: conflicts with "kubectl-client-side-apply" using apiextensions.k8s.io/v1:
- .status.conditions
- .status.storedVersions
- .status.acceptedNames.kind
- .status.acceptedNames.plural
Please review the fields above--they currently have other managers. Here
are the ways you can resolve this warning:
* If you intend to manage all of these fields, please re-run the apply
  command with the `--force-conflicts` flag.
* If you do not intend to manage all of the fields, please edit your
  manifest to remove references to the fields that should keep their
  current managers.
* You may co-own fields by updating your manifest to match the existing
  value; in this case, you'll become the manager if the other manager(s)
  stop managing the field (remove it from their configuration).
See http://k8s.io/docs/reference/using-api/api-concepts/#conflicts

字符串
如果要更改,您可以简单地使用第一个选项:
kubectl apply --server-side=true --force-conflicts -f foo.yml

ohfgkhjo

ohfgkhjo3#

你可以使用一个初始化容器。从本质上讲,将.sql文件放在GitHub或S3或任何您可以读取的位置,并使用它填充目录。init容器的语义保证Liquibase容器只在配置文件下载后启动。

相关问题