0

我有一个多模块 Maven 项目(Spring Boot),我使用 JIB Maven 插件生成 docker 图像,但是我应该如何在脚手架中命名图像?我推送到本地 docker repo 和 Skaffold afaik 不支持模板。建议在 Skaffold 中引用这些图像是什么?

请记住,对于每个模块的单独图像,我需要将它们命名为:

 ${image.registry.host}:${image.registry.port}/${project.artifact} 

所以别无选择,只能在 pom.xml 中对它们进行参数化。

我现在需要将主机名和端口名放入 skaffold 文件吗?处理这个自动取款机的最佳方法是什么?那么 Kubernetes 部署描述符中的名称呢?

  <plugin>
            <groupId>com.google.cloud.tools</groupId>
            <artifactId>jib-maven-plugin</artifactId>
            <version>${jib-maven-plugin.version}</version>
            <configuration>
                <!--If you want custom base image and push  registry, use below configuration replace above-->
                <from>
                    <image>openjdk:8-jdk-alpine</image>
                </from>
                <to>
                        **<image>${image.registry.host}:${image.registry.port}/${project.artifactId}**:${project.version}</image>
                </to>
                <container>
                    <jvmFlags>
                        <jvmFlag>-Djava.security.egd=file:/dev/./urandom</jvmFlag>
                        <jvmFlag>-Xdebug</jvmFlag>
                        <jvmFlag>-Duser.timezone=GMT+08</jvmFlag>
                    </jvmFlags>
                          <mainClass>com.example.jib.JibApplication</mainClass>
                    <ports>
                        <port>8080</port>
                    </ports>
                </container>
                    <allowInsecureRegistries>true</allowInsecureRegistries>
            </configuration>
        </plugin>


What goes in the Scaffold.yml for image name?

apiVersion: skaffold/v1beta4
kind: Config
# Enforce SKaffold to use Jib
build:
  local:
  push: false
# Generated artifact
artifacts:
    **- image: lvthillo/my-app. ??????????? HOW SHOULD I NAME THIS?
      image: module2/ ???????**
# Use jibMaven
      jibMaven: {}
   # Execute deployment.yml
deploy:
      kubectl:
      manifests:
      - kubernetes/deployment.yml

这是 Kubernetes 部署描述符。

图片在这里应该有什么名字???

apiVersion: apps/v1
kind: Deployment
metadata:
  name: spring-deployment
spec:
  replicas: 1
selector:
  matchLabels:
     app: spring-boot-jib
template:
   metadata:
     labels:
       app: spring-boot-jib
   spec:
   containers:
      - name: spring-boot-jib-pod

      **image: lvthillo/my-app.   ????????? What name here???**
      imagePullPolicy: IfNotPresent
      ports:
        - name: http
          containerPort: 8080

   apiVersion: v1
   kind: Service
   metadata:
    name: spring-boot-jib-service
  spec:
  type: NodePort
  ports:
      - protocol: TCP
        port: 8080
        nodePort: 32321
  selector:
      app: spring-boot-jib
4

1 回答 1

0

将 Jib 与 Skaffold 一起使用时,Skaffold 是主控并覆盖 Jib 使用的图像参考。Skaffold 将决定应该使用哪些镜像名称,并将在部署之前重写 Kubernetes 清单中的镜像引用以匹配。

如果您正在针对Minikube 等本地集群进行开发,那么 Skaffold 会导致图像直接加载到 Minikube 的 Docker 守护程序中;他们永远不会被推送到实际的注册表。(在 jib 术语中,Skaffold 将调用jib:dockerBuild而不是调用jib:build注册表。)。因此,您可以将生产图像参考保存在skaffold.yaml.

如果您要推送到注册表,那么您有三个选项,具体取决于您的设置:

  1. 如果您有本地或每个开发人员的设置,则保留生产图像引用并让开发人员使用 Skaffold 的--default-repo选项:它转换和替换图像引用的存储库部分,如在skaffold.yaml指向这个新存储库中指定的那样。

  2. 如果开发人员可以在同一个注册表和存储库中混合,那么Skaffold 标记器应该确保您的开发人员推送的图像不会发生冲突。您可以使用 [envTemplate标记器] 根据环境信息生成不同的图像标记,例如$USER.

  3. 您可以使用Skaffold 的配置文件补丁来覆盖图像。创建正确的 JSON 补丁可能会让人觉得有点意外,但它非常强大。

我个人使用这种--default-repo方法。

于 2019-09-17T14:26:06.303 回答