Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions cmd/machine-config-controller/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,9 +116,11 @@ func createControllers(ctx *ctrlcommon.ControllerContext) []ctrlcommon.Controlle
ctx.InformerFactory.Machineconfiguration().V1().ControllerConfigs(),
ctx.InformerFactory.Machineconfiguration().V1().KubeletConfigs(),
ctx.ConfigInformerFactory.Config().V1().FeatureGates(),
ctx.ConfigInformerFactory.Config().V1().Nodes(),
ctx.ConfigInformerFactory.Config().V1().APIServers(),
ctx.ClientBuilder.KubeClientOrDie("kubelet-config-controller"),
ctx.ClientBuilder.MachineConfigClientOrDie("kubelet-config-controller"),
ctx.ClientBuilder.ConfigClientOrDie("kubelet-config-controller"),
),
containerruntimeconfig.New(
rootOpts.templates,
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ require (
github.com/google/renameio v0.1.0
github.com/imdario/mergo v0.3.12
github.com/opencontainers/go-digest v1.0.0
github.com/openshift/api v0.0.0-20220310165943-abf6417c2748
github.com/openshift/client-go v0.0.0-20211209144617-7385dd6338e3
github.com/openshift/api v0.0.0-20220412161459-8f38b7648620
github.com/openshift/client-go v0.0.0-20220411091747-c100636b0bc0
github.com/openshift/library-go v0.0.0-20211220195323-eca2c467c492
github.com/openshift/runtime-utils v0.0.0-20220225175100-8dec0d84fb39
github.com/pkg/errors v0.9.1
Expand Down
8 changes: 5 additions & 3 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1057,13 +1057,15 @@ github.com/opencontainers/selinux v1.8.5/go.mod h1:HTvjPFoGMbpQsG886e3lQwnsRWtE4
github.com/opencontainers/selinux v1.9.1/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI=
github.com/openshift/api v0.0.0-20200326160804-ecb9283fe820/go.mod h1:RKMJ5CBnljLfnej+BJ/xnOWc3kZDvJUaIAEq2oKSPtE=
github.com/openshift/api v0.0.0-20211209135129-c58d9f695577/go.mod h1:DoslCwtqUpr3d/gsbq4ZlkaMEdYqKxuypsDjorcHhME=
github.com/openshift/api v0.0.0-20220310165943-abf6417c2748 h1:+LW/1gfPO3IXxgJKfdwgVAc7fdTj+rB1I8rSVGHJVFU=
github.com/openshift/api v0.0.0-20220310165943-abf6417c2748/go.mod h1:F/eU6jgr6Q2VhMu1mSpMmygxAELd7+BUxs3NHZ25jV4=
github.com/openshift/api v0.0.0-20220409151926-43bbec6227d5/go.mod h1:F/eU6jgr6Q2VhMu1mSpMmygxAELd7+BUxs3NHZ25jV4=
github.com/openshift/api v0.0.0-20220412161459-8f38b7648620 h1:eNClZcEJo3EUIMCkK2GPrXl4lrFNfyKGRFVrUEZ8JIk=
github.com/openshift/api v0.0.0-20220412161459-8f38b7648620/go.mod h1:F/eU6jgr6Q2VhMu1mSpMmygxAELd7+BUxs3NHZ25jV4=
github.com/openshift/build-machinery-go v0.0.0-20200211121458-5e3d6e570160/go.mod h1:1CkcsT3aVebzRBzVTSbiKSkJMsC/CASqxesfqEMfJEc=
github.com/openshift/build-machinery-go v0.0.0-20210712174854-1bb7fd1518d3/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE=
github.com/openshift/build-machinery-go v0.0.0-20211213093930-7e33a7eb4ce3/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE=
github.com/openshift/client-go v0.0.0-20211209144617-7385dd6338e3 h1:SG1aqwleU6bGD0X4mhkTNupjVnByMYYuW4XbnCPavQU=
github.com/openshift/client-go v0.0.0-20211209144617-7385dd6338e3/go.mod h1:cwhyki5lqBmrT0m8Im+9I7PGFaraOzcYPtEz93RcsGY=
github.com/openshift/client-go v0.0.0-20220411091747-c100636b0bc0 h1:dZZJT2aINho70JcEDs85fW0E+Ug9aVmeDDHdvJYnroA=
github.com/openshift/client-go v0.0.0-20220411091747-c100636b0bc0/go.mod h1:dUE4zBPh9kKaPm9e8qbMBh5RDu3zEO2jo0md4veGYaI=
github.com/openshift/library-go v0.0.0-20211220195323-eca2c467c492 h1:oj/rSQqVWVj6YJUydZwLz2frrJreiyI4oa9g/YPgMsM=
github.com/openshift/library-go v0.0.0-20211220195323-eca2c467c492/go.mod h1:4UQ9snU1vg53fyTpHQw3vLPiAxI8ub5xrc+y8KPQQFs=
github.com/openshift/runtime-utils v0.0.0-20220225175100-8dec0d84fb39 h1:5woAtivjIZDVaRdMRDstmSBd0hHLsdYcdumLCMs0dwk=
Expand Down
2 changes: 1 addition & 1 deletion manifests/machineconfigcontroller/clusterrole.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ rules:
resources: ["configmaps", "secrets"]
verbs: ["*"]
- apiGroups: ["config.openshift.io"]
resources: ["images", "clusterversions", "featuregates"]
resources: ["images", "clusterversions", "featuregates", "nodes", "nodes/status"]
verbs: ["*"]
- apiGroups: ["config.openshift.io"]
resources: ["schedulers", "apiservers", "infrastructures"]
Expand Down
3 changes: 3 additions & 0 deletions pkg/apis/machineconfiguration.openshift.io/v1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ import (
// For example: `master` or `worker`
const MachineConfigRoleLabelKey = "machineconfiguration.openshift.io/role"

// KubeletConfigRoleLabelPrefix is the label that must be present in the KubeletConfig CR
const KubeletConfigRoleLabelPrefix = "pools.operator.machineconfiguration.openshift.io/"
Comment thread
kikisdeliveryservice marked this conversation as resolved.
Outdated

// +genclient
// +genclient:nonNamespaced
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
Expand Down
17 changes: 15 additions & 2 deletions pkg/controller/bootstrap/bootstrap.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ func (b *Bootstrap) Run(destDir string) error {

var cconfig *mcfgv1.ControllerConfig
var featureGate *apicfgv1.FeatureGate
var nodeConfig *apicfgv1.Node
var kconfigs []*mcfgv1.KubeletConfig
var pools []*mcfgv1.MachineConfigPool
var configs []*mcfgv1.MachineConfig
Expand Down Expand Up @@ -126,6 +127,10 @@ func (b *Bootstrap) Run(destDir string) error {
if obj.GetName() == ctrlcommon.ClusterFeatureInstanceName {
featureGate = obj
}
case *apicfgv1.Node:
if obj.GetName() == ctrlcommon.ClusterNodeInstanceName {
nodeConfig = obj
}
default:
glog.Infof("skipping %q [%d] manifest because of unhandled %T", file.Name(), idx+1, obji)
}
Expand Down Expand Up @@ -156,14 +161,22 @@ func (b *Bootstrap) Run(destDir string) error {
configs = append(configs, containerRuntimeConfigs...)
}
if featureGate != nil {
featureConfigs, err := kubeletconfig.RunFeatureGateBootstrap(b.templatesDir, featureGate, cconfig, pools)
featureConfigs, err := kubeletconfig.RunFeatureGateBootstrap(b.templatesDir, featureGate, nodeConfig, cconfig, pools)
if err != nil {
return err
}
configs = append(configs, featureConfigs...)
}

if nodeConfig != nil {
nodeConfigs, err := kubeletconfig.RunNodeConfigBootstrap(b.templatesDir, featureGate, cconfig, nodeConfig, pools)
if err != nil {
return err
}
configs = append(configs, nodeConfigs...)
}
if len(kconfigs) > 0 {
kconfigs, err := kubeletconfig.RunKubeletBootstrap(b.templatesDir, kconfigs, cconfig, featureGate, pools)
kconfigs, err := kubeletconfig.RunKubeletBootstrap(b.templatesDir, kconfigs, cconfig, featureGate, nodeConfig, pools)
if err != nil {
return err
}
Expand Down
8 changes: 8 additions & 0 deletions pkg/controller/common/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,12 @@ const (

// ClusterFeatureInstanceName is a singleton name for featureGate configuration
ClusterFeatureInstanceName = "cluster"

// ClusterNodeInstanceName is a singleton name for node configuration
ClusterNodeInstanceName = "cluster"

// MachineConfigPoolMaster is the MachineConfigPool name given to the master
MachineConfigPoolMaster = "master"
// MachineConfigPoolWorker is the MachineConfigPool name given to the worker
MachineConfigPoolWorker = "worker"
)
41 changes: 41 additions & 0 deletions pkg/controller/kubelet-config/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"context"
"encoding/json"
"fmt"
"reflect"
"strconv"

ign3types "github.com/coreos/ignition/v2/config/v3_2/types"
Expand Down Expand Up @@ -131,6 +132,42 @@ func createNewDefaultFeatureGate() *osev1.FeatureGate {
}
}

func createNewDefaultNodeconfig() *osev1.Node {
return &osev1.Node{
ObjectMeta: metav1.ObjectMeta{
Name: ctrlcommon.ClusterNodeInstanceName,
},
Spec: osev1.NodeSpec{
CgroupMode: osev1.CgroupModeDefault,
WorkerLatencyProfile: osev1.DefaultUpdateDefaultReaction,
},
}
}

// updateOriginalKubeConfigwithNodeConfig updates the original Kubelet Configuration based on the Nodespecific configuration
func updateOriginalKubeConfigwithNodeConfig(node *osev1.Node, originalKubeletConfig *kubeletconfigv1beta1.KubeletConfiguration) error {
Comment thread
kikisdeliveryservice marked this conversation as resolved.
Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So the interesting part is, since you are running this for every sync loop for KubeletConfig and features, what I think will happen is:

  1. if you don't provide anything (no KC, no feature, no node), this code is not called at all
  2. if you provide a kubeletconfig or feature on the system, this code is called, and the generated non-default will contain originalKubeletConfig.NodeStatusUpdateFrequency = metav1.Duration{Duration: osev1.DefaultNodeStatusUpdateFrequency}

so I guess the question then is, is there a difference between having originalKubeletConfig.NodeStatusUpdateFrequency = metav1.Duration{Duration: osev1.DefaultNodeStatusUpdateFrequency} and not having it? Because that is a behaviour change depending on whether you have other configs or not. If we want this to always be the default, we may need this somewhere else to generate it into the base.

Alternatively, if you covered this somewhere else and I am misunderstanding, please let me know where that happens. If this doesn't otherwise affect the default, you can ignore this question

@sairameshv sairameshv Apr 13, 2022

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The default node-status-update-frequency in the kubelet configuration is 10s and is same as osev1.DefaultNodeStatusUpdateFrequency.
So, I don't think there may be a behavior change when there is a change in kubeletconfigs, or features.
Also, by default cluster comes up with an empty NodeConfig CR(present as part of the cluster-config-operator) and this piece of code actually prevents in updating the original kubelet config
Anyway, I updated the code to have a case for the Default profile and am returning error incase of unknown workerlatencyprofile.

if node == nil {
return fmt.Errorf("node configuration not found, failed to update the original kubelet configuration")
}
if reflect.DeepEqual(node.Spec, osev1.NodeSpec{}) {
return fmt.Errorf("empty node resource spec found")
}
// updating the kubelet specific fields based on the Node's workerlatency profile.
// (TODO): The durations can be replaced with the defined constants in the openshift/api repository once the respective changes are merged.
switch node.Spec.WorkerLatencyProfile {
case osev1.MediumUpdateAverageReaction:
originalKubeletConfig.NodeStatusUpdateFrequency = metav1.Duration{Duration: osev1.MediumNodeStatusUpdateFrequency}
case osev1.LowUpdateSlowReaction:
originalKubeletConfig.NodeStatusUpdateFrequency = metav1.Duration{Duration: osev1.LowNodeStatusUpdateFrequency}
case osev1.DefaultUpdateDefaultReaction:
originalKubeletConfig.NodeStatusUpdateFrequency = metav1.Duration{Duration: osev1.DefaultNodeStatusUpdateFrequency}
default:
return fmt.Errorf("unknown worker latency profile type found %v, failed to update the original kubelet configuration", node.Spec.WorkerLatencyProfile)
}
// The kubelet configuration can be updated based on the cgroupmode as well here.
return nil
}

func findKubeletConfig(mc *mcfgv1.MachineConfig) (*ign3types.File, error) {
ignCfg, err := ctrlcommon.ParseAndConvertConfig(mc.Spec.Config.Raw)
if err != nil {
Expand Down Expand Up @@ -227,6 +264,10 @@ func getManagedFeaturesKeyDeprecated(pool *mcfgv1.MachineConfigPool) string {
return fmt.Sprintf("98-%s-%s-kubelet", pool.Name, pool.ObjectMeta.UID)
}

func getManagedNodeConfigKey(pool *mcfgv1.MachineConfigPool, client mcfgclientset.Interface) (string, error) {
return ctrlcommon.GetManagedKey(pool, client, "97", "kubelet", fmt.Sprintf("97-%s-%s-kubelet", pool.Name, pool.ObjectMeta.UID))
}

// Deprecated: use getManagedKubeletConfigKey
func getManagedKubeletConfigKeyDeprecated(pool *mcfgv1.MachineConfigPool) string {
return fmt.Sprintf("99-%s-%s-kubelet", pool.Name, pool.ObjectMeta.UID)
Expand Down
9 changes: 8 additions & 1 deletion pkg/controller/kubelet-config/kubelet_config_bootstrap.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import (
)

// RunKubeletBootstrap generates MachineConfig objects for mcpPools that would have been generated by syncKubeletConfig
func RunKubeletBootstrap(templateDir string, kubeletConfigs []*mcfgv1.KubeletConfig, controllerConfig *mcfgv1.ControllerConfig, features *configv1.FeatureGate, mcpPools []*mcfgv1.MachineConfigPool) ([]*mcfgv1.MachineConfig, error) {
func RunKubeletBootstrap(templateDir string, kubeletConfigs []*mcfgv1.KubeletConfig, controllerConfig *mcfgv1.ControllerConfig, features *configv1.FeatureGate, nodeConfig *configv1.Node, mcpPools []*mcfgv1.MachineConfigPool) ([]*mcfgv1.MachineConfig, error) {
var res []*mcfgv1.MachineConfig
managedKeyExist := make(map[string]bool)
userDefinedSystemReserved := make(map[string]string)
Expand Down Expand Up @@ -43,6 +43,13 @@ func RunKubeletBootstrap(templateDir string, kubeletConfigs []*mcfgv1.KubeletCon
if err != nil {
return nil, err
}
// updating the originalKubeConfig based on the nodeConfig on a worker node
if role == ctrlcommon.MachineConfigPoolWorker {
if nodeConfig == nil {
nodeConfig = createNewDefaultNodeconfig()
}
updateOriginalKubeConfigwithNodeConfig(nodeConfig, originalKubeConfig)
}
if kubeletConfig.Spec.TLSSecurityProfile != nil {
// Inject TLS Options from Spec
observedMinTLSVersion, observedCipherSuites := getSecurityProfileCiphers(kubeletConfig.Spec.TLSSecurityProfile)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ func TestRunKubeletBootstrap(t *testing.T) {
},
}

mcs, err := RunKubeletBootstrap("../../../templates", cfgs, cc, nil, pools)
mcs, err := RunKubeletBootstrap("../../../templates", cfgs, cc, nil, nil, pools)
require.NoError(t, err)
require.Len(t, mcs, len(cfgs))

Expand Down
51 changes: 44 additions & 7 deletions pkg/controller/kubelet-config/kubelet_config_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import (
kubeletconfigv1beta1 "k8s.io/kubelet/config/v1beta1"

configv1 "github.com/openshift/api/config/v1"
configclientset "github.com/openshift/client-go/config/clientset/versioned"
oseinformersv1 "github.com/openshift/client-go/config/informers/externalversions/config/v1"
oselistersv1 "github.com/openshift/client-go/config/listers/config/v1"
"github.com/openshift/library-go/pkg/crypto"
Expand Down Expand Up @@ -75,6 +76,7 @@ type Controller struct {
templatesDir string

client mcfgclientset.Interface
configClient configclientset.Interface
eventRecorder record.EventRecorder

syncHandler func(mcp string) error
Expand All @@ -92,11 +94,15 @@ type Controller struct {
featLister oselistersv1.FeatureGateLister
featListerSynced cache.InformerSynced

nodeConfigLister oselistersv1.NodeLister
nodeConfigListerSynced cache.InformerSynced

apiserverLister oselistersv1.APIServerLister
apiserverListerSynced cache.InformerSynced

queue workqueue.RateLimitingInterface
featureQueue workqueue.RateLimitingInterface
queue workqueue.RateLimitingInterface
featureQueue workqueue.RateLimitingInterface
nodeConfigQueue workqueue.RateLimitingInterface
}

// New returns a new kubelet config controller
Expand All @@ -106,20 +112,24 @@ func New(
ccInformer mcfginformersv1.ControllerConfigInformer,
mkuInformer mcfginformersv1.KubeletConfigInformer,
featInformer oseinformersv1.FeatureGateInformer,
nodeConfigInformer oseinformersv1.NodeInformer,
apiserverInformer oseinformersv1.APIServerInformer,
kubeClient clientset.Interface,
mcfgClient mcfgclientset.Interface,
configclient configclientset.Interface,
) *Controller {
eventBroadcaster := record.NewBroadcaster()
eventBroadcaster.StartLogging(glog.Infof)
eventBroadcaster.StartRecordingToSink(&coreclientsetv1.EventSinkImpl{Interface: kubeClient.CoreV1().Events("")})

ctrl := &Controller{
templatesDir: templatesDir,
client: mcfgClient,
eventRecorder: eventBroadcaster.NewRecorder(scheme.Scheme, corev1.EventSource{Component: "machineconfigcontroller-kubeletconfigcontroller"}),
queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "machineconfigcontroller-kubeletconfigcontroller"),
featureQueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "machineconfigcontroller-featurecontroller"),
templatesDir: templatesDir,
client: mcfgClient,
configClient: configclient,
eventRecorder: eventBroadcaster.NewRecorder(scheme.Scheme, corev1.EventSource{Component: "machineconfigcontroller-kubeletconfigcontroller"}),
queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "machineconfigcontroller-kubeletconfigcontroller"),
featureQueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "machineconfigcontroller-featurecontroller"),
nodeConfigQueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "machineconfigcontroller-nodeConfigcontroller"),
}

mkuInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
Expand All @@ -134,6 +144,12 @@ func New(
DeleteFunc: ctrl.deleteFeature,
})

nodeConfigInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: ctrl.addNodeConfig,
UpdateFunc: ctrl.updateNodeConfig,
DeleteFunc: ctrl.deleteNodeConfig,
})

ctrl.syncHandler = ctrl.syncKubeletConfig
ctrl.enqueueKubeletConfig = ctrl.enqueue

Expand All @@ -149,6 +165,9 @@ func New(
ctrl.featLister = featInformer.Lister()
ctrl.featListerSynced = featInformer.Informer().HasSynced

ctrl.nodeConfigLister = nodeConfigInformer.Lister()
ctrl.nodeConfigListerSynced = nodeConfigInformer.Informer().HasSynced

ctrl.apiserverLister = apiserverInformer.Lister()
ctrl.apiserverListerSynced = apiserverInformer.Informer().HasSynced

Expand All @@ -160,6 +179,7 @@ func (ctrl *Controller) Run(workers int, stopCh <-chan struct{}) {
defer utilruntime.HandleCrash()
defer ctrl.queue.ShutDown()
defer ctrl.featureQueue.ShutDown()
defer ctrl.nodeConfigQueue.ShutDown()

if !cache.WaitForCacheSync(stopCh, ctrl.mcpListerSynced, ctrl.mckListerSynced, ctrl.ccListerSynced, ctrl.featListerSynced, ctrl.apiserverListerSynced) {
return
Expand All @@ -176,6 +196,10 @@ func (ctrl *Controller) Run(workers int, stopCh <-chan struct{}) {
go wait.Until(ctrl.featureWorker, time.Second, stopCh)
}

for i := 0; i < workers; i++ {
go wait.Until(ctrl.nodeConfigWorker, time.Second, stopCh)
}

<-stopCh
}

Expand Down Expand Up @@ -507,6 +531,15 @@ func (ctrl *Controller) syncKubeletConfig(key string) error {
return ctrl.syncStatusOnly(cfg, err)
}

// Fetch the NodeConfig
nodeConfig, err := ctrl.nodeConfigLister.Get(ctrlcommon.ClusterNodeInstanceName)
if macherrors.IsNotFound(err) {
nodeConfig = createNewDefaultNodeconfig()
} else if err != nil {
err := fmt.Errorf("could not fetch Node: %v", err)
return ctrl.syncStatusOnly(cfg, err)
}

for _, pool := range mcpPools {
if pool.Spec.Configuration.Name == "" {
updateDelay := 5 * time.Second
Expand Down Expand Up @@ -540,6 +573,10 @@ func (ctrl *Controller) syncKubeletConfig(key string) error {
if err != nil {
return ctrl.syncStatusOnly(cfg, err, "could not get original kubelet config: %v", err)
}
// updating the originalKubeConfig based on the nodeConfig on a worker node
if role == ctrlcommon.MachineConfigPoolWorker {
updateOriginalKubeConfigwithNodeConfig(nodeConfig, originalKubeConfig)
}

// Get the default API Server Security Profile
var profile *configv1.TLSSecurityProfile
Expand Down
Loading