如何在推送到 docker 注册表时自动将新映像部署到 k8s 集群?

时间:2021-01-15 20:29:23

标签: kubernetes dockerhub continuous-delivery

我已将 dockerhub 配置为构建带有标签 latestdev-<version> 的新映像,因为新标签 <version> 出现在 GitHub 中。我不知道如何配置 Tekton 或任何其他云原生工具,以便在新映像在注册表中可用时自动部署。

这是我的 k8s 配置:

apiVersion: v1
kind: List
items:
  - apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-app-ingress
    spec:
      rules:
        - http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: my-app-service
                    port:
                      number: 80
  - apiVersion: v1
    kind: Service
    metadata:
      name: my-app-service
    spec:
      ports:
        - port: 80
          targetPort: 8000
      selector:
        app: my-app
      type: LoadBalancer

  - apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-app-local-deployment
      labels:
        app: my-app
        type: web
    spec:
      replicas: 2
      minReadySeconds: 15
      strategy:
        type: RollingUpdate
        rollingUpdate:
          maxUnavailable: 25%
          maxSurge: 1
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
        spec:
          imagePullSecrets:
            - name: regcred
          containers:
            - name: backend
              image: zuber93/my-app:dev-latest
              imagePullPolicy: IfNotPresent
              envFrom:
                - secretRef:
                    name: my-app-local-secret
              ports:
                - containerPort: 8000
              readinessProbe:
                httpGet:
                  path: /flvby
                  port: 8000
                initialDelaySeconds: 10
                periodSeconds: 5
            - name: celery
              image: zuber93/my-app:dev-latest
              imagePullPolicy: IfNotPresent
              workingDir: /code
              command: [ "/code/run/celery.sh" ]
              envFrom:
                - secretRef:
                    name: my-app-local-secret
            - name: redis
              image: redis:latest
              imagePullPolicy: IfNotPresent

2 个答案:

答案 0 :(得分:1)

简短的回答是: 使用触发器设置从 dockerhub (https://docs.docker.com/docker-hub/webhooks/) 到 tekton 的 webhook。

或者(取决于您的安全性以及您的集群是否可以从 www 访问)

轮询 dockerhub 并在检测到新图像时触发 tekton。 (这可以通过很多不同的方式来完成,简单的即时服务,k8s 中的定时任务等)

所以,你选择推还是拉。 ;)

我会问“为什么不直接从你的 git repo 触发?”

答案 1 :(得分:0)

最后,我探索了 keel.sh。它可以处理新图像的出现并将它们部署到集群中。