diff --git a/boot.go b/boot.go
index 9866ef5..10c5f35 100644
--- a/boot.go
+++ b/boot.go
@@ -18,7 +18,7 @@ import (
 	"github.com/drycc/builder/pkg/sys"
 	pkglog "github.com/drycc/pkg/log"
 	"github.com/kelseyhightower/envconfig"
-	kcl "k8s.io/kubernetes/pkg/client/unversioned"
+	"github.com/drycc/builder/pkg/k8s"
 )
 
 const (
@@ -68,7 +68,7 @@ func main() {
 					os.Exit(1)
 				}
 
-				kubeClient, err := kcl.NewInCluster()
+				kubeClient, err := k8s.NewInCluster()
 				if err != nil {
 					log.Printf("Error getting kubernetes client [%s]", err)
 					os.Exit(1)
@@ -76,14 +76,14 @@ func main() {
 				log.Printf("Starting health check server on port %d", cnf.HealthSrvPort)
 				healthSrvCh := make(chan error)
 				go func() {
-					if err := healthsrv.Start(cnf, kubeClient.Namespaces(), storageDriver, circ); err != nil {
+					if err := healthsrv.Start(cnf, kubeClient.CoreV1().Namespaces(), storageDriver, circ); err != nil {
 						healthSrvCh <- err
 					}
 				}()
 				log.Printf("Starting deleted app cleaner")
 				cleanerErrCh := make(chan error)
 				go func() {
-					if err := cleaner.Run(gitHomeDir, kubeClient.Namespaces(), fs, cnf.CleanerPollSleepDuration(), storageDriver); err != nil {
+					if err := cleaner.Run(gitHomeDir, kubeClient.CoreV1().Namespaces(), fs, cnf.CleanerPollSleepDuration(), storageDriver); err != nil {
 						cleanerErrCh <- err
 					}
 				}()
diff --git a/go.mod b/go.mod
index 26d4426..051fcc7 100644
--- a/go.mod
+++ b/go.mod
@@ -3,57 +3,21 @@ module github.com/drycc/builder
 go 1.13
 
 require (
-	github.com/Azure/azure-sdk-for-go v35.0.0+incompatible // indirect
-	github.com/PuerkitoBio/purell v1.1.1 // indirect
-	github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
-	github.com/Sirupsen/logrus v0.7.3 // indirect
 	github.com/arschles/assert v0.0.0-20150820224400-6882f85ccdc7
 	github.com/aws/aws-sdk-go v1.28.2
-	github.com/blang/semver v3.5.0+incompatible // indirect
 	github.com/codegangsta/cli v1.9.0
-	github.com/cyphar/filepath-securejoin v0.2.2 // indirect
-	github.com/docker/distribution v0.0.0-00010101000000-000000000000
-	github.com/docker/docker v1.4.2-0.20150722082610-0f5c9d301b9b // indirect
-	github.com/docker/go-units v0.4.0 // indirect
+	github.com/docker/distribution v2.7.1+incompatible
+	github.com/docker/go-metrics v0.0.1 // indirect
 	github.com/drycc/controller-sdk-go v0.0.0-20190417134318-39a6c81f21f3
 	github.com/drycc/pkg v0.0.0-20190121053802-5c1dfa7b5446
-	github.com/emicklei/go-restful v2.9.5+incompatible // indirect
-	github.com/ghodss/yaml v1.0.0 // indirect
-	github.com/go-ini/ini v1.8.6 // indirect
-	github.com/google/cadvisor v0.35.0 // indirect
-	github.com/google/gofuzz v1.1.0 // indirect
-	github.com/gorilla/context v1.1.1 // indirect
-	github.com/gorilla/mux v1.7.0 // indirect
-	github.com/goware/urlx v0.0.0-20160722204212-8bb4a2e4339f // indirect
-	github.com/juju/ratelimit v0.0.0-20151125201925-77ed1c8a0121 // indirect
+	github.com/gorilla/mux v1.7.4 // indirect
+	github.com/goware/urlx v0.3.1 // indirect
 	github.com/kelseyhightower/envconfig v1.2.0
-	github.com/mitchellh/mapstructure v1.1.2 // indirect
-	github.com/ncw/swift v1.0.20-0.20151102203822-c54732e87b0b // indirect
-	github.com/opencontainers/runc v0.0.7 // indirect
-	github.com/opencontainers/runtime-spec v1.0.2 // indirect
 	github.com/pborman/uuid v1.2.0
-	github.com/prometheus/client_golang v1.0.0 // indirect
-	github.com/prometheus/client_model v0.2.0 // indirect
-	github.com/spf13/pflag v1.0.5 // indirect
-	github.com/ugorji/go v0.0.0-20160211161415-f4485b318aad // indirect
-	golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9
-	golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect
-	golang.org/x/tools v0.0.0-20200725200936-102e7d357031 // indirect
-	google.golang.org/api v0.6.1-0.20190607001116-5213b8090861 // indirect
-	google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8 // indirect
-	google.golang.org/grpc v1.26.0 // indirect
+	github.com/sirupsen/logrus v1.6.0 // indirect
+	golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975
 	gopkg.in/yaml.v2 v2.2.8
-	k8s.io/kubernetes v1.2.4
-	speter.net/go/exp/math/dec/inf v0.0.0-00010101000000-000000000000 // indirect
-)
-
-replace (
-	bitbucket.org/ww/goautoneg => github.com/rancher/goautoneg v0.0.0-20120707110453-a547fc61f48d
-	github.com/Sirupsen/logrus => github.com/sirupsen/logrus v0.7.3
-	github.com/docker/distribution => github.com/drycc/distribution v2.1.2-0.20160613220734-0afef00d5764+incompatible
-	github.com/emicklei/go-restful => github.com/emicklei/go-restful v1.1.4-0.20151126145626-777bb3f19bca
-	github.com/influxdb/influxdb => github.com/influxdata/influxdb v1.8.1
-	github.com/microsoft/hcsshim => github.com/Microsoft/hcsshim v0.8.9
-	github.com/renstrom/dedent => github.com/lithammer/dedent v1.1.0
-	speter.net/go/exp/math/dec/inf => github.com/belua/inf v0.0.0-20151208101502-46a406493388
-)
+	k8s.io/api v0.18.6
+	k8s.io/apimachinery v0.18.6
+	k8s.io/client-go v0.18.6
+)
\ No newline at end of file
diff --git a/go.sum b/go.sum
index ea728bc..96c68a5 100644
--- a/go.sum
+++ b/go.sum
@@ -1,238 +1,267 @@
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
-github.com/Azure/azure-sdk-for-go v35.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
+github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
+github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
+github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
+github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
+github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
+github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
+github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
+github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
 github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
 github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
+github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
 github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
 github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
-github.com/Sirupsen/logrus v0.7.3 h1:G04jzNEnKQKTemyvbCV32zFbOu+D++ECKnCFazUjPdc=
-github.com/Sirupsen/logrus v0.7.3/go.mod h1:rmk17hk6i8ZSAJkSDa7nOxamrG+SP4P0mm+DAvExv4U=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/arschles/assert v0.0.0-20150820224400-6882f85ccdc7 h1:UZug/mu2sPCjPX61jcJrocE1eYL7OckGAIloM6WqXZU=
 github.com/arschles/assert v0.0.0-20150820224400-6882f85ccdc7/go.mod h1:m/u69zW43x0h8dTHcv3JJZljINyEYgBuf5fYJP6WikI=
 github.com/aws/aws-sdk-go v1.28.2 h1:j5IXG9CdyLfcVfICqo1PXVv+rua+QQHbkXuvuU/JF+8=
 github.com/aws/aws-sdk-go v1.28.2/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
-github.com/belua/inf v0.0.0-20151208101502-46a406493388 h1:6ZBMFSwDO7mWvmWOUAi/9zI8XIlrt3fsBDLQpLlp1xE=
-github.com/belua/inf v0.0.0-20151208101502-46a406493388/go.mod h1:+JQowIwv2r3uUS97bd8MILHj9X0PvEridXxHPBVxz7E=
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
-github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0=
 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
-github.com/blang/semver v3.5.0+incompatible h1:CGxCgetQ64DKk7rdZ++Vfnb1+ogGNnB17OJKJXD2Cfs=
-github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/codegangsta/cli v1.9.0 h1:+cxlAL8Q/BQ4Y5zYwSSpRuwFzD0anjZvOPl6I1kTwQc=
 github.com/codegangsta/cli v1.9.0/go.mod h1:/qJNoX69yVSKu5o4jLyXAENLRyk1uhi7zkbQ3slBdOA=
-github.com/cyphar/filepath-securejoin v0.2.2 h1:jCwT2GTP+PY5nBz3c/YL5PAIbusElVrPujOBSCj8xRg=
-github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4=
-github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/docker/docker v1.4.2-0.20150722082610-0f5c9d301b9b h1:qKktLGP5A96BXXF6cL51WK22r/2uba2CsTFEhJgnkt4=
-github.com/docker/docker v1.4.2-0.20150722082610-0f5c9d301b9b/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
-github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
+github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
+github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug=
+github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
+github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8=
+github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw=
+github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
 github.com/drycc/controller-sdk-go v0.0.0-20190417134318-39a6c81f21f3 h1:SzH+2aP7vpfvyPWaKtkIPnGbhdTWIWL2mQzQuzqAS9k=
 github.com/drycc/controller-sdk-go v0.0.0-20190417134318-39a6c81f21f3/go.mod h1:bf3lPkMsCK+DmEd8wc1yk3Wj0pDPni6cqglR+jqo1Dc=
 github.com/drycc/distribution v2.1.2-0.20160613220734-0afef00d5764+incompatible h1:iQoaSo05LLumOOvkhp6cD0M0fVoFKBv6Qjg7Q1U2r8k=
 github.com/drycc/distribution v2.1.2-0.20160613220734-0afef00d5764+incompatible/go.mod h1:lF7pZy5waY0bDUoxe04ok35Rv1n2JGiIQdQtltPkTTM=
 github.com/drycc/pkg v0.0.0-20190121053802-5c1dfa7b5446 h1:K1Fn81dWtqEzTL6NR/mlUFvH5yegdGusfJM0XTOh1+k=
 github.com/drycc/pkg v0.0.0-20190121053802-5c1dfa7b5446/go.mod h1:zNgTT6kuGZOKMIdSrjskIw5fctdbbszqiTPEt3ffxHw=
-github.com/emicklei/go-restful v1.1.4-0.20151126145626-777bb3f19bca h1:6r50JDdCFw/00MQAmSpWCNIneTyLzLA0F/2qy4LE52w=
+github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
+github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
 github.com/emicklei/go-restful v1.1.4-0.20151126145626-777bb3f19bca/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
-github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk=
-github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
-github.com/emicklei/go-restful v2.13.0+incompatible h1:XwckZriGdbXs1EoZ7Y1MdH6hWqZ4XnkFSiEibNi5BXg=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
-github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
-github.com/go-ini/ini v1.8.6/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
+github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
+github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
+github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
+github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
+github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
+github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
+github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
+github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/cadvisor v0.35.0 h1:qivoEm+iGqTrd0CKSmQidxfOxUxkNZovvYs/8G6B6ao=
-github.com/google/cadvisor v0.35.0/go.mod h1:1nql6U13uTHaLYB8rLS5x9IJc2qT6Xd/Tr1sTX6NE48=
+github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
 github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
 github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
-github.com/google/uuid v1.0.0 h1:b4Gk+7WdP/d3HZH8EJsZpvV7EtDOgaZLtnaNGIu1adA=
 github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
+github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
-github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
-github.com/gorilla/mux v1.7.0 h1:tOSd0UKHQd6urX6ApfOn4XdBMY6Sh1MfxV3kmaazO+U=
-github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-github.com/goware/urlx v0.0.0-20160722204212-8bb4a2e4339f h1:rCUE1co2KwQPwCwxbHAzUJ5i9NEknxutn68JYOoLSR8=
-github.com/goware/urlx v0.0.0-20160722204212-8bb4a2e4339f/go.mod h1:Zn362WbIrTvMfW1tj4MxrEct8vJtNlnljZPnRssPfDU=
+github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
+github.com/googleapis/gnostic v0.1.0 h1:rVsPeBmXbYv4If/cumu1AzZPwV58q433hvONV1UEZoI=
+github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
+github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
+github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc=
+github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
+github.com/goware/urlx v0.3.1 h1:BbvKl8oiXtJAzOzMqAQ0GfIhf96fKeNEZfm9ocNSUBI=
+github.com/goware/urlx v0.3.1/go.mod h1:h8uwbJy68o+tQXCGZNa9D73WN8n0r9OBae5bUnLcgjw=
+github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
 github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
 github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
 github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM=
 github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok=
+github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
-github.com/juju/ratelimit v0.0.0-20151125201925-77ed1c8a0121 h1:tK7/W+/VbVcqFcQzl3qMnrc/z3h/XOBIrJ9e/cv5hx4=
-github.com/juju/ratelimit v0.0.0-20151125201925-77ed1c8a0121/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk=
 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
 github.com/kelseyhightower/envconfig v1.2.0 h1:ShuWkCxhdgKvpbfMMuCPjAKfdMDS/iClYwdQDByknVk=
 github.com/kelseyhightower/envconfig v1.2.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg=
-github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
+github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
+github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/ncw/swift v1.0.20-0.20151102203822-c54732e87b0b/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
-github.com/opencontainers/runc v0.0.7 h1:QfJv5w4VXEPOzUiyq471JnLyG5sZk3ogeNlzpTUyiX8=
-github.com/opencontainers/runc v0.0.7/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
-github.com/opencontainers/runc v1.0.0-rc10 h1:AbmCEuSZXVflng0/cboQkpdEOeBsPMjz6tmq4Pv8MZw=
-github.com/opencontainers/runc v1.0.0-rc10/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
-github.com/opencontainers/runtime-spec v1.0.2 h1:UfAcuLBJB9Coz72x1hgl8O5RVzTdNiaglX6v2DM6FI0=
-github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
+github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
+github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g=
 github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
-github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
+github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
-github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM=
 github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
+github.com/prometheus/client_golang v1.1.0 h1:BQ53HtBmfOitExawJ6LokA4x8ov/z0SYYb0+HxJfRI8=
+github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE=
 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
-github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
 github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.6.0 h1:kRhiuYSXR3+uv2IbVbZhUxK5zVD/2pp3Gd2PpvPkpEo=
+github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
 github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.3 h1:CTwfnzjQ+8dS6MhHHu4YswVAD99sL2wjPqP+VkURmKE=
+github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
 github.com/sirupsen/logrus v0.7.3 h1:kQjcODT3d3zc0DOfhbg+bl6Q08gmD6Grhn8yByIDlFQ=
 github.com/sirupsen/logrus v0.7.3/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
-github.com/sirupsen/logrus v1.2.0 h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
+github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
+github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
+github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
+github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/ugorji/go v0.0.0-20160211161415-f4485b318aad h1:wX4pnxjugZqNJRjP8uBMi8O9I81j2J0XQr66BYV5MEQ=
-github.com/ugorji/go v0.0.0-20160211161415-f4485b318aad/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=
-github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo=
 golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190409202823-959b441ac422 h1:QzoH/1pFpZguR8NrRHLcO6jKqfv2zpuSqZLgdm7ZmjI=
-golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k=
-golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 h1:rjwSpXsdiK0dV8/Naq3kAw9ymfAeJIyd0upUIElB+lI=
 golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4=
-golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b h1:ag/x1USPSsqHud38I9BAC88qdNLDHHtQ4mlgQIZPPNA=
-golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
-golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7 h1:HmbHVPwrPEKPGLAcHSrMe6+hqSUlvZU0rab6x5EXfGU=
+golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ=
+golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135 h1:5Beo0mZN8dRzgrMMkDp0jc8YXQKx9DiJ2k1dkvGsn5A=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200725200936-102e7d357031 h1:VtIxiVHWPhnny2ZTi4f9/2diZKqyLaq3FUTuud5+khA=
-golang.org/x/tools v0.0.0-20200725200936-102e7d357031/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
-google.golang.org/api v0.6.1-0.20190607001116-5213b8090861/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c=
 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk=
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
 google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
-google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
+gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
 gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-k8s.io/kubernetes v1.2.4 h1:rOszJFT1QaY925L+fhQMIizfQRJzKm9Q9FthajiBZ5g=
-k8s.io/kubernetes v1.2.4/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk=
+k8s.io/api v0.18.6 h1:osqrAXbOQjkKIWDTjrqxWQ3w0GkKb1KA1XkUGHHYpeE=
+k8s.io/api v0.18.6/go.mod h1:eeyxr+cwCjMdLAmr2W3RyDI0VvTawSg/3RFFBEnmZGI=
+k8s.io/apimachinery v0.18.6 h1:RtFHnfGNfd1N0LeSrKCUznz5xtUP1elRGvHJbL3Ntag=
+k8s.io/apimachinery v0.18.6/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko=
+k8s.io/client-go v0.18.6 h1:I+oWqJbibLSGsZj8Xs8F0aWVXJVIoUHWaaJV3kUN/Zw=
+k8s.io/client-go v0.18.6/go.mod h1:/fwtGLjYMS1MaM5oi+eXhKwG+1UHidUEXRh6cNsdO0Q=
+k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
+k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
+k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
+k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
+k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E=
+k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89 h1:d4vVOjXm687F1iLSP2q3lyPPuyvTUt3aVoBpi2DqRsU=
+k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
+sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=
+sigs.k8s.io/structured-merge-diff/v3 v3.0.0 h1:dOmIZBMfhcHS09XZkMyUgkq5trg3/jRyJYFZUiaOp8E=
+sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=
+sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
+sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
+sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
\ No newline at end of file
diff --git a/pkg/cleaner/cleaner.go b/pkg/cleaner/cleaner.go
index 747ba69..66ab173 100644
--- a/pkg/cleaner/cleaner.go
+++ b/pkg/cleaner/cleaner.go
@@ -9,16 +9,19 @@ import (
 	"regexp"
 	"strings"
 	"time"
+	"context"
 
-	"github.com/docker/distribution/context"
+	//"github.com/docker/distribution/context"
 	storagedriver "github.com/docker/distribution/registry/storage/driver"
 	"github.com/drycc/builder/pkg/gitreceive"
 	"github.com/drycc/builder/pkg/k8s"
 	"github.com/drycc/builder/pkg/sys"
 	"github.com/drycc/pkg/log"
-	"k8s.io/kubernetes/pkg/api"
-	"k8s.io/kubernetes/pkg/fields"
-	"k8s.io/kubernetes/pkg/labels"
+	corev1 "k8s.io/api/core/v1"
+	//"k8s.io/apimachinery/pkg/labels"
+	//"k8s.io/apimachinery/pkg/fields"
+	//"k8s.io/apimachinery/pkg/apis/meta/internalversion"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 )
 
 const (
@@ -46,7 +49,7 @@ func localDirs(gitHome string, filter func(string) bool) ([]string, error) {
 }
 
 // getDiff gets the directories that are not in namespaceList
-func getDiff(namespaceList []api.Namespace, dirs []string) []string {
+func getDiff(namespaceList []corev1.Namespace, dirs []string) []string {
 	var ret []string
 
 	// create a set of lowercase namespace names
@@ -123,7 +126,7 @@ func deleteFromObjectStore(app string, storageDriver storagedriver.StorageDriver
 // On any error, it uses log messages to output a human readable description of what happened.
 func Run(gitHome string, nsLister k8s.NamespaceLister, fs sys.FS, pollSleepDuration time.Duration, storageDriver storagedriver.StorageDriver) error {
 	for {
-		nsList, err := nsLister.List(api.ListOptions{LabelSelector: labels.Everything(), FieldSelector: fields.Everything()})
+		nsList, err := nsLister.List(context.TODO(), metav1.ListOptions{})
 		if err != nil {
 			log.Err("Cleaner error listing namespaces (%s)", err)
 			continue
diff --git a/pkg/cleaner/cleaner_test.go b/pkg/cleaner/cleaner_test.go
index bbe663c..a00fb1d 100644
--- a/pkg/cleaner/cleaner_test.go
+++ b/pkg/cleaner/cleaner_test.go
@@ -7,13 +7,14 @@ import (
 	"testing"
 
 	"github.com/arschles/assert"
-	"k8s.io/kubernetes/pkg/api"
+	"k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 )
 
 func TestGetDiff(t *testing.T) {
-	nsList := []api.Namespace{
-		{ObjectMeta: api.ObjectMeta{Name: "app1"}},
-		{ObjectMeta: api.ObjectMeta{Name: "app2"}},
+	nsList := []v1.Namespace{
+		{ObjectMeta: metav1.ObjectMeta{Name: "app1"}},
+		{ObjectMeta: metav1.ObjectMeta{Name: "app2"}},
 	}
 	dirList := []string{"app1", "app3"}
 	diff := getDiff(nsList, dirList)
diff --git a/pkg/gitreceive/build.go b/pkg/gitreceive/build.go
index 9989868..b8b3652 100644
--- a/pkg/gitreceive/build.go
+++ b/pkg/gitreceive/build.go
@@ -10,6 +10,7 @@ import (
 	"os/exec"
 	"path/filepath"
 	"strings"
+	ctx "context"
 
 	"github.com/docker/distribution/context"
 	storagedriver "github.com/docker/distribution/registry/storage/driver"
@@ -22,8 +23,9 @@ import (
 	"github.com/drycc/controller-sdk-go/hooks"
 	"github.com/drycc/pkg/log"
 	"gopkg.in/yaml.v2"
-	"k8s.io/kubernetes/pkg/api"
-	client "k8s.io/kubernetes/pkg/client/unversioned"
+	"k8s.io/client-go/kubernetes"
+	corev1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 )
 
 // repoCmd returns exec.Command(first, others...) with its current working directory repoDir
@@ -48,7 +50,8 @@ func run(cmd *exec.Cmd) error {
 func build(
 	conf *Config,
 	storageDriver storagedriver.StorageDriver,
-	kubeClient *client.Client,
+	//kubeClient *client.Client,
+	kubeClient *kubernetes.Clientset,
 	fs sys.FS,
 	env sys.Env,
 	builderKey,
@@ -146,7 +149,7 @@ func build(
 		return fmt.Errorf("uploading %s to %s (%v)", absAppTgz, slugBuilderInfo.TarKey(), err)
 	}
 
-	var pod *api.Pod
+	var pod *corev1.Pod
 	var buildPodName string
 	image := appName
 
@@ -160,7 +163,7 @@ func build(
 		registryLocation := conf.RegistryLocation
 		registryEnv := make(map[string]string)
 		if registryLocation != "on-cluster" {
-			registryEnv, err = getRegistryDetails(kubeClient, &image, registryLocation, conf.PodNamespace)
+			registryEnv, err = getRegistryDetails(kubeClient.CoreV1(), &image, registryLocation, conf.PodNamespace)
 			if err != nil {
 				return fmt.Errorf("error getting private registry details %s", err)
 			}
@@ -192,12 +195,12 @@ func build(
 			cacheKey = slugBuilderInfo.CacheKey()
 		}
 		envSecretName := fmt.Sprintf("%s-build-env", appName)
-		err = createAppEnvConfigSecret(kubeClient.Secrets(conf.PodNamespace), envSecretName, appConf.Values)
+		err = createAppEnvConfigSecret(kubeClient.CoreV1().Secrets(conf.PodNamespace), envSecretName, appConf.Values)
 		if err != nil {
 			return fmt.Errorf("error creating/updating secret %s: (%s)", envSecretName, err)
 		}
 		defer func() {
-			if err := kubeClient.Secrets(conf.PodNamespace).Delete(envSecretName); err != nil {
+			if err := kubeClient.CoreV1().Secrets(conf.PodNamespace).Delete(ctx.TODO(), envSecretName, metav1.DeleteOptions{}); err != nil {
 				log.Info("unable to delete secret %s (%s)", envSecretName, err)
 			}
 		}()
@@ -227,14 +230,14 @@ func build(
 		log.Debug("Error creating json representation of pod spec: %v", err)
 	}
 
-	podsInterface := kubeClient.Pods(conf.PodNamespace)
+	podsInterface := kubeClient.CoreV1().Pods(conf.PodNamespace)
 
-	newPod, err := podsInterface.Create(pod)
+	newPod, err := podsInterface.Create(ctx.TODO(), pod, metav1.CreateOptions{})
 	if err != nil {
 		return fmt.Errorf("creating builder pod (%s)", err)
 	}
 
-	pw := k8s.NewPodWatcher(kubeClient, conf.PodNamespace)
+	pw := k8s.NewPodWatcher(*kubeClient, conf.PodNamespace)
 	stopCh := make(chan struct{})
 	defer close(stopCh)
 	go pw.Controller.Run(stopCh)
@@ -243,12 +246,12 @@ func build(
 		return fmt.Errorf("watching events for builder pod startup (%s)", err)
 	}
 
-	req := kubeClient.Get().Namespace(newPod.Namespace).Name(newPod.Name).Resource("pods").SubResource("log").VersionedParams(
-		&api.PodLogOptions{
+	req := kubeClient.CoreV1().RESTClient().Get().Namespace(newPod.Namespace).Name(newPod.Name).Resource("pods").SubResource("log").VersionedParams(
+		&corev1.PodLogOptions{
 			Follow: true,
-		}, api.ParameterCodec)
+		}, metav1.ParameterCodec)
 
-	rc, err := req.Stream()
+	rc, err := req.Stream(ctx.TODO())
 	if err != nil {
 		return fmt.Errorf("attempting to stream logs (%s)", err)
 	}
@@ -274,7 +277,7 @@ func build(
 	}
 	log.Debug("Done")
 	log.Debug("Checking for builder pod exit code")
-	buildPod, err := kubeClient.Pods(newPod.Namespace).Get(newPod.Name)
+	buildPod, err := kubeClient.CoreV1().Pods(newPod.Namespace).Get(ctx.TODO(), newPod.Name, metav1.GetOptions{})
 	if err != nil {
 		return fmt.Errorf("error getting builder pod status (%s)", err)
 	}
diff --git a/pkg/gitreceive/build_test.go b/pkg/gitreceive/build_test.go
index 982f681..537744c 100644
--- a/pkg/gitreceive/build_test.go
+++ b/pkg/gitreceive/build_test.go
@@ -9,9 +9,9 @@ import (
 	"os/exec"
 	"path/filepath"
 	"testing"
-
+	"context"
 	"github.com/arschles/assert"
-	"github.com/docker/distribution/context"
+	//"github.com/docker/distribution/context"
 	"github.com/docker/distribution/registry/storage/driver/factory"
 	_ "github.com/docker/distribution/registry/storage/driver/inmemory"
 	builderconf "github.com/drycc/builder/pkg/conf"
diff --git a/pkg/gitreceive/k8s_util.go b/pkg/gitreceive/k8s_util.go
index 7a48e89..608a63f 100644
--- a/pkg/gitreceive/k8s_util.go
+++ b/pkg/gitreceive/k8s_util.go
@@ -1,17 +1,19 @@
 package gitreceive
 
 import (
+	"context"
 	"encoding/json"
 	"fmt"
 	"time"
 
 	"github.com/drycc/builder/pkg/k8s"
 	"github.com/pborman/uuid"
-	"k8s.io/kubernetes/pkg/api"
-	apierrors "k8s.io/kubernetes/pkg/api/errors"
-	client "k8s.io/kubernetes/pkg/client/unversioned"
-	"k8s.io/kubernetes/pkg/labels"
-	"k8s.io/kubernetes/pkg/util/wait"
+	"k8s.io/apimachinery/pkg/util/wait"
+	corev1 "k8s.io/api/core/v1"
+	apierrors "k8s.io/apimachinery/pkg/api/errors"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/labels"
+	typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1"
 )
 
 const (
@@ -62,9 +64,10 @@ func dockerBuilderPod(
 	registryHost,
 	registryPort string,
 	registryEnv map[string]string,
-	pullPolicy api.PullPolicy,
+	pullPolicy corev1.PullPolicy,
 	nodeSelector map[string]string,
-) *api.Pod {
+//) *api.Pod {
+) *corev1.Pod {
 
 	pod := buildPod(debug, name, namespace, pullPolicy, nodeSelector, env)
 
@@ -111,22 +114,22 @@ func slugbuilderPod(
 	gitShortHash string,
 	storageType,
 	image string,
-	pullPolicy api.PullPolicy,
+	pullPolicy corev1.PullPolicy,
 	nodeSelector map[string]string,
-) *api.Pod {
+) *corev1.Pod {
 
 	pod := buildPod(debug, name, namespace, pullPolicy, nodeSelector, nil)
 
-	pod.Spec.Volumes = append(pod.Spec.Volumes, api.Volume{
+	pod.Spec.Volumes = append(pod.Spec.Volumes, corev1.Volume{
 		Name: envSecretName,
-		VolumeSource: api.VolumeSource{
-			Secret: &api.SecretVolumeSource{
+		VolumeSource: corev1.VolumeSource{
+			Secret: &corev1.SecretVolumeSource{
 				SecretName: envSecretName,
 			},
 		},
 	})
 
-	pod.Spec.Containers[0].VolumeMounts = append(pod.Spec.Containers[0].VolumeMounts, api.VolumeMount{
+	pod.Spec.Containers[0].VolumeMounts = append(pod.Spec.Containers[0].VolumeMounts, corev1.VolumeMount{
 		Name:      envSecretName,
 		MountPath: envRoot,
 		ReadOnly:  true,
@@ -152,21 +155,21 @@ func buildPod(
 	debug bool,
 	name,
 	namespace string,
-	pullPolicy api.PullPolicy,
+	//pullPolicy api.PullPolicy,
+	pullPolicy corev1.PullPolicy,
 	nodeSelector map[string]string,
-	env map[string]interface{}) api.Pod {
-
-	pod := api.Pod{
-		Spec: api.PodSpec{
-			RestartPolicy: api.RestartPolicyNever,
-			Containers: []api.Container{
+	env map[string]interface{}) corev1.Pod {
+	pod := corev1.Pod{
+		Spec: corev1.PodSpec{
+			RestartPolicy: corev1.RestartPolicyNever,
+			Containers: []corev1.Container{
 				{
 					ImagePullPolicy: pullPolicy,
 				},
 			},
-			Volumes: []api.Volume{},
+			Volumes: []corev1.Volume{},
 		},
-		ObjectMeta: api.ObjectMeta{
+		ObjectMeta: metav1.ObjectMeta{
 			Name:      name,
 			Namespace: namespace,
 			Labels: map[string]string{
@@ -175,16 +178,16 @@ func buildPod(
 		},
 	}
 
-	pod.Spec.Volumes = append(pod.Spec.Volumes, api.Volume{
+	pod.Spec.Volumes = append(pod.Spec.Volumes, corev1.Volume{
 		Name: objectStore,
-		VolumeSource: api.VolumeSource{
-			Secret: &api.SecretVolumeSource{
+		VolumeSource: corev1.VolumeSource{
+			Secret: &corev1.SecretVolumeSource{
 				SecretName: objectStore,
 			},
 		},
 	})
 
-	pod.Spec.Containers[0].VolumeMounts = []api.VolumeMount{
+	pod.Spec.Containers[0].VolumeMounts = []corev1.VolumeMount{
 		{
 			Name:      objectStore,
 			MountPath: objectStorePath,
@@ -194,7 +197,7 @@ func buildPod(
 
 	if len(pod.Spec.Containers) > 0 {
 		for k, v := range env {
-			pod.Spec.Containers[0].Env = append(pod.Spec.Containers[0].Env, api.EnvVar{
+			pod.Spec.Containers[0].Env = append(pod.Spec.Containers[0].Env, corev1.EnvVar{
 				Name:  k,
 				Value: fmt.Sprintf("%v", v),
 			})
@@ -212,9 +215,9 @@ func buildPod(
 	return pod
 }
 
-func addEnvToPod(pod api.Pod, key, value string) {
+func addEnvToPod(pod corev1.Pod, key, value string) {
 	if len(pod.Spec.Containers) > 0 {
-		pod.Spec.Containers[0].Env = append(pod.Spec.Containers[0].Env, api.EnvVar{
+		pod.Spec.Containers[0].Env = append(pod.Spec.Containers[0].Env, corev1.EnvVar{
 			Name:  key,
 			Value: value,
 		})
@@ -223,14 +226,14 @@ func addEnvToPod(pod api.Pod, key, value string) {
 
 // waitForPod waits for a pod in state running, succeeded or failed
 func waitForPod(pw *k8s.PodWatcher, ns, podName string, ticker, interval, timeout time.Duration) error {
-	condition := func(pod *api.Pod) (bool, error) {
-		if pod.Status.Phase == api.PodRunning {
+	condition := func(pod *corev1.Pod) (bool, error) {
+		if pod.Status.Phase == corev1.PodRunning {
 			return true, nil
 		}
-		if pod.Status.Phase == api.PodSucceeded {
+		if pod.Status.Phase == corev1.PodSucceeded {
 			return true, nil
 		}
-		if pod.Status.Phase == api.PodFailed {
+		if pod.Status.Phase == corev1.PodFailed {
 			return true, fmt.Errorf("Giving up; pod went into failed status: \n[%s]:%s", pod.Status.Reason, pod.Status.Message)
 		}
 		return false, nil
@@ -245,11 +248,11 @@ func waitForPod(pw *k8s.PodWatcher, ns, podName string, ticker, interval, timeou
 
 // waitForPodEnd waits for a pod in state succeeded or failed
 func waitForPodEnd(pw *k8s.PodWatcher, ns, podName string, interval, timeout time.Duration) error {
-	condition := func(pod *api.Pod) (bool, error) {
-		if pod.Status.Phase == api.PodSucceeded {
+	condition := func(pod *corev1.Pod) (bool, error) {
+		if pod.Status.Phase == corev1.PodSucceeded {
 			return true, nil
 		}
-		if pod.Status.Phase == api.PodFailed {
+		if pod.Status.Phase == corev1.PodFailed {
 			return true, nil
 		}
 		return false, nil
@@ -259,7 +262,7 @@ func waitForPodEnd(pw *k8s.PodWatcher, ns, podName string, interval, timeout tim
 }
 
 // waitForPodCondition waits for a pod in state defined by a condition (func)
-func waitForPodCondition(pw *k8s.PodWatcher, ns, podName string, condition func(pod *api.Pod) (bool, error),
+func waitForPodCondition(pw *k8s.PodWatcher, ns, podName string, condition func(pod *corev1.Pod) (bool, error),
 	interval, timeout time.Duration) error {
 	return wait.PollImmediate(interval, timeout, func() (bool, error) {
 		pods, err := pw.Store.List(labels.Set{"heritage": podName}.AsSelector())
@@ -296,17 +299,17 @@ func progress(msg string, interval time.Duration) chan bool {
 	return quit
 }
 
-func createAppEnvConfigSecret(secretsClient client.SecretsInterface, secretName string, env map[string]interface{}) error {
-	newSecret := new(api.Secret)
+func createAppEnvConfigSecret(secretsClient typedcorev1.SecretInterface, secretName string, env map[string]interface{}) error {
+	newSecret := new(corev1.Secret)
 	newSecret.Name = secretName
-	newSecret.Type = api.SecretTypeOpaque
+	newSecret.Type = corev1.SecretTypeOpaque
 	newSecret.Data = make(map[string][]byte)
 	for k, v := range env {
 		newSecret.Data[k] = []byte(fmt.Sprintf("%v", v))
 	}
-	if _, err := secretsClient.Create(newSecret); err != nil {
+	if _, err := secretsClient.Create(context.TODO(), newSecret, metav1.CreateOptions{}); err != nil {
 		if apierrors.IsAlreadyExists(err) {
-			_, err = secretsClient.Update(newSecret)
+			_, err = secretsClient.Update(context.TODO(), newSecret, metav1.UpdateOptions{})
 			return err
 		}
 		return err
diff --git a/pkg/gitreceive/k8s_util_test.go b/pkg/gitreceive/k8s_util_test.go
index 0a8da2d..febab46 100644
--- a/pkg/gitreceive/k8s_util_test.go
+++ b/pkg/gitreceive/k8s_util_test.go
@@ -8,8 +8,8 @@ import (
 
 	"github.com/arschles/assert"
 	"github.com/drycc/builder/pkg/k8s"
-	"k8s.io/kubernetes/pkg/api"
-	apierrors "k8s.io/kubernetes/pkg/api/errors"
+	corev1 "k8s.io/api/core/v1"
+	apierrors "k8s.io/apimachinery/pkg/api/errors"
 )
 
 func TestDockerBuilderPodName(t *testing.T) {
@@ -53,7 +53,7 @@ type slugBuildCase struct {
 	cacheKey                   string
 	gitShortHash               string
 	slugBuilderImage           string
-	slugBuilderImagePullPolicy api.PullPolicy
+	slugBuilderImagePullPolicy corev1.PullPolicy
 	storageType                string
 	builderPodNodeSelector     map[string]string
 }
@@ -67,7 +67,7 @@ type dockerBuildCase struct {
 	gitShortHash                 string
 	imgName                      string
 	dockerBuilderImage           string
-	dockerBuilderImagePullPolicy api.PullPolicy
+	dockerBuilderImagePullPolicy corev1.PullPolicy
 	storageType                  string
 	builderPodNodeSelector       map[string]string
 }
@@ -82,7 +82,7 @@ func TestBuildPod(t *testing.T) {
 	buildArgsEnv["DRYCC_DOCKER_BUILD_ARGS_ENABLED"] = "1"
 	buildArgsEnv["KEY"] = "VALUE"
 	envSecretName := "test-build-env"
-	var pod *api.Pod
+	var pod *corev1.Pod
 
 	emptyNodeSelector := make(map[string]string)
 
@@ -94,14 +94,14 @@ func TestBuildPod(t *testing.T) {
 	nodeSelector2["network"] = "fast"
 
 	slugBuilds := []slugBuildCase{
-		{true, "test", "default", emptyEnv, envSecretName, "tar", "put-url", "cache-url", "deadbeef", "", api.PullAlways, "", emptyNodeSelector},
-		{true, "test", "default", emptyEnv, envSecretName, "tar", "put-url", "cache-url", "deadbeef", "", api.PullAlways, "", emptyNodeSelector},
-		{true, "test", "default", emptyEnv, envSecretName, "tar", "put-url", "", "deadbeef", "", api.PullAlways, "", emptyNodeSelector},
-		{true, "test", "default", env, envSecretName, "tar", "put-url", "cache-url", "deadbeef", "", api.PullAlways, "", emptyNodeSelector},
-		{true, "test", "default", env, envSecretName, "tar", "put-url", "cache-url", "deadbeef", "", api.PullAlways, "", emptyNodeSelector},
-		{true, "test", "default", env, envSecretName, "tar", "put-url", "cache-url", "deadbeef", "customimage", api.PullAlways, "", nil},
-		{true, "test", "default", env, envSecretName, "tar", "put-url", "cache-url", "deadbeef", "customimage", api.PullIfNotPresent, "", nodeSelector1},
-		{true, "test", "default", env, envSecretName, "tar", "put-url", "cache-url", "deadbeef", "customimage", api.PullNever, "", nodeSelector2},
+		{true, "test", "default", emptyEnv, envSecretName, "tar", "put-url", "cache-url", "deadbeef", "", corev1.PullAlways, "", emptyNodeSelector},
+		{true, "test", "default", emptyEnv, envSecretName, "tar", "put-url", "cache-url", "deadbeef", "", corev1.PullAlways, "", emptyNodeSelector},
+		{true, "test", "default", emptyEnv, envSecretName, "tar", "put-url", "", "deadbeef", "", corev1.PullAlways, "", emptyNodeSelector},
+		{true, "test", "default", env, envSecretName, "tar", "put-url", "cache-url", "deadbeef", "", corev1.PullAlways, "", emptyNodeSelector},
+		{true, "test", "default", env, envSecretName, "tar", "put-url", "cache-url", "deadbeef", "", corev1.PullAlways, "", emptyNodeSelector},
+		{true, "test", "default", env, envSecretName, "tar", "put-url", "cache-url", "deadbeef", "customimage", corev1.PullAlways, "", nil},
+		{true, "test", "default", env, envSecretName, "tar", "put-url", "cache-url", "deadbeef", "customimage", corev1.PullIfNotPresent, "", nodeSelector1},
+		{true, "test", "default", env, envSecretName, "tar", "put-url", "cache-url", "deadbeef", "customimage", corev1.PullNever, "", nodeSelector2},
 	}
 
 	for _, build := range slugBuilds {
@@ -158,14 +158,14 @@ func TestBuildPod(t *testing.T) {
 	}
 
 	dockerBuilds := []dockerBuildCase{
-		{true, "test", "default", emptyEnv, "tar", "deadbeef", "", "", api.PullAlways, "", nodeSelector1},
-		{true, "test", "default", env, "tar", "deadbeef", "", "", api.PullAlways, "", nodeSelector2},
-		{true, "test", "default", emptyEnv, "tar", "deadbeef", "img", "", api.PullAlways, "", emptyNodeSelector},
-		{true, "test", "default", env, "tar", "deadbeef", "img", "", api.PullAlways, "", emptyNodeSelector},
-		{true, "test", "default", env, "tar", "deadbeef", "img", "customimage", api.PullAlways, "", emptyNodeSelector},
-		{true, "test", "default", env, "tar", "deadbeef", "img", "customimage", api.PullIfNotPresent, "", emptyNodeSelector},
-		{true, "test", "default", env, "tar", "deadbeef", "img", "customimage", api.PullNever, "", nil},
-		{true, "test", "default", buildArgsEnv, "tar", "deadbeef", "img", "customimage", api.PullIfNotPresent, "", emptyNodeSelector},
+		{true, "test", "default", emptyEnv, "tar", "deadbeef", "", "", corev1.PullAlways, "", nodeSelector1},
+		{true, "test", "default", env, "tar", "deadbeef", "", "", corev1.PullAlways, "", nodeSelector2},
+		{true, "test", "default", emptyEnv, "tar", "deadbeef", "img", "", corev1.PullAlways, "", emptyNodeSelector},
+		{true, "test", "default", env, "tar", "deadbeef", "img", "", corev1.PullAlways, "", emptyNodeSelector},
+		{true, "test", "default", env, "tar", "deadbeef", "img", "customimage", corev1.PullAlways, "", emptyNodeSelector},
+		{true, "test", "default", env, "tar", "deadbeef", "img", "customimage", corev1.PullIfNotPresent, "", emptyNodeSelector},
+		{true, "test", "default", env, "tar", "deadbeef", "img", "customimage", corev1.PullNever, "", nil},
+		{true, "test", "default", buildArgsEnv, "tar", "deadbeef", "img", "customimage", corev1.PullIfNotPresent, "", emptyNodeSelector},
 	}
 	regEnv := map[string]string{"REG_LOC": "on-cluster"}
 	for _, build := range dockerBuilds {
@@ -219,7 +219,7 @@ func TestBuildPod(t *testing.T) {
 	}
 }
 
-func checkForEnv(t *testing.T, pod *api.Pod, key, expVal string) {
+func checkForEnv(t *testing.T, pod *corev1.Pod, key, expVal string) {
 	val, err := envValueFromKey(pod, key)
 	if err != nil {
 		t.Errorf("%v", err)
@@ -229,7 +229,7 @@ func checkForEnv(t *testing.T, pod *api.Pod, key, expVal string) {
 	}
 }
 
-func envValueFromKey(pod *api.Pod, key string) (string, error) {
+func envValueFromKey(pod *corev1.Pod, key string) (string, error) {
 	for _, env := range pod.Spec.Containers[0].Env {
 		if env.Name == key {
 			return env.Value, nil
@@ -242,8 +242,8 @@ func envValueFromKey(pod *api.Pod, key string) (string, error) {
 func TestCreateAppEnvConfigSecretErr(t *testing.T) {
 	expectedErr := errors.New("get secret error")
 	secretsClient := &k8s.FakeSecret{
-		FnCreate: func(*api.Secret) (*api.Secret, error) {
-			return &api.Secret{}, expectedErr
+		FnCreate: func(*corev1.Secret) (*corev1.Secret, error) {
+			return &corev1.Secret{}, expectedErr
 		},
 	}
 	err := createAppEnvConfigSecret(secretsClient, "test", nil)
@@ -252,8 +252,8 @@ func TestCreateAppEnvConfigSecretErr(t *testing.T) {
 
 func TestCreateAppEnvConfigSecretSuccess(t *testing.T) {
 	secretsClient := &k8s.FakeSecret{
-		FnCreate: func(*api.Secret) (*api.Secret, error) {
-			return &api.Secret{}, nil
+		FnCreate: func(*corev1.Secret) (*corev1.Secret, error) {
+			return &corev1.Secret{}, nil
 		},
 	}
 	err := createAppEnvConfigSecret(secretsClient, "test", nil)
@@ -261,13 +261,13 @@ func TestCreateAppEnvConfigSecretSuccess(t *testing.T) {
 }
 
 func TestCreateAppEnvConfigSecretAlreadyExists(t *testing.T) {
-	alreadyExistErr := apierrors.NewAlreadyExists(api.Resource("tests"), "1")
+	alreadyExistErr := apierrors.NewAlreadyExists(corev1.Resource("tests"), "1")
 	secretsClient := &k8s.FakeSecret{
-		FnCreate: func(*api.Secret) (*api.Secret, error) {
-			return &api.Secret{}, alreadyExistErr
+		FnCreate: func(*corev1.Secret) (*corev1.Secret, error) {
+			return &corev1.Secret{}, alreadyExistErr
 		},
-		FnUpdate: func(*api.Secret) (*api.Secret, error) {
-			return &api.Secret{}, nil
+		FnUpdate: func(*corev1.Secret) (*corev1.Secret, error) {
+			return &corev1.Secret{}, nil
 		},
 	}
 	err := createAppEnvConfigSecret(secretsClient, "test", nil)
diff --git a/pkg/gitreceive/registry.go b/pkg/gitreceive/registry.go
index 849d486..9b6015e 100644
--- a/pkg/gitreceive/registry.go
+++ b/pkg/gitreceive/registry.go
@@ -2,16 +2,18 @@ package gitreceive
 
 import (
 	"strings"
+	"context"
 
-	client "k8s.io/kubernetes/pkg/client/unversioned"
+	typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 )
 
 const (
 	registrySecret = "registry-secret"
 )
 
-func getDetailsFromRegistrySecret(secretGetter client.SecretsInterface, secret string) (map[string]string, error) {
-	regSecret, err := secretGetter.Get(secret)
+func getDetailsFromRegistrySecret(secretGetter typedcorev1.SecretInterface, secret string) (map[string]string, error) {
+	regSecret, err := secretGetter.Get(context.TODO(), secret, metav1.GetOptions{})
 	if err != nil {
 		return nil, err
 	}
@@ -22,7 +24,7 @@ func getDetailsFromRegistrySecret(secretGetter client.SecretsInterface, secret s
 	return regDetails, nil
 }
 
-func getRegistryDetails(kubeClient client.SecretsNamespacer, image *string, registryLocation, namespace string) (map[string]string, error) {
+func getRegistryDetails(kubeClient typedcorev1.SecretsGetter, image *string, registryLocation, namespace string) (map[string]string, error) {
 	privateRegistrySecretInterface := kubeClient.Secrets(namespace)
 	registryEnv := make(map[string]string)
 	var regSecretData map[string]string
diff --git a/pkg/gitreceive/registry_test.go b/pkg/gitreceive/registry_test.go
index d0a9d50..cb0b7be 100644
--- a/pkg/gitreceive/registry_test.go
+++ b/pkg/gitreceive/registry_test.go
@@ -6,8 +6,8 @@ import (
 
 	"github.com/arschles/assert"
 	"github.com/drycc/builder/pkg/k8s"
-	"k8s.io/kubernetes/pkg/api"
-	client "k8s.io/kubernetes/pkg/client/unversioned"
+	corev1 "k8s.io/api/core/v1"
+	typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1"
 )
 
 const (
@@ -18,8 +18,8 @@ const (
 func TestGetDetailsFromRegistrySecretErr(t *testing.T) {
 	expectedErr := errors.New("get secret error")
 	getter := &k8s.FakeSecret{
-		FnGet: func(string) (*api.Secret, error) {
-			return &api.Secret{}, expectedErr
+		FnGet: func(string) (*corev1.Secret, error) {
+			return &corev1.Secret{}, expectedErr
 		},
 	}
 	_, err := getDetailsFromRegistrySecret(getter, testSecret)
@@ -29,9 +29,9 @@ func TestGetDetailsFromRegistrySecretErr(t *testing.T) {
 func TestGetDetailsFromRegistrySecretSuccess(t *testing.T) {
 	data := map[string][]byte{"test": []byte("test")}
 	expectedData := map[string]string{"test": "test"}
-	secret := api.Secret{Data: data}
+	secret := corev1.Secret{Data: data}
 	getter := &k8s.FakeSecret{
-		FnGet: func(string) (*api.Secret, error) {
+		FnGet: func(string) (*corev1.Secret, error) {
 			return &secret, nil
 		},
 	}
@@ -43,13 +43,14 @@ func TestGetDetailsFromRegistrySecretSuccess(t *testing.T) {
 func TestGetRegistryDetailsOffclusterErr(t *testing.T) {
 	expectedErr := errors.New("get secret error")
 	getter := &k8s.FakeSecret{
-		FnGet: func(string) (*api.Secret, error) {
-			return &api.Secret{}, expectedErr
+		FnGet: func(string) (*corev1.Secret, error) {
+			return &corev1.Secret{}, expectedErr
+			//return &kubernetes.Clientset.CoreV1(), expectedErr
 		},
 	}
 
-	kubeClient := &k8s.FakeSecretsNamespacer{
-		Fn: func(string) client.SecretsInterface {
+	kubeClient := &k8s.FakeSecretsGetter{
+		Fn: func(string) typedcorev1.SecretInterface {
 			return getter
 		},
 	}
@@ -62,15 +63,15 @@ func TestGetRegistryDetailsOffclusterSuccess(t *testing.T) {
 	data := map[string][]byte{"organization": []byte("kmala"), "hostname": []byte("quay.io")}
 	expectedData := map[string]string{"DRYCC_REGISTRY_HOSTNAME": "quay.io", "DRYCC_REGISTRY_ORGANIZATION": "kmala"}
 	expectedImage := "quay.io/kmala/test-image"
-	secret := api.Secret{Data: data}
+	secret := corev1.Secret{Data: data}
 	getter := &k8s.FakeSecret{
-		FnGet: func(string) (*api.Secret, error) {
+		FnGet: func(string) (*corev1.Secret, error) {
 			return &secret, nil
 		},
 	}
 
-	kubeClient := &k8s.FakeSecretsNamespacer{
-		Fn: func(string) client.SecretsInterface {
+	kubeClient := &k8s.FakeSecretsGetter{
+		Fn: func(string) typedcorev1.SecretInterface {
 			return getter
 		},
 	}
diff --git a/pkg/gitreceive/run.go b/pkg/gitreceive/run.go
index 4e16634..fc542bf 100644
--- a/pkg/gitreceive/run.go
+++ b/pkg/gitreceive/run.go
@@ -11,7 +11,7 @@ import (
 	"github.com/drycc/builder/pkg/sys"
 	"github.com/drycc/pkg/log"
 
-	client "k8s.io/kubernetes/pkg/client/unversioned"
+	"github.com/drycc/builder/pkg/k8s"
 )
 
 func readLine(line string) (string, string, string, error) {
@@ -32,7 +32,8 @@ func Run(conf *Config, fs sys.FS, env sys.Env, storageDriver storagedriver.Stora
 		return err
 	}
 
-	kubeClient, err := client.NewInCluster()
+	//kubeClient, err := client.NewInCluster()
+	kubeClient, err := k8s.NewInCluster()
 	if err != nil {
 		return fmt.Errorf("couldn't reach the api server (%s)", err)
 	}
diff --git a/pkg/healthsrv/buckets_lister.go b/pkg/healthsrv/buckets_lister.go
index 77521b3..488893b 100644
--- a/pkg/healthsrv/buckets_lister.go
+++ b/pkg/healthsrv/buckets_lister.go
@@ -1,7 +1,8 @@
 package healthsrv
 
 import (
-	"github.com/docker/distribution/context"
+	"context"
+	//"github.com/docker/distribution/context"
 )
 
 // BucketLister is a *(github.com/docker/distribution/registry/storage/driver).StorageDriver compatible interface that provides just
diff --git a/pkg/healthsrv/healthz_handler_test.go b/pkg/healthsrv/healthz_handler_test.go
index dec0491..7a718d8 100644
--- a/pkg/healthsrv/healthz_handler_test.go
+++ b/pkg/healthsrv/healthz_handler_test.go
@@ -9,10 +9,8 @@ import (
 	"net/http/httptest"
 	"strings"
 	"testing"
-
-	"k8s.io/kubernetes/pkg/api"
-
-	"github.com/docker/distribution/context"
+	"context"
+	//"github.com/docker/distribution/context"
 
 	"github.com/arschles/assert"
 	"github.com/drycc/builder/pkg/sshd"
@@ -47,19 +45,19 @@ func (e failureGetClient) Get(url string) (*http.Response, error) {
 	return resp, nil
 }
 
-type emptyNamespaceLister struct{}
-
-func (n emptyNamespaceLister) List(opts api.ListOptions) (*api.NamespaceList, error) {
-	return &api.NamespaceList{}, nil
-}
-
-type errNamespaceLister struct {
-	err error
-}
-
-func (e errNamespaceLister) List(opts api.ListOptions) (*api.NamespaceList, error) {
-	return nil, e.err
-}
+//type emptyNamespaceLister struct{}
+//
+//func (n emptyNamespaceLister) List(ctx context.Context, opts metav1.ListOptions) (*corev1.NamespaceList, error) {
+//	return &corev1.NamespaceList{}, nil
+//}
+//
+//type errNamespaceLister struct {
+//	err error
+//}
+//
+//func (e errNamespaceLister) List(ctx context.Context, opts metav1.ListOptions) (*corev1.NamespaceList, error) {
+//	return nil, e.err
+//}
 
 type fakeHTTPServer struct {
 	// determines wether to return success or failure.
diff --git a/pkg/healthsrv/namespace_lister.go b/pkg/healthsrv/namespace_lister.go
index 64c8364..226335b 100644
--- a/pkg/healthsrv/namespace_lister.go
+++ b/pkg/healthsrv/namespace_lister.go
@@ -1,9 +1,12 @@
 package healthsrv
 
 import (
-	"k8s.io/kubernetes/pkg/api"
-	"k8s.io/kubernetes/pkg/fields"
-	"k8s.io/kubernetes/pkg/labels"
+	"context"
+	corev1 "k8s.io/api/core/v1"
+	//"k8s.io/apimachinery/pkg/labels"
+	//"k8s.io/apimachinery/pkg/fields"
+	//"k8s.io/apimachinery/pkg/apis/meta/internalversion"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 )
 
 // NamespaceLister is an (*k8s.io/kubernetes/pkg/client/unversioned).Client compatible interface
@@ -11,17 +14,32 @@ import (
 // for unit tests.
 type NamespaceLister interface {
 	// List lists all namespaces that are selected by the given label and field selectors.
-	List(opts api.ListOptions) (*api.NamespaceList, error)
+    List(ctx context.Context, opts metav1.ListOptions) (*corev1.NamespaceList, error)
 }
 
+type emptyNamespaceLister struct{}
+
+func (n emptyNamespaceLister) List(ctx context.Context, opts metav1.ListOptions) (*corev1.NamespaceList, error) {
+	return &corev1.NamespaceList{}, nil
+}
+
+type errNamespaceLister struct {
+	err error
+}
+
+func (e errNamespaceLister) List(ctx context.Context, opts metav1.ListOptions) (*corev1.NamespaceList, error) {
+	return nil, e.err
+}
+
+
 // listNamespaces calls nl.List(...) and sends the results back on the various given channels.
 // This func is intended to be run in a goroutine and communicates via the channels it's passed.
 //
 // On success, it passes the namespace list on succCh, and on failure, it passes the error on
 // errCh. At most one of {succCh, errCh} will be sent on. If stopCh is closed, no pending or
 // future sends will occur.
-func listNamespaces(nl NamespaceLister, succCh chan<- *api.NamespaceList, errCh chan<- error, stopCh <-chan struct{}) {
-	nsList, err := nl.List(api.ListOptions{LabelSelector: labels.Everything(), FieldSelector: fields.Everything()})
+func listNamespaces(nl NamespaceLister, succCh chan<- *corev1.NamespaceList, errCh chan<- error, stopCh <-chan struct{}) {
+	nsList, err := nl.List(context.TODO(), metav1.ListOptions{})
 	if err != nil {
 		select {
 		case errCh <- err:
diff --git a/pkg/healthsrv/readiness_handler.go b/pkg/healthsrv/readiness_handler.go
index 71f400b..b8ad390 100644
--- a/pkg/healthsrv/readiness_handler.go
+++ b/pkg/healthsrv/readiness_handler.go
@@ -6,7 +6,7 @@ import (
 	"time"
 
 	drycc "github.com/drycc/controller-sdk-go"
-	"k8s.io/kubernetes/pkg/api"
+	"k8s.io/api/core/v1"
 )
 
 func readinessHandler(client *drycc.Client, nsLister NamespaceLister) http.Handler {
@@ -14,7 +14,7 @@ func readinessHandler(client *drycc.Client, nsLister NamespaceLister) http.Handl
 		stopCh := make(chan struct{})
 
 		numChecks := 0
-		namespaceListerCh := make(chan *api.NamespaceList)
+		namespaceListerCh := make(chan *v1.NamespaceList)
 		namespaceListerErrCh := make(chan error)
 		go listNamespaces(nsLister, namespaceListerCh, namespaceListerErrCh, stopCh)
 		numChecks++
diff --git a/pkg/k8s/client.go b/pkg/k8s/client.go
new file mode 100644
index 0000000..e2b26a0
--- /dev/null
+++ b/pkg/k8s/client.go
@@ -0,0 +1,20 @@
+package k8s
+
+import (
+	"k8s.io/client-go/kubernetes"
+	"k8s.io/client-go/rest"
+)
+
+func NewInCluster() (*kubernetes.Clientset, error) {
+	// creates the in-cluster config
+	config, err := rest.InClusterConfig()
+	if err != nil {
+		panic(err.Error())
+	}
+	// creates the clientset
+	clientset, err := kubernetes.NewForConfig(config)
+	if err != nil {
+		panic(err.Error())
+	}
+	return clientset, nil
+}
\ No newline at end of file
diff --git a/pkg/k8s/namespace.go b/pkg/k8s/namespace.go
index 69528d1..d3b02b9 100644
--- a/pkg/k8s/namespace.go
+++ b/pkg/k8s/namespace.go
@@ -1,7 +1,9 @@
 package k8s
 
 import (
-	"k8s.io/kubernetes/pkg/api"
+	"context"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	corev1 "k8s.io/api/core/v1"
 )
 
 // NamespaceLister is a (k8s.io/kubernetes/pkg/client/unversioned).NamespaceInterface compatible
@@ -14,5 +16,5 @@ import (
 //	var nsl NamespaceLister
 //	nsl = kubeClient.Namespaces()
 type NamespaceLister interface {
-	List(opts api.ListOptions) (*api.NamespaceList, error)
+	List(ctx context.Context, opts metav1.ListOptions) (*corev1.NamespaceList, error)
 }
diff --git a/pkg/k8s/pull_policy.go b/pkg/k8s/pull_policy.go
index 7b24953..74f4cc5 100644
--- a/pkg/k8s/pull_policy.go
+++ b/pkg/k8s/pull_policy.go
@@ -2,17 +2,16 @@ package k8s
 
 import (
 	"fmt"
-
-	"k8s.io/kubernetes/pkg/api"
+	"k8s.io/api/core/v1"
 )
 
 var (
-	emptyPullPolicy = api.PullPolicy("")
+	emptyPullPolicy = v1.PullPolicy("")
 	// ValidPullPolicies is the set of pull policies that this package considers valid
-	ValidPullPolicies = map[api.PullPolicy]struct{}{
-		api.PullAlways:       {},
-		api.PullIfNotPresent: {},
-		api.PullNever:        {},
+	ValidPullPolicies = map[v1.PullPolicy]struct{}{
+		v1.PullAlways:       {},
+		v1.PullIfNotPresent: {},
+		v1.PullNever:        {},
 	}
 )
 
@@ -27,8 +26,8 @@ func (e ErrInvalidPullPolicy) Error() string {
 }
 
 // PullPolicyFromString converts a string into an api.PullPolicy. returns an error if the string does not match a pull policy in ValidPullPolicies()
-func PullPolicyFromString(ppStr string) (api.PullPolicy, error) {
-	candidatePP := api.PullPolicy(ppStr)
+func PullPolicyFromString(ppStr string) (v1.PullPolicy, error) {
+	candidatePP := v1.PullPolicy(ppStr)
 	if _, ok := ValidPullPolicies[candidatePP]; !ok {
 		return emptyPullPolicy, ErrInvalidPullPolicy{str: ppStr}
 	}
diff --git a/pkg/k8s/secrets.go b/pkg/k8s/secrets.go
index dc51d04..9b28244 100644
--- a/pkg/k8s/secrets.go
+++ b/pkg/k8s/secrets.go
@@ -1,57 +1,75 @@
 package k8s
 
 import (
-	"k8s.io/kubernetes/pkg/api"
-	client "k8s.io/kubernetes/pkg/client/unversioned"
-	"k8s.io/kubernetes/pkg/watch"
+	"context"
+	"k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/types"
+	"k8s.io/apimachinery/pkg/watch"
+	corev1 "k8s.io/api/core/v1"
+	typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1"
 )
 
 // FakeSecret is a mock function that can be swapped in for
 // (k8s.io/kubernetes/pkg/client/unversioned).SecretsInterface,
 // so you can unit test your code.
 type FakeSecret struct {
-	FnGet    func(string) (*api.Secret, error)
-	FnCreate func(*api.Secret) (*api.Secret, error)
-	FnUpdate func(*api.Secret) (*api.Secret, error)
+	FnGet    func(string) (*corev1.Secret, error)
+	FnCreate func(*v1.Secret) (*corev1.Secret, error)
+	FnUpdate func(*v1.Secret) (*corev1.Secret, error)
 }
 
 // Get is the interface definition.
-func (f *FakeSecret) Get(name string) (*api.Secret, error) {
+func (f *FakeSecret) Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Secret, error) {
 	return f.FnGet(name)
 }
 
 // Delete is the interface definition.
-func (f *FakeSecret) Delete(name string) error {
+func (f *FakeSecret) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error {
 	return nil
 }
 
 // Create is the interface definition.
-func (f *FakeSecret) Create(secret *api.Secret) (*api.Secret, error) {
+func (f *FakeSecret) Create(ctx context.Context, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) {
 	return f.FnCreate(secret)
 }
 
 // Update is the interface definition.
-func (f *FakeSecret) Update(secret *api.Secret) (*api.Secret, error) {
+func (f *FakeSecret) Update(ctx context.Context, secret *v1.Secret, opts metav1.UpdateOptions) (*v1.Secret, error) {
 	return f.FnUpdate(secret)
 }
 
 // List is the interface definition.
-func (f *FakeSecret) List(opts api.ListOptions) (*api.SecretList, error) {
-	return &api.SecretList{}, nil
+func (f *FakeSecret) List(ctx context.Context, opts metav1.ListOptions) (*v1.SecretList, error) {
+	return &v1.SecretList{}, nil
 }
 
 // Watch is the interface definition.
-func (f *FakeSecret) Watch(opts api.ListOptions) (watch.Interface, error) {
+func (f *FakeSecret) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) {
 	return nil, nil
 }
 
+// DeleteCollection is the interface definition.
+func (f *FakeSecret) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error {
+	return nil
+}
+
+// Patch is the interface definition.
+func (f *FakeSecret) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (*v1.Secret, error) {
+	return &v1.Secret{}, nil
+}
+
 // FakeSecretsNamespacer is a mock function that can be swapped in for an
 // (k8s.io/kubernetes/pkg/client/unversioned).SecretsNamespacer, so you can unit test you code
-type FakeSecretsNamespacer struct {
-	Fn func(string) client.SecretsInterface
+//type FakeSecretsNamespacer struct {
+//	Fn func(string) typedcorev1.SecretInterface
+//}
+
+type FakeSecretsGetter struct {
+	Fn func(string) typedcorev1.SecretInterface
 }
 
-// Secrets is the interface definition.
-func (f *FakeSecretsNamespacer) Secrets(namespace string) client.SecretsInterface {
+// Secrets is the interface definition.Secret
+func (f *FakeSecretsGetter) Secrets(namespace string) typedcorev1.SecretInterface {
 	return f.Fn(namespace)
 }
diff --git a/pkg/k8s/watch.go b/pkg/k8s/watch.go
index 8b6da01..0ecee45 100644
--- a/pkg/k8s/watch.go
+++ b/pkg/k8s/watch.go
@@ -2,56 +2,68 @@ package k8s
 
 import (
 	"time"
-
-	"k8s.io/kubernetes/pkg/api"
-	"k8s.io/kubernetes/pkg/client/cache"
-	client "k8s.io/kubernetes/pkg/client/unversioned"
-	"k8s.io/kubernetes/pkg/controller/framework"
-	"k8s.io/kubernetes/pkg/labels"
-	"k8s.io/kubernetes/pkg/runtime"
-	"k8s.io/kubernetes/pkg/watch"
+	"context"
+	"k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/client-go/tools/cache"
+	"k8s.io/apimachinery/pkg/watch"
+	"k8s.io/client-go/kubernetes"
+	"k8s.io/apimachinery/pkg/runtime"
+	"k8s.io/apimachinery/pkg/labels"
 )
 
 var (
 	resyncPeriod = 30 * time.Second
 )
+type StoreToPodLister struct {
+	cache.Store
+}
 
 //PodWatcher is a struct which holds the return values of (k8s.io/kubernetes/pkg/controller/framework).NewIndexerInformer together.
 type PodWatcher struct {
-	Store      cache.StoreToPodLister
-	Controller *framework.Controller
+	Store      StoreToPodLister
+	Controller cache.Controller
+}
+
+func (s *StoreToPodLister) List(selector labels.Selector) (pods []*v1.Pod, err error) {
+	// TODO: it'd be great to just call
+	// s.Pods(api.NamespaceAll).List(selector), however then we'd have to
+	// remake the list.Items as a []*api.Pod. So leave this separate for
+	// now.
+	for _, m := range s.Store.List() {
+		pod := m.(*v1.Pod)
+		if selector.Matches(labels.Set(pod.Labels)) {
+			pods = append(pods, pod)
+		}
+	}
+	return pods, nil
 }
 
 //NewPodWatcher creates a new BuildPodWatcher useful to list the pods using a cache which gets updated based on the watch func.
-func NewPodWatcher(c *client.Client, ns string) *PodWatcher {
+func NewPodWatcher(c kubernetes.Clientset, ns string) *PodWatcher {
 	pw := &PodWatcher{}
 
-	pw.Store.Store, pw.Controller = framework.NewIndexerInformer(
+	pw.Store.Store, pw.Controller = cache.NewIndexerInformer(
 		&cache.ListWatch{
 			ListFunc:  podListFunc(c, ns),
 			WatchFunc: podWatchFunc(c, ns),
 		},
-		&api.Pod{},
+		&v1.Pod{},
 		resyncPeriod,
-		framework.ResourceEventHandlerFuncs{},
+		cache.ResourceEventHandlerFuncs{},
 		cache.Indexers{},
 	)
-
 	return pw
 }
 
-func podListFunc(c *client.Client, ns string) func(options api.ListOptions) (runtime.Object, error) {
-	return func(opts api.ListOptions) (runtime.Object, error) {
-		return c.Pods(ns).List(api.ListOptions{
-			LabelSelector: labels.Everything(),
-		})
+func podListFunc(c kubernetes.Clientset, ns string) func(options metav1.ListOptions) (runtime.Object, error) {
+	return func(opts metav1.ListOptions) (runtime.Object, error) {
+		return c.CoreV1().Pods(ns).List(context.TODO(), metav1.ListOptions{})
 	}
 }
 
-func podWatchFunc(c *client.Client, ns string) func(options api.ListOptions) (watch.Interface, error) {
-	return func(opts api.ListOptions) (watch.Interface, error) {
-		return c.Pods(ns).Watch(api.ListOptions{
-			LabelSelector: labels.Everything(),
-		})
+func podWatchFunc(c kubernetes.Clientset, ns string) func(options metav1.ListOptions) (watch.Interface, error) {
+	return func(opts metav1.ListOptions) (watch.Interface, error) {
+		return c.CoreV1().Pods(ns).Watch(context.TODO(), metav1.ListOptions{})
 	}
 }
diff --git a/pkg/storage/interfaces.go b/pkg/storage/interfaces.go
index 2651bf2..9edbfc1 100644
--- a/pkg/storage/interfaces.go
+++ b/pkg/storage/interfaces.go
@@ -1,7 +1,8 @@
 package storage
 
 import (
-	"github.com/docker/distribution/context"
+	"context"
+	//"github.com/docker/distribution/context"
 	storagedriver "github.com/docker/distribution/registry/storage/driver"
 )
 
diff --git a/pkg/storage/object_test.go b/pkg/storage/object_test.go
index 1b1d1cb..b0d1fe2 100644
--- a/pkg/storage/object_test.go
+++ b/pkg/storage/object_test.go
@@ -4,9 +4,9 @@ import (
 	"errors"
 	"testing"
 	"time"
-
+	"context"
 	"github.com/arschles/assert"
-	"github.com/docker/distribution/context"
+	//"github.com/docker/distribution/context"
 	storagedriver "github.com/docker/distribution/registry/storage/driver"
 )
 
