mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 09:22:44 +00:00
Merge pull request #31640 from mwielgus/events-for-ns
Automatic merge from submit-queue Events in federated namespace controller @quinton-hoole @nikhiljindal @wojtek-t @kubernetes/sig-cluster-federation
This commit is contained in:
commit
1b05640cf8
@ -17,16 +17,19 @@ limitations under the License.
|
|||||||
package namespace
|
package namespace
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
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"
|
||||||
api_v1 "k8s.io/kubernetes/pkg/api/v1"
|
api_v1 "k8s.io/kubernetes/pkg/api/v1"
|
||||||
"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"
|
||||||
@ -66,6 +69,9 @@ type NamespaceController struct {
|
|||||||
// Backoff manager for namespaces
|
// Backoff manager for namespaces
|
||||||
namespaceBackoff *flowcontrol.Backoff
|
namespaceBackoff *flowcontrol.Backoff
|
||||||
|
|
||||||
|
// For events
|
||||||
|
eventRecorder record.EventRecorder
|
||||||
|
|
||||||
namespaceReviewDelay time.Duration
|
namespaceReviewDelay time.Duration
|
||||||
clusterAvailableDelay time.Duration
|
clusterAvailableDelay time.Duration
|
||||||
smallDelay time.Duration
|
smallDelay time.Duration
|
||||||
@ -74,6 +80,10 @@ type NamespaceController struct {
|
|||||||
|
|
||||||
// NewNamespaceController returns a new namespace controller
|
// NewNamespaceController returns a new namespace controller
|
||||||
func NewNamespaceController(client federation_release_1_4.Interface) *NamespaceController {
|
func NewNamespaceController(client federation_release_1_4.Interface) *NamespaceController {
|
||||||
|
broadcaster := record.NewBroadcaster()
|
||||||
|
broadcaster.StartRecordingToSink(eventsink.NewFederatedEventSink(client))
|
||||||
|
recorder := broadcaster.NewRecorder(api.EventSource{Component: "federated-namespace-controller"})
|
||||||
|
|
||||||
nc := &NamespaceController{
|
nc := &NamespaceController{
|
||||||
federatedApiClient: client,
|
federatedApiClient: client,
|
||||||
namespaceReviewDelay: time.Second * 10,
|
namespaceReviewDelay: time.Second * 10,
|
||||||
@ -81,6 +91,7 @@ func NewNamespaceController(client federation_release_1_4.Interface) *NamespaceC
|
|||||||
smallDelay: time.Second * 3,
|
smallDelay: time.Second * 3,
|
||||||
updateTimeout: time.Second * 30,
|
updateTimeout: time.Second * 30,
|
||||||
namespaceBackoff: flowcontrol.NewBackOff(5*time.Second, time.Minute),
|
namespaceBackoff: flowcontrol.NewBackOff(5*time.Second, time.Minute),
|
||||||
|
eventRecorder: recorder,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build delivereres for triggering reconcilations.
|
// Build delivereres for triggering reconcilations.
|
||||||
@ -264,6 +275,9 @@ func (nc *NamespaceController) reconcileNamespace(namespace string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !found {
|
if !found {
|
||||||
|
nc.eventRecorder.Eventf(baseNamespace, api.EventTypeNormal, "CreateInCluster",
|
||||||
|
"Creating namespace in cluster %s", cluster.Name)
|
||||||
|
|
||||||
operations = append(operations, util.FederatedOperation{
|
operations = append(operations, util.FederatedOperation{
|
||||||
Type: util.OperationTypeAdd,
|
Type: util.OperationTypeAdd,
|
||||||
Obj: desiredNamespace,
|
Obj: desiredNamespace,
|
||||||
@ -275,6 +289,9 @@ func (nc *NamespaceController) reconcileNamespace(namespace string) {
|
|||||||
// Update existing namespace, if needed.
|
// Update existing namespace, if needed.
|
||||||
if !util.ObjectMetaEquivalent(desiredNamespace.ObjectMeta, clusterNamespace.ObjectMeta) ||
|
if !util.ObjectMetaEquivalent(desiredNamespace.ObjectMeta, clusterNamespace.ObjectMeta) ||
|
||||||
!reflect.DeepEqual(desiredNamespace.Spec, clusterNamespace.Spec) {
|
!reflect.DeepEqual(desiredNamespace.Spec, clusterNamespace.Spec) {
|
||||||
|
nc.eventRecorder.Eventf(baseNamespace, api.EventTypeNormal, "UpdateCluster",
|
||||||
|
"Updating namespace in cluster %s", cluster.Name)
|
||||||
|
|
||||||
operations = append(operations, util.FederatedOperation{
|
operations = append(operations, util.FederatedOperation{
|
||||||
Type: util.OperationTypeUpdate,
|
Type: util.OperationTypeUpdate,
|
||||||
Obj: desiredNamespace,
|
Obj: desiredNamespace,
|
||||||
@ -288,7 +305,10 @@ func (nc *NamespaceController) reconcileNamespace(namespace string) {
|
|||||||
// Everything is in order
|
// Everything is in order
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
err = nc.federatedUpdater.Update(operations, nc.updateTimeout)
|
err = nc.federatedUpdater.UpdateWithOnError(operations, nc.updateTimeout, func(op util.FederatedOperation, operror error) {
|
||||||
|
nc.eventRecorder.Eventf(baseNamespace, api.EventTypeNormal, "FailedClusterUpdate",
|
||||||
|
"Update namespace in cluster %s failed: %v", op.ClusterName, operror)
|
||||||
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Errorf("Failed to execute updates for %s: %v", namespace, err)
|
glog.Errorf("Failed to execute updates for %s: %v", namespace, err)
|
||||||
nc.deliverNamespace(namespace, 0, true)
|
nc.deliverNamespace(namespace, 0, true)
|
||||||
@ -309,6 +329,7 @@ func (nc *NamespaceController) delete(namespace *api_v1.Namespace) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
if namespace.Status.Phase != api_v1.NamespaceTerminating {
|
if namespace.Status.Phase != api_v1.NamespaceTerminating {
|
||||||
|
nc.eventRecorder.Event(namespace, api.EventTypeNormal, "DeleteNamespace", fmt.Sprintf("Marking for deletion"))
|
||||||
_, err := nc.federatedApiClient.Core().Namespaces().Update(updatedNamespace)
|
_, err := nc.federatedApiClient.Core().Namespaces().Update(updatedNamespace)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Errorf("Failed to update namespace %s: %v", updatedNamespace.Name, err)
|
glog.Errorf("Failed to update namespace %s: %v", updatedNamespace.Name, err)
|
||||||
|
@ -75,7 +75,8 @@ func TestNamespaceController(t *testing.T) {
|
|||||||
|
|
||||||
ns1 := api_v1.Namespace{
|
ns1 := api_v1.Namespace{
|
||||||
ObjectMeta: api_v1.ObjectMeta{
|
ObjectMeta: api_v1.ObjectMeta{
|
||||||
Name: "test-namespace",
|
Name: "test-namespace",
|
||||||
|
SelfLink: "/api/v1/namespaces/test-namespace",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user