mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 17:30:00 +00:00
Events for federated ingress controller
This commit is contained in:
parent
3fd14d97fb
commit
e850d4f0a2
@ -23,10 +23,12 @@ import (
|
|||||||
federation_api "k8s.io/kubernetes/federation/apis/federation/v1beta1"
|
federation_api "k8s.io/kubernetes/federation/apis/federation/v1beta1"
|
||||||
federation_release_1_4 "k8s.io/kubernetes/federation/client/clientset_generated/federation_release_1_4"
|
federation_release_1_4 "k8s.io/kubernetes/federation/client/clientset_generated/federation_release_1_4"
|
||||||
"k8s.io/kubernetes/federation/pkg/federation-controller/util"
|
"k8s.io/kubernetes/federation/pkg/federation-controller/util"
|
||||||
|
"k8s.io/kubernetes/federation/pkg/federation-controller/util/eventsink"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
extensions_v1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
|
extensions_v1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
|
||||||
"k8s.io/kubernetes/pkg/client/cache"
|
"k8s.io/kubernetes/pkg/client/cache"
|
||||||
kube_release_1_4 "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_4"
|
kube_release_1_4 "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_4"
|
||||||
|
"k8s.io/kubernetes/pkg/client/record"
|
||||||
"k8s.io/kubernetes/pkg/controller"
|
"k8s.io/kubernetes/pkg/controller"
|
||||||
"k8s.io/kubernetes/pkg/controller/framework"
|
"k8s.io/kubernetes/pkg/controller/framework"
|
||||||
pkg_runtime "k8s.io/kubernetes/pkg/runtime"
|
pkg_runtime "k8s.io/kubernetes/pkg/runtime"
|
||||||
@ -67,6 +69,9 @@ type IngressController struct {
|
|||||||
// Backoff manager for ingresses
|
// Backoff manager for ingresses
|
||||||
ingressBackoff *flowcontrol.Backoff
|
ingressBackoff *flowcontrol.Backoff
|
||||||
|
|
||||||
|
// For events
|
||||||
|
eventRecorder record.EventRecorder
|
||||||
|
|
||||||
ingressReviewDelay time.Duration
|
ingressReviewDelay time.Duration
|
||||||
clusterAvailableDelay time.Duration
|
clusterAvailableDelay time.Duration
|
||||||
smallDelay time.Duration
|
smallDelay time.Duration
|
||||||
@ -75,6 +80,10 @@ type IngressController struct {
|
|||||||
|
|
||||||
// NewIngressController returns a new ingress controller
|
// NewIngressController returns a new ingress controller
|
||||||
func NewIngressController(client federation_release_1_4.Interface) *IngressController {
|
func NewIngressController(client federation_release_1_4.Interface) *IngressController {
|
||||||
|
broadcaster := record.NewBroadcaster()
|
||||||
|
broadcaster.StartRecordingToSink(eventsink.NewFederatedEventSink(client))
|
||||||
|
recorder := broadcaster.NewRecorder(api.EventSource{Component: "federated-ingress-controller"})
|
||||||
|
|
||||||
ic := &IngressController{
|
ic := &IngressController{
|
||||||
federatedApiClient: client,
|
federatedApiClient: client,
|
||||||
ingressReviewDelay: time.Second * 10,
|
ingressReviewDelay: time.Second * 10,
|
||||||
@ -82,6 +91,7 @@ func NewIngressController(client federation_release_1_4.Interface) *IngressContr
|
|||||||
smallDelay: time.Second * 3,
|
smallDelay: time.Second * 3,
|
||||||
updateTimeout: time.Second * 30,
|
updateTimeout: time.Second * 30,
|
||||||
ingressBackoff: flowcontrol.NewBackOff(5*time.Second, time.Minute),
|
ingressBackoff: flowcontrol.NewBackOff(5*time.Second, time.Minute),
|
||||||
|
eventRecorder: recorder,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build deliverers for triggering reconcilations.
|
// Build deliverers for triggering reconcilations.
|
||||||
@ -287,6 +297,9 @@ func (ic *IngressController) reconcileIngress(ingress types.NamespacedName) {
|
|||||||
// We can't supply server-created fields when creating a new object.
|
// We can't supply server-created fields when creating a new object.
|
||||||
desiredIngress.ObjectMeta.ResourceVersion = ""
|
desiredIngress.ObjectMeta.ResourceVersion = ""
|
||||||
desiredIngress.ObjectMeta.UID = ""
|
desiredIngress.ObjectMeta.UID = ""
|
||||||
|
ic.eventRecorder.Eventf(baseIngress, api.EventTypeNormal, "CreateInCluster",
|
||||||
|
"Creating ingress in cluster %s", cluster.Name)
|
||||||
|
|
||||||
// We always first create an ingress in the first available cluster. Once that ingress
|
// We always first create an ingress in the first available cluster. Once that ingress
|
||||||
// has been created and allocated a global IP (visible via an annotation),
|
// has been created and allocated a global IP (visible via an annotation),
|
||||||
// we record that annotation on the federated ingress, and create all other cluster
|
// we record that annotation on the federated ingress, and create all other cluster
|
||||||
@ -332,6 +345,9 @@ func (ic *IngressController) reconcileIngress(ingress types.NamespacedName) {
|
|||||||
for key, val := range baseIngress.ObjectMeta.Annotations {
|
for key, val := range baseIngress.ObjectMeta.Annotations {
|
||||||
desiredIngress.ObjectMeta.Annotations[key] = val
|
desiredIngress.ObjectMeta.Annotations[key] = val
|
||||||
}
|
}
|
||||||
|
ic.eventRecorder.Eventf(baseIngress, api.EventTypeNormal, "UpdateCluster",
|
||||||
|
"Updating ingress in cluster %s", cluster.Name)
|
||||||
|
|
||||||
operations = append(operations, util.FederatedOperation{
|
operations = append(operations, util.FederatedOperation{
|
||||||
Type: util.OperationTypeUpdate,
|
Type: util.OperationTypeUpdate,
|
||||||
Obj: desiredIngress,
|
Obj: desiredIngress,
|
||||||
@ -346,7 +362,10 @@ func (ic *IngressController) reconcileIngress(ingress types.NamespacedName) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
glog.V(4).Infof("Calling federatedUpdater.Update() - operations: %v", operations)
|
glog.V(4).Infof("Calling federatedUpdater.Update() - operations: %v", operations)
|
||||||
err = ic.federatedUpdater.Update(operations, ic.updateTimeout)
|
err = ic.federatedUpdater.UpdateWithOnError(operations, ic.updateTimeout, func(op util.FederatedOperation, operror error) {
|
||||||
|
ic.eventRecorder.Eventf(baseIngress, api.EventTypeNormal, "FailedClusterUpdate",
|
||||||
|
"Update ingress in cluster %s failed: %v", op.ClusterName, operror)
|
||||||
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Errorf("Failed to execute updates for %s: %v", ingress, err)
|
glog.Errorf("Failed to execute updates for %s: %v", ingress, err)
|
||||||
ic.deliverIngress(ingress, ic.ingressReviewDelay, true)
|
ic.deliverIngress(ingress, ic.ingressReviewDelay, true)
|
||||||
|
@ -79,6 +79,7 @@ func TestIngressController(t *testing.T) {
|
|||||||
ObjectMeta: api_v1.ObjectMeta{
|
ObjectMeta: api_v1.ObjectMeta{
|
||||||
Name: "test-ingress",
|
Name: "test-ingress",
|
||||||
Namespace: "mynamespace",
|
Namespace: "mynamespace",
|
||||||
|
SelfLink: "/api/v1/namespaces/mynamespaces/ingress/test-ingress",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user