Skip to content

Commit

Permalink
feat: support k8s 1.22 and upgrade dependencies
Browse files Browse the repository at this point in the history
- Upgrade k8s client-go to version 1.19
- Create v1 and v2 sub-packages for the controller
  The controller package now contains all common code for the controller.

  The v1 package uses the typed client for the extensions/v1beta1 ingress
  and defines the sync handler responsible for creating and updating
  the ingress.

  The v2 package uses the typed client for the networking/v1 ingress and
  defines the the sync handler responseible for creation and updating
  the ingress.

- Add a helper function to discover the cluster capabilities and use
  this to determine which controller to start.

Signed-off-by: Lucas Roesler <roesler.lucas@gmail.com>
  • Loading branch information
LucasRoesler authored and alexellis committed Aug 18, 2021
1 parent 6dcc233 commit b19b539
Show file tree
Hide file tree
Showing 1,402 changed files with 169,514 additions and 139,271 deletions.
22 changes: 22 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"go.inferGopath": false,
"cSpell.words": [
"Infof",
"appsv",
"corev",
"faas",
"faasscheme",
"faasv",
"handler",
"klog",
"kube",
"kubeclientset",
"kubeconfig",
"kubeinformers",
"logtostderr",
"metav",
"sync",
"threadiness",
"traefik"
]
}
3 changes: 1 addition & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,10 @@ test:
go test -mod=vendor -v ./...

verify-codegen:
go get -u -d k8s.io/code-generator@v0.17.0
go get -u -d k8s.io/code-generator@v0.19.0
./hack/verify-codegen.sh

charts:
cd chart && helm package ingress-operator/
mv chart/*.tgz docs/
helm repo index docs --url https://openfaas-incubator.github.io/ingress-operator/ --merge ./docs/index.yaml

41 changes: 20 additions & 21 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,26 +1,25 @@
module github.com/openfaas-incubator/ingress-operator

go 1.13
go 1.16

require (
github.com/emicklei/go-restful v2.11.1+incompatible // indirect
github.com/go-openapi/spec v0.19.6 // indirect
github.com/go-openapi/swag v0.19.7 // indirect
github.com/gogo/protobuf v1.3.1 // indirect
github.com/golang/groupcache v0.0.0-20180513044358-24b0969c4cb7 // indirect
github.com/google/go-cmp v0.3.0
github.com/googleapis/gnostic v0.2.0 // indirect
github.com/json-iterator/go v1.1.9 // indirect
github.com/pkg/errors v0.8.1
golang.org/x/net v0.0.0-20200202094626-16171245cfb2 // indirect
golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74 // indirect
gonum.org/v1/gonum v0.6.2 // indirect
gopkg.in/yaml.v2 v2.2.8 // indirect
k8s.io/api v0.17.0
k8s.io/apimachinery v0.17.1-beta.0
k8s.io/client-go v0.17.0
k8s.io/code-generator v0.17.0
k8s.io/gengo v0.0.0-20200127102705-1e9b17e831be // indirect
k8s.io/klog v1.0.0
k8s.io/kube-openapi v0.0.0-20200130172213-cdac1c71ff9f // indirect
github.com/go-logr/logr v0.4.0 // indirect
github.com/google/go-cmp v0.4.0
github.com/json-iterator/go v1.1.11 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
github.com/pkg/errors v0.9.1
github.com/stretchr/testify v1.6.1 // indirect
golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985 // indirect
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect
golang.org/x/tools v0.1.5 // indirect
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
k8s.io/api v0.19.0
k8s.io/apimachinery v0.19.0
k8s.io/client-go v0.19.0
k8s.io/code-generator v0.19.0
k8s.io/gengo v0.0.0-20210707163844-888f71863374 // indirect
k8s.io/klog/v2 v2.10.0
k8s.io/kube-openapi v0.0.0-20210527164424-3c818078ee3d // indirect
)
721 changes: 583 additions & 138 deletions go.sum

Large diffs are not rendered by default.

59 changes: 51 additions & 8 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,14 @@ import (

clientset "github.com/openfaas-incubator/ingress-operator/pkg/client/clientset/versioned"
informers "github.com/openfaas-incubator/ingress-operator/pkg/client/informers/externalversions"
"github.com/openfaas-incubator/ingress-operator/pkg/controller"
controllerv1 "github.com/openfaas-incubator/ingress-operator/pkg/controller/v1"
controllerv2 "github.com/openfaas-incubator/ingress-operator/pkg/controller/v2"
"github.com/openfaas-incubator/ingress-operator/pkg/signals"
"github.com/openfaas-incubator/ingress-operator/pkg/version"
kubeinformers "k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
klog "k8s.io/klog"
klog "k8s.io/klog/v2"

// required for generating code from CRD
_ "k8s.io/code-generator/cmd/client-gen/generators"
Expand Down Expand Up @@ -84,12 +85,27 @@ func main() {
faasInformerFactory := informers.
NewSharedInformerFactoryWithOptions(faasClient, defaultResync, faasInformerOpt)

ctrl := controller.NewController(
kubeClient,
faasClient,
kubeInformerFactory,
faasInformerFactory,
)
capabilities, err := getCapabilities(kubeClient)
if err != nil {
klog.Fatalf("Error retrieving Kubernetes cluster capabilities: %s", err.Error())
}

var ctrl controller
if capabilities.Has("extensions/v1beta1") {
ctrl = controllerv1.NewController(
kubeClient,
faasClient,
kubeInformerFactory,
faasInformerFactory,
)
} else {
ctrl = controllerv2.NewController(
kubeClient,
faasClient,
kubeInformerFactory,
faasInformerFactory,
)
}

go kubeInformerFactory.Start(stopCh)
go faasInformerFactory.Start(stopCh)
Expand All @@ -99,6 +115,10 @@ func main() {
}
}

type controller interface {
Run(int, <-chan struct{}) error
}

func setupLogging() {
klogFlags := flag.NewFlagSet("klog", flag.ExitOnError)
klog.InitFlags(klogFlags)
Expand All @@ -112,3 +132,26 @@ func setupLogging() {
}
})
}

type Capabilities map[string]bool

func (c Capabilities) Has(wanted string) bool {
return c[wanted]
}

func getCapabilities(client kubernetes.Interface) (Capabilities, error) {

groupList, err := client.Discovery().ServerGroups()
if err != nil {
return nil, err
}

caps := Capabilities{}
for _, g := range groupList.Groups {
for _, gv := range g.Versions {
caps[gv.GroupVersion] = true
}
}

return caps, nil
}
Loading

0 comments on commit b19b539

Please sign in to comment.