diff --git a/.travis.yml b/.travis.yml index 9a331bd..8450a08 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ install: - docker build -t docker-gc-helm-chart-validate -f Dockerfile.helmtest . script: -- docker build -t jackil/docker-gc -f Dockerfile . +- docker build -t src/docker-cache-cleaner -f Dockerfile . after_success: -- docker build -t jackil/docker-gc -f Dockerfile . +- docker build -t src/docker-cache-cleaner -f Dockerfile . diff --git a/.vscode/launch.json b/.vscode/launch.json index a115336..23f9cf9 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -10,7 +10,7 @@ "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. - "program": "${workspaceRoot}/DockerGC/bin/Debug/netcoreapp2.0/DockerGC.dll", + "program": "${workspaceRoot}/DockerGC/bin/Debug/netcoreapp5.0/DockerGC.dll", "args": [], "cwd": "${workspaceRoot}", // For more information about the 'console' field, see https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md#console-terminal-window diff --git a/README.md b/README.md index 7272804..0fd8c33 100644 --- a/README.md +++ b/README.md @@ -112,4 +112,6 @@ For custom configurations, please head to values.yaml. docker-gc.service is an example of using it with fleet. +## Run and create namespace +helm install --generate-name jackil-docker-gc -n --create-namespace diff --git a/deploy/specs/all-base.yaml b/deploy/specs/all-base.yaml new file mode 100644 index 0000000..7573d40 --- /dev/null +++ b/deploy/specs/all-base.yaml @@ -0,0 +1,60 @@ +--- +# --- ABSTRACT ALL BASE --- +# ------------------------- +envs: + all-base: + abstract: true + spec: + __name__: ~ # spec will inject the env name as env.__name__ +#-----apps + apps: + __base__: # the __base__ app gets inherited by all other apps + __name__: ~ # this instructs conf to inject the app name as app.__name__ + __anchor__: app + build: + __base__: + publish: false # infra repo opted-out from msftkube builds + docker: + __omit_base__: [ 'publish' ] # do not inherit this setting + builds: + __base__: # this __base__ docker build gets inherited by all docker builds + dir: "{{app.build.dotnet.outdir}}" + checksum: True # with true, always checksum the dir + # if a savePath is specified in docker build def then a tarball of the image will be saved into the image. It can be quite big. + # savePath: "{{paths.drop}}/docker/images/{{app.__name__}}.tar.gz" + k8s: + source: "{{paths.k8s.source}}/{{app.__name__}}.yaml" + destinationDirectory: "{{paths.k8s.dest}}" + parameters: + replicaCount: 2 + azure: + __base__: # base here is the type of azure resource: sql, acs, etc + __base__: # base is a specific named azure resource: sql-server-01, cluster-01, storage-01 + subscription: "{{deploy.azure.subscription}}" + region: "{{deploy.azure.region}}" + group: "{{deploy.azure.group}}" + docker-cache-cleaner: + k8s: + parameters: + namespace: docker-cache-cleaner + fullname: docker-cache-cleaner + chartName: docker-cache-cleaner + imagePullPolicy: IfNotPresent + allowMissingResourceFiles: True + recyclingStrategy: ByDate + dockerEndpoint: unix:///var/run/docker.sock + executionIntervalInMinutes: 360 + dockerClientTimeoutInSeconds: 180 + imageDeletionOrder: ByImageLastTouchDate + strategy: ByDate + daysBeforeDeletion: 1 + containerStateBlacklist: dead,exited + socketPath: /var/run/docker.sock + volumeName: docker-volume + resources: + limits: + cpu: 100m + memory: 128Mi + requests: + cpu: "0" + memory: 128Mi diff --git a/deploy/specs/build.yaml b/deploy/specs/build.yaml new file mode 100644 index 0000000..19b3c43 --- /dev/null +++ b/deploy/specs/build.yaml @@ -0,0 +1,14 @@ +apps: + __base__: # this __base__ app gets inherited by all other apps + __name__: ~ # this instructs spec to inject the app name as app.__name__ + __anchor__: app + icm: + routingId: Vienna-MIR + docker-cache-cleaner: + deploymentGroups: + - "default" + build: + docker: + builds: + docker-cache-cleaner: + dir: "{{paths.src}}" \ No newline at end of file diff --git a/deploy/specs/path.yaml b/deploy/specs/path.yaml new file mode 100644 index 0000000..2a58e83 --- /dev/null +++ b/deploy/specs/path.yaml @@ -0,0 +1,11 @@ +paths: + acs: + source: "{{paths.root}}/deploy/templates/acs" + dest: "{{paths.drop}}/arm" + k8s: + source: "{{paths.root}}/deploy/templates/k8s" + dest: "{{paths.drop}}/k8s" + helm: + source: "{{paths.root}}/deploy/templates/helm" + dest: "{{paths.drop}}/helm" + src: "{{paths.root}}/src" \ No newline at end of file diff --git a/deploy/specs/publish.yaml b/deploy/specs/publish.yaml new file mode 100644 index 0000000..3b1eb67 --- /dev/null +++ b/deploy/specs/publish.yaml @@ -0,0 +1,9 @@ +publish: + azure: + keyvault: + name: vienna-test-westus + docker: + registry: + name: viennadroptest + resourceGroup: viennadroptest + subscription: ad203158-bc5d-4e72-b764-2607833a71dc \ No newline at end of file diff --git a/deploy/templates/helm/docker-cache-cleaner-values.yaml b/deploy/templates/helm/docker-cache-cleaner-values.yaml new file mode 100644 index 0000000..00a9ea3 --- /dev/null +++ b/deploy/templates/helm/docker-cache-cleaner-values.yaml @@ -0,0 +1,33 @@ +# Default values for docker-gc. +image: + repository: viennadroptest.azurecr.io/docker-cache-cleaner + tag: "{{app.drop.images.docker-cache-cleaner.tag}}" + pullPolicy: IfNotPresent +docker: + socketPath: /var/run/docker.sock + volumeName: docker-volume +fullname: docker-cache-cleaner +fullnameOverride: docker-cache-cleaner +nameOverride: docker-cache-cleaner +statsd: + enabled: false + #host: localhost + #port: 8125 +config: + dockerEndpoint: unix:///var/run/docker.sock + executionIntervalInMinutes: 360 + dockerClientTimeoutInSeconds: 180 + imageDeletionOrder: ByImageLastTouchDate + strategy: ByDate + daysBeforeDeletion: 1 + containerStateBlacklist: dead,exited +nodeSelector: + beta.kubernetes.io/os: linux +resources: + limits: + cpu: 100m + memory: 128Mi + requests: + cpu: "0" + memory: 128Mi + diff --git a/deploy/templates/k8s/docker-cache-cleaner.yaml b/deploy/templates/k8s/docker-cache-cleaner.yaml new file mode 100644 index 0000000..e42219b --- /dev/null +++ b/deploy/templates/k8s/docker-cache-cleaner.yaml @@ -0,0 +1,61 @@ +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: "{{app.k8s.parameters.fullname}}" + namespace: "{{app.k8s.parameters.namespace}}" + labels: + app: "{{app.k8s.parameters.fullname}}" + chart: "{{app.k8s.parameters.chartName}}" +spec: + selector: + matchLabels: + app: docker-cache-cleaner + template: + metadata: + labels: + app: docker-cache-cleaner + spec: + containers: + - name: "{{app.k8s.parameters.fullname}}" + image: "{{publish.docker.registry.hostname}}/{{app.drop.images.docker-cache-cleaner.name}}:{{app.drop.images.docker-cache-cleaner.tag}}" + imagePullPolicy: "{{app.k8s.parameters.imagePullPolicy}}" + resources: + limits: + cpu: "{{app.resources.limits.cpu}}" + memory: "{{app.resources.limits.memory}}" + requests: + cpu: "{{app.resources.requests.cpu}}" + memory: "{{app.resources.requests.memory}}" + env: + - name: DOCKERGC_RECYCLING_STRATEGY + value: "{{app.k8s.parameters.recyclingStrategy}}" + - name: DOCKERGC_EXECUTION_INTERVAL_IN_MINUTES + value: "{{app.k8s.parameters.executionIntervalInMinutes}}" + - name: DOCKERGC_DOCKER_ENDPOINT + value: "{{app.k8s.parameters.dockerEndpoint}}" + - name: DOCKERGC_CONTAINER_STATE_BLACKLIST + value: "{{app.k8s.parameters.containerStateBlacklist}}" + - name: DOCKERGC_IMAGE_DELETION_ORDER + value: "{{app.k8s.parameters.imageDeletionOrder}}" + - name: DOCKERGC_DOCKER_CLIENT_TIMEOUT_IN_SECONDS + value: "{{app.k8s.parameters.dockerClientTimeoutInSeconds}}" + - name: DOCKERGC_DAYS_BEFORE_DELETION + value: "{{app.k8s.parameters.daysBeforeDeletion}}" + volumeMounts: + - mountPath: "{{app.k8s.parameters.socketPath}}" + name: "{{app.k8s.parameters.volumeName}}" + nodeSelector: + beta.kubernetes.io/os: linux + tolerations: + - effect: NoSchedule + operator: Exists + - effect: NoExecute + operator: Exists + volumes: + - name: "{{app.k8s.parameters.volumeName}}" + hostPath: + path: "{{app.k8s.parameters.socketPath}}" + updateStrategy: + rollingUpdate: + maxUnavailable: 100% + type: RollingUpdate \ No newline at end of file diff --git a/deploy/templates/k8s/readme.md b/deploy/templates/k8s/readme.md new file mode 100644 index 0000000..e69de29 diff --git a/helm-chart/jackil-docker-gc/Chart.yaml b/helm-chart/jackil-docker-gc/Chart.yaml deleted file mode 100644 index 3b811b2..0000000 --- a/helm-chart/jackil-docker-gc/Chart.yaml +++ /dev/null @@ -1,10 +0,0 @@ -name: jackil-docker-gc -description: A Docker Image Garbage Collector Helm chart for Kubernetes -home: https://github.com/JasonStein/docker-gc -version: 1.0.0 -appVersion: latest -sources: - - https://github.com/JasonStein/docker-gc -maintainers: - - name: Jiaqi Liu - email: jackil@Microsoft.com diff --git a/scripts/task.py b/scripts/task.py new file mode 100644 index 0000000..012e790 --- /dev/null +++ b/scripts/task.py @@ -0,0 +1,59 @@ +# pylint: disable=locally-disabled,line-too-long,missing-docstring +import os +import argparse +import logging +import shutil + +import msftkube as mk + +mk.steps.acs.TEMPLATE_TRANSFORMERS = [ + # _transformer_encrypt_storages, + # mk.steps.acs._transformer_do_not_use_port_22, + # _transformer_add_security_extension, + mk.steps.acs._parameters_change_to_keyvault_reference('servicePrincipalClientId'), + mk.steps.acs._parameters_change_to_keyvault_reference('sshRSAPublicKey'), + mk.steps.acs._parameters_change_to_keyvault_reference('servicePrincipalClientSecret') +] + +def main(): + + commands = mk.commands.DEFAULT_COMMANDS + + context = mk.context.create(commands.keys()) + + # determine paths. Script could be in repository or a build drop + script_dir = os.path.dirname(__file__) + root_dir = os.path.abspath(os.path.join(script_dir, '..')) + if os.path.isdir(os.path.join(root_dir, 'src')): + # we are in repository + drop_dir = os.path.join(root_dir, 'build') + mk.util.ensure_dir(drop_dir) + def copy_scripts_into_drop(spec, context): # pylint: disable=unused-argument + mk.logger.info('task.py - Copying scripts into drop folder') + scripts_dest = os.path.join(drop_dir, 'scripts') + mk.util.copytree_clobber(script_dir, scripts_dest) + mk.util.copytree_clobber(mk.__path__[0], os.path.join(scripts_dest, 'msftkube')) + mk.util.copytree_clobber(os.path.join(root_dir, 'deploy'), os.path.join(drop_dir, 'deploy')) + commands['publish'] += [copy_scripts_into_drop] + else: + # we are in a build drop outside of the repository + drop_dir = root_dir + + mk.logger.info('task.py - Drop dir path is %s', drop_dir) + + # write log file to drop + mk.logger.addFileHandler(os.path.join(drop_dir, 'build.log')) + + # Seed spec from paths and args + seed_spec = {'paths': {'drop': drop_dir}} + + # provide user args & context to steps + + # read specs from files into spec + spec = mk.spec.create(root_dir, [seed_spec, os.path.join(root_dir, 'deploy', 'specs')]) + + # run any steps selected + mk.commands.execute(commands, spec, context) + +if __name__ == '__main__': + main() diff --git a/scripts/task.sh b/scripts/task.sh new file mode 100644 index 0000000..b950c99 --- /dev/null +++ b/scripts/task.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -ex + +PARENT_DIR=$(realpath `dirname $0`/..) + +python -m venv /tmp/aml-venv +source /tmp/aml-venv/bin/activate +wget -O - https://aka.ms/msftkube-bootstrapper.sh | bash + +cd $PARENT_DIR +msftkube "$@" diff --git a/DockerGC.Tests/ByDateRecyclingStrategyUnitTest.cs b/src/DockerGC.Tests/ByDateRecyclingStrategyUnitTest.cs similarity index 100% rename from DockerGC.Tests/ByDateRecyclingStrategyUnitTest.cs rename to src/DockerGC.Tests/ByDateRecyclingStrategyUnitTest.cs diff --git a/DockerGC.Tests/ByDiskSpaceRecyclingStrategyUnitTest.cs b/src/DockerGC.Tests/ByDiskSpaceRecyclingStrategyUnitTest.cs similarity index 100% rename from DockerGC.Tests/ByDiskSpaceRecyclingStrategyUnitTest.cs rename to src/DockerGC.Tests/ByDiskSpaceRecyclingStrategyUnitTest.cs diff --git a/DockerGC.Tests/DockerGC.Tests.csproj b/src/DockerGC.Tests/DockerGC.Tests.csproj similarity index 91% rename from DockerGC.Tests/DockerGC.Tests.csproj rename to src/DockerGC.Tests/DockerGC.Tests.csproj index c39a03e..e0b889c 100644 --- a/DockerGC.Tests/DockerGC.Tests.csproj +++ b/src/DockerGC.Tests/DockerGC.Tests.csproj @@ -1,6 +1,6 @@ - netcoreapp2.0 + netcoreapp5.0 false diff --git a/DockerGC.Tests/MatchlistTest.cs b/src/DockerGC.Tests/MatchlistTest.cs similarity index 100% rename from DockerGC.Tests/MatchlistTest.cs rename to src/DockerGC.Tests/MatchlistTest.cs diff --git a/DockerGC.Tests/RecyclingStrategyUnitTest.cs b/src/DockerGC.Tests/RecyclingStrategyUnitTest.cs similarity index 100% rename from DockerGC.Tests/RecyclingStrategyUnitTest.cs rename to src/DockerGC.Tests/RecyclingStrategyUnitTest.cs diff --git a/DockerGC/ByDateRecyclingStrategy.cs b/src/DockerGC/ByDateRecyclingStrategy.cs similarity index 100% rename from DockerGC/ByDateRecyclingStrategy.cs rename to src/DockerGC/ByDateRecyclingStrategy.cs diff --git a/DockerGC/ByDiskSpaceRecyclingStrategy.cs b/src/DockerGC/ByDiskSpaceRecyclingStrategy.cs similarity index 100% rename from DockerGC/ByDiskSpaceRecyclingStrategy.cs rename to src/DockerGC/ByDiskSpaceRecyclingStrategy.cs diff --git a/DockerGC/ConsoleLogger.cs b/src/DockerGC/ConsoleLogger.cs similarity index 100% rename from DockerGC/ConsoleLogger.cs rename to src/DockerGC/ConsoleLogger.cs diff --git a/DockerGC/DockerGC.csproj b/src/DockerGC/DockerGC.csproj similarity index 83% rename from DockerGC/DockerGC.csproj rename to src/DockerGC/DockerGC.csproj index 91bef62..a87181c 100644 --- a/DockerGC/DockerGC.csproj +++ b/src/DockerGC/DockerGC.csproj @@ -1,7 +1,7 @@ Exe - netcoreapp2.0 + netcoreapp5.0 diff --git a/DockerGC/DockerGarbageCollector.cs b/src/DockerGC/DockerGarbageCollector.cs similarity index 100% rename from DockerGC/DockerGarbageCollector.cs rename to src/DockerGC/DockerGarbageCollector.cs diff --git a/DockerGC/DockerImageDependencyTreeBuilder.cs b/src/DockerGC/DockerImageDependencyTreeBuilder.cs similarity index 100% rename from DockerGC/DockerImageDependencyTreeBuilder.cs rename to src/DockerGC/DockerImageDependencyTreeBuilder.cs diff --git a/DockerGC/DockerImageNode.cs b/src/DockerGC/DockerImageNode.cs similarity index 100% rename from DockerGC/DockerImageNode.cs rename to src/DockerGC/DockerImageNode.cs diff --git a/DockerGC/DockerRepositoryDescriptor.cs b/src/DockerGC/DockerRepositoryDescriptor.cs similarity index 100% rename from DockerGC/DockerRepositoryDescriptor.cs rename to src/DockerGC/DockerRepositoryDescriptor.cs diff --git a/DockerGC/EventProgress.cs b/src/DockerGC/EventProgress.cs similarity index 100% rename from DockerGC/EventProgress.cs rename to src/DockerGC/EventProgress.cs diff --git a/DockerGC/ILogger.cs b/src/DockerGC/ILogger.cs similarity index 100% rename from DockerGC/ILogger.cs rename to src/DockerGC/ILogger.cs diff --git a/DockerGC/IMatchlist.cs b/src/DockerGC/IMatchlist.cs similarity index 100% rename from DockerGC/IMatchlist.cs rename to src/DockerGC/IMatchlist.cs diff --git a/DockerGC/Matchlist.cs b/src/DockerGC/Matchlist.cs similarity index 100% rename from DockerGC/Matchlist.cs rename to src/DockerGC/Matchlist.cs diff --git a/DockerGC/Program.cs b/src/DockerGC/Program.cs similarity index 100% rename from DockerGC/Program.cs rename to src/DockerGC/Program.cs diff --git a/DockerGC/RecyclingStrategy.cs b/src/DockerGC/RecyclingStrategy.cs similarity index 100% rename from DockerGC/RecyclingStrategy.cs rename to src/DockerGC/RecyclingStrategy.cs diff --git a/DockerGC/StatsdLogger.cs b/src/DockerGC/StatsdLogger.cs similarity index 100% rename from DockerGC/StatsdLogger.cs rename to src/DockerGC/StatsdLogger.cs diff --git a/Dockerfile b/src/Dockerfile similarity index 89% rename from Dockerfile rename to src/Dockerfile index b60e90e..a74981e 100644 --- a/Dockerfile +++ b/src/Dockerfile @@ -1,4 +1,4 @@ -FROM microsoft/dotnet:2.0-sdk AS build-env +FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env WORKDIR /docker-gc COPY DockerGC ./ @@ -6,10 +6,12 @@ COPY DockerGC ./ RUN dotnet publish -c Release -o out # build runtime image -FROM microsoft/dotnet:2.0-runtime +FROM mcr.microsoft.com/dotnet/runtime:5.0 WORKDIR /docker-gc COPY --from=build-env /docker-gc/out ./ +RUN apt update && apt upgrade -y && apt autoclean + ENV DOCKERGC_DOCKER_ENDPOINT unix:///var/run/docker.sock ENV DOCKERGC_EXECUTION_INTERVAL_IN_MINUTES 720 ENV DOCKERGC_DOCKER_CLIENT_TIMEOUT_IN_SECONDS 180 diff --git a/Dockerfile.helmtest b/src/Dockerfile.helmtest similarity index 83% rename from Dockerfile.helmtest rename to src/Dockerfile.helmtest index e85028f..b984910 100644 --- a/Dockerfile.helmtest +++ b/src/Dockerfile.helmtest @@ -18,9 +18,9 @@ RUN /bin/helm init --client-only && /bin/helm repo update WORKDIR ["/bin/helm"] -COPY helm-chart/jackil-docker-gc jackil-docker-gc +COPY src/docker-cache-cleaner docker-cache-cleaner -RUN MSG=$(helm lint jackil-docker-gc | grep "no failures") +RUN MSG=$(helm lint docker-cache-cleaner | grep "no failures") RUN echo $MSG diff --git a/Dockerfile.test b/src/Dockerfile.test similarity index 83% rename from Dockerfile.test rename to src/Dockerfile.test index add6b6d..40cc28b 100644 --- a/Dockerfile.test +++ b/src/Dockerfile.test @@ -1,6 +1,6 @@ # DockerGC Unit Tests Dockerfile -FROM microsoft/dotnet:2.0-sdk +FROM mcr.microsoft.com/dotnet/sdk:5.0 COPY DockerGC DockerGC COPY DockerGC.Tests DockerGC.Tests diff --git a/src/README.md b/src/README.md new file mode 100644 index 0000000..e69de29 diff --git a/helm-chart/jackil-docker-gc/.helmignore b/src/docker-cache-cleaner/.helmignore similarity index 100% rename from helm-chart/jackil-docker-gc/.helmignore rename to src/docker-cache-cleaner/.helmignore diff --git a/src/docker-cache-cleaner/Chart.yaml b/src/docker-cache-cleaner/Chart.yaml new file mode 100644 index 0000000..043c04b --- /dev/null +++ b/src/docker-cache-cleaner/Chart.yaml @@ -0,0 +1,12 @@ +name: docker-cache-cleaner +description: A Docker Image Garbage Collector Helm chart for Kubernetes +home: https://github.com/johndoe0920/docker-gc +version: 1.0.0 +appVersion: 1.0.0 +sources: + - https://github.com/johndoe0920/docker-gc +maintainers: + - name: Jiaqi Liu + email: jackil@Microsoft.com + - name: Ross Wagner + email: rowagne@microsoft.com diff --git a/helm-chart/jackil-docker-gc/templates/NOTES.txt b/src/docker-cache-cleaner/templates/NOTES.txt similarity index 100% rename from helm-chart/jackil-docker-gc/templates/NOTES.txt rename to src/docker-cache-cleaner/templates/NOTES.txt diff --git a/helm-chart/jackil-docker-gc/templates/_helpers.tpl b/src/docker-cache-cleaner/templates/_helpers.tpl similarity index 100% rename from helm-chart/jackil-docker-gc/templates/_helpers.tpl rename to src/docker-cache-cleaner/templates/_helpers.tpl diff --git a/helm-chart/jackil-docker-gc/templates/daemonset.yaml b/src/docker-cache-cleaner/templates/docker-cache-cleaner.yaml similarity index 84% rename from helm-chart/jackil-docker-gc/templates/daemonset.yaml rename to src/docker-cache-cleaner/templates/docker-cache-cleaner.yaml index 2aaa45c..bd7b455 100644 --- a/helm-chart/jackil-docker-gc/templates/daemonset.yaml +++ b/src/docker-cache-cleaner/templates/docker-cache-cleaner.yaml @@ -1,23 +1,25 @@ -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: DaemonSet metadata: name: {{ template "docker-gc.fullname" . }} labels: app: {{ template "docker-gc.name" . }} chart: {{ template "docker-gc.chart" . }} - release: {{ .Release.Name }} - heritage: {{ .Release.Service }} spec: + selector: + matchLabels: + app: docker-cache-cleaner template: metadata: labels: - app: {{ template "docker-gc.name" . }} - release: {{ .Release.Name }} + app: docker-cache-cleaner spec: containers: - name: {{ template "docker-gc.name" . }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} + nodeSelector: +{{ toYaml .Values.nodeSelector | indent 10 }} resources: {{ toYaml .Values.resources | indent 10 }} env: @@ -48,17 +50,20 @@ spec: value: {{ .Values.statsd.host | quote }} - name: STATSD_PORT value: {{ .Values.statsd.port | quote }} - {{- end }} + {{- end }} volumeMounts: - mountPath: {{ .Values.docker.socketPath }} name: {{ .Values.docker.volumeName }} + tolerations: + - effect: NoSchedule + operator: Exists + - effect: NoExecute + operator: Exists volumes: - name: {{ .Values.docker.volumeName }} hostPath: path: {{ .Values.docker.socketPath }} - {{- if .Values.image.pullSecrets }} - imagePullSecrets: - {{- range .Values.image.pullSecrets }} - - name: {{ . }} - {{- end }} - {{- end }} \ No newline at end of file + updateStrategy: + rollingUpdate: + maxUnavailable: 100% + type: RollingUpdate \ No newline at end of file diff --git a/helm-chart/jackil-docker-gc/values.yaml b/src/docker-cache-cleaner/values.yaml similarity index 54% rename from helm-chart/jackil-docker-gc/values.yaml rename to src/docker-cache-cleaner/values.yaml index 62ccc32..5b0bc89 100644 --- a/helm-chart/jackil-docker-gc/values.yaml +++ b/src/docker-cache-cleaner/values.yaml @@ -1,36 +1,34 @@ # Default values for docker-gc. image: - repository: jackil/docker-gc - #Repository should be moved to AIR Shared Container Registry - #repository: airsharedcontainers.azurecr.io/docker-gc - tag: latest + repository: viennadroptest.azurecr.io/docker-cache-cleaner + tag: "{{app.drop.images.docker-cache-cleaner.tag}}" pullPolicy: IfNotPresent - # optional pull secrets - # pullSecrets: - # - "airsharedcontainers" docker: socketPath: /var/run/docker.sock volumeName: docker-volume +chart: docker-cache-cleaner +fullname: docker-cache-cleaner +fullnameOverride: docker-cache-cleaner +nameOverride: docker-cache-cleaner statsd: enabled: false #host: localhost #port: 8125 config: dockerEndpoint: unix:///var/run/docker.sock - executionIntervalInMinutes: 60 + executionIntervalInMinutes: 360 dockerClientTimeoutInSeconds: 180 imageDeletionOrder: ByImageLastTouchDate - #imageDeletionOrder: ByImageCreationDate strategy: ByDate - daysBeforeDeletion: 30 - #strategy: ByDiskSpace - #sizeLimitInGigabyte: + daysBeforeDeletion: 1 containerStateBlacklist: dead,exited +nodeSelector: + beta.kubernetes.io/os: linux resources: limits: cpu: 100m memory: 128Mi requests: - cpu: 100m + cpu: "0" memory: 128Mi diff --git a/vsts/.vsts-ci.yml b/vsts/.vsts-ci.yml new file mode 100644 index 0000000..dac2ad0 --- /dev/null +++ b/vsts/.vsts-ci.yml @@ -0,0 +1,53 @@ +# Docker +# Build a Docker image +# https://docs.microsoft.com/azure/devops/pipelines/languages/docker + + +trigger: none + +pool: + name: 'inferencing-ubuntu1804-01' + +resources: +- repo: self + +variables: +- name: Azure.ServiceConnectionId + value: 'Project Vienna Build (ad203158-bc5d-4e72-b764-2607833a71dc)' + +steps: +- checkout: self + persistCredentials: true + +- task: UsePythonVersion@0 + displayName: 'Use Python 3.8' + inputs: + versionSpec: 3.8 + +- task: AzureCLI@1 + displayName: 'Generate msftkube files' + env: + AZURE_DEVOPS_EXT_PAT: '$(System.AccessToken)' + inputs: + azureSubscription: '$(Azure.ServiceConnectionId)' + addSpnToEnvironment: true + scriptLocation: 'scriptPath' + scriptPath: '$(system.defaultWorkingDirectory)/scripts/task.sh' + args: --verbose full_drop + workingDirectory: '$(system.defaultWorkingDirectory)' + +- task: PublishPipelineArtifact@0 + displayName: 'Publish msftkube files as artifacts from $(build.artifactstagingdirectory)' + inputs: + artifactName: 'drop' + targetPath: '$(system.defaultWorkingDirectory)/build' + +- task: UniversalPackages@0 + displayName: Publish Package + inputs: + command: publish + publishDirectory: 'build' + vstsFeedPublish: 'mir-dev-feed' + vstsFeedPackagePublish: 'docker-cache-cleaner' + versionOption: 'patch' + packagePublishDescription: 'docker-cache-cleaner' \ No newline at end of file diff --git a/vsts/.vsts-master.yml b/vsts/.vsts-master.yml new file mode 100644 index 0000000..cb5f9d0 --- /dev/null +++ b/vsts/.vsts-master.yml @@ -0,0 +1,63 @@ +# Docker +# Build a Docker image +# https://docs.microsoft.com/azure/devops/pipelines/languages/docker + +trigger: + branches: + include: + - master + paths: + include: + - /* + +pr: + branches: + exclude: + - "*" + +pool: + name: 'inferencing-ubuntu1804-01' + +resources: +- repo: self + +variables: +- name: Azure.ServiceConnectionId + value: 'Project Vienna Build (ad203158-bc5d-4e72-b764-2607833a71dc)' + +steps: +- checkout: self + persistCredentials: true + +- task: UsePythonVersion@0 + displayName: 'Use Python 3.8' + inputs: + versionSpec: 3.8 + +- task: AzureCLI@1 + displayName: 'Generate msftkube files' + env: + AZURE_DEVOPS_EXT_PAT: '$(System.AccessToken)' + inputs: + azureSubscription: '$(Azure.ServiceConnectionId)' + addSpnToEnvironment: true + scriptLocation: 'scriptPath' + scriptPath: '$(system.defaultWorkingDirectory)/scripts/task.sh' + args: --verbose full_drop + workingDirectory: '$(system.defaultWorkingDirectory)' + +- task: PublishPipelineArtifact@0 + displayName: 'Publish msftkube files as artifacts from $(build.artifactstagingdirectory)' + inputs: + artifactName: 'drop' + targetPath: '$(system.defaultWorkingDirectory)/build' + +- task: UniversalPackages@0 + displayName: Publish Package + inputs: + command: publish + publishDirectory: 'build' + vstsFeedPublish: 'mir-release-feed' + vstsFeedPackagePublish: 'docker-cache-cleaner' + versionOption: 'patch' + packagePublishDescription: 'docker-cache-cleaner' \ No newline at end of file