JKube Maven插件配置私有镜像仓未生成imagePullSecret如何解决
问题原因
你当前的配置存在两处问题:
- 原有pom配置仅声明了需要生成镜像拉取Secret,未配置将该Secret关联到Deployment的Pod模板中
- 自定义的deployment.yaml模板存在两处错误:
- YAML列表项
-后缺少空格,格式错误 imagePullSecrets需要配置在Deployment的spec.template.spec层级下,而非Deployment的根spec下,层级不对导致合并不生效
- YAML列表项
解决方法
你可以任选以下任意一种方案配置:
方案1:仅通过pom.xml配置(无需自定义模板)
在JKube插件的<configuration>节点下新增<deploy>配置,直接指定要关联的镜像拉取Secret即可,完整配置示例:
<plugin> <groupId>org.eclipse.jkube</groupId> <artifactId>kubernetes-maven-plugin</artifactId> <version>${jkube.version}</version> <configuration> <registry>zamek.xxx:nnnn</registry> <images> <image> <name>helloworld-java:${project.version}</name> <alias>hello-world</alias> <build> <from>openjdk:latest</from> <cmd>java -jar maven/${project.artifactId}-${project.version}.jar</cmd> </build> <run> <wait> <log>Hello World!</log> </wait> </run> </image> </images> <resources> <secrets> <secret> <dockerServerId>zamek.xxx:nnnn</dockerServerId> <name>hello-world-secret</name> </secret> </secrets> </resources> <!-- 新增以下配置关联镜像拉取Secret --> <deploy> <imagePullSecrets> <imagePullSecret>hello-world-secret</imagePullSecret> </imagePullSecrets> </deploy> </configuration> </plugin>
方案2:使用src/main/jkube自定义模板
删除方案1的<deploy>配置,修正你的src/main/jkube/deployment.yaml内容如下即可:
apiVersion: apps/v1 kind: Deployment metadata: # 此处名称要和插件自动生成的Deployment名称一致,默认是你的项目artifactId name: ${project.artifactId} spec: template: spec: imagePullSecrets: - name: hello-world-secret
前置检查
确保你的Maven全局配置(~/.m2/settings.xml)中已经添加了私有镜像仓库的认证信息,id和你配置的dockerServerId保持一致:
<servers> <server> <id>zamek.xxx:nnnn</id> <username>私有仓库用户名</username> <password>私有仓库密码</password> </server> </servers>
配置完成后执行mvn k8s:resource重新生成资源清单,即可看到Deployment中已经包含了正确的imagePullSecrets配置。
内容的提问来源于stack exchange,提问作者zamek 42
相关产品推荐
相关产品推荐

