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
5 changes: 5 additions & 0 deletions src/aks-preview/HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,12 @@ To release a new version, please select a new version number (usually plus 1 to

Pending
+++++++

18.0.0b27
+++++++
* Add framework for interactive AI-powered debugging tool.
- Add `--enable-upstream-kubescheduler-user-configuration` to `az aks create` and `az aks update`.
- Add `--disable-upstream-kubescheduler-user-configuration` to `az aks update`.

18.0.0b26
+++++++
Expand Down
9 changes: 9 additions & 0 deletions src/aks-preview/azext_aks_preview/_help.py
Original file line number Diff line number Diff line change
Expand Up @@ -657,6 +657,9 @@
type: bool
short-summary: Create a default ManagedSystem mode that is fully managed by AKS.
long-summary: When set, the default system node pool is created with ManagedSystem mode, where all properties except name and mode are managed by AKS. Learn more at https://aka.ms/aks/nodepool/mode.
- name: --enable-upstream-kubescheduler-user-configuration
type: bool
short-summary: Enable user-defined scheduler configuration for kube-scheduler upstream on the cluster
examples:
- name: Create a Kubernetes cluster with an existing SSH public key.
text: az aks create -g MyResourceGroup -n MyManagedCluster --ssh-key-value /path/to/publickey
Expand Down Expand Up @@ -1298,6 +1301,12 @@
- name: --enable-http-proxy
type: bool
short-summary: Enable HTTP Proxy Configuration on the cluster.
- name: --enable-upstream-kubescheduler-user-configuration
type: bool
short-summary: Enable user-defined scheduler configuration for kube-scheduler upstream on the cluster
- name: --disable-upstream-kubescheduler-user-configuration
type: bool
short-summary: Disable user-defined scheduler configuration for kube-scheduler upstream on the cluster
examples:
- name: Reconcile the cluster back to its current state.
text: az aks update -g MyResourceGroup -n MyManagedCluster
Expand Down
3 changes: 3 additions & 0 deletions src/aks-preview/azext_aks_preview/_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -1076,6 +1076,7 @@ def load_arguments(self, _):
c.argument("vm_sizes", is_preview=True)
c.argument("enable_imds_restriction", action="store_true", is_preview=True)
c.argument("enable_managed_system_pool", action="store_true", is_preview=True)
c.argument("enable_upstream_kubescheduler_user_configuration", action="store_true", is_preview=True)

with self.argument_context("aks update") as c:
# managed cluster paramerters
Expand Down Expand Up @@ -1521,6 +1522,8 @@ def load_arguments(self, _):
c.argument('migrate_vmas_to_vms', is_preview=True, action='store_true')
c.argument("disable_http_proxy", action="store_true", is_preview=True)
c.argument("enable_http_proxy", action="store_true", is_preview=True)
c.argument("enable_upstream_kubescheduler_user_configuration", action="store_true", is_preview=True)
c.argument("disable_upstream_kubescheduler_user_configuration", action="store_true", is_preview=True)

with self.argument_context("aks upgrade") as c:
c.argument("kubernetes_version", completer=get_k8s_upgrades_completion_list)
Expand Down
3 changes: 3 additions & 0 deletions src/aks-preview/azext_aks_preview/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -751,6 +751,7 @@ def aks_create(
enable_imds_restriction=False,
# managed system pool
enable_managed_system_pool=False,
enable_upstream_kubescheduler_user_configuration=False,
):
# DO NOT MOVE: get all the original parameters and save them as a dictionary
raw_parameters = locals()
Expand Down Expand Up @@ -966,6 +967,8 @@ def aks_update(
enable_imds_restriction=False,
disable_imds_restriction=False,
migrate_vmas_to_vms=False,
enable_upstream_kubescheduler_user_configuration=False,
disable_upstream_kubescheduler_user_configuration=False,
):
# DO NOT MOVE: get all the original parameters and save them as a dictionary
raw_parameters = locals()
Expand Down
82 changes: 82 additions & 0 deletions src/aks-preview/azext_aks_preview/managed_cluster_decorator.py
Original file line number Diff line number Diff line change
Expand Up @@ -2944,6 +2944,31 @@ def get_enable_http_proxy(self) -> bool:

return enable_http_proxy

def get_enable_upstream_kubescheduler_user_configuration(self) -> bool:
"""Obtain the value of enable_upstream_kubescheduler_user_configuration.

:return: bool
"""
return self.raw_param.get("enable_upstream_kubescheduler_user_configuration")

def get_disable_upstream_kubescheduler_user_configuration(self) -> bool:
"""Obtain the value of disable_upstream_kubescheduler_user_configuration.

:return: bool
"""
disable_upstream_kubescheduler_user_configuration = self.raw_param.get(
"disable_upstream_kubescheduler_user_configuration"
)
if (
disable_upstream_kubescheduler_user_configuration and
self.get_enable_upstream_kubescheduler_user_configuration()
):
raise MutuallyExclusiveArgumentError(
"Cannot specify --enable-upstream-kubescheduler-user-configuration and "
"--disable-upstream-kubescheduler-user-configuration at the same time."
)
return disable_upstream_kubescheduler_user_configuration


# pylint: disable=too-many-public-methods
class AKSPreviewManagedClusterCreateDecorator(AKSManagedClusterCreateDecorator):
Expand Down Expand Up @@ -3721,6 +3746,24 @@ def set_up_imds_restriction(self, mc: ManagedCluster) -> ManagedCluster:
mc.network_profile.pod_link_local_access = CONST_IMDS_RESTRICTION_ENABLED
return mc

def set_up_upstream_kubescheduler_user_configuration(self, mc: ManagedCluster) -> ManagedCluster:
self._ensure_mc(mc)

if self.context.get_enable_upstream_kubescheduler_user_configuration():
if mc.scheduler_profile is None:
mc.scheduler_profile = self.models.SchedulerProfile() # pylint: disable=no-member
if mc.scheduler_profile.scheduler_instance_profiles is None:
mc.scheduler_profile.scheduler_instance_profiles = (
self.models.SchedulerProfileSchedulerInstanceProfiles() # pylint: disable=no-member
)
if mc.scheduler_profile.scheduler_instance_profiles.upstream is None:
mc.scheduler_profile.scheduler_instance_profiles.upstream = self.models.SchedulerInstanceProfile() # pylint: disable=no-member
mc.scheduler_profile.scheduler_instance_profiles.upstream.scheduler_config_mode = (
self.models.SchedulerConfigMode.MANAGED_BY_CRD # pylint: disable=no-member
)

return mc

# pylint: disable=unused-argument
def construct_mc_profile_preview(self, bypass_restore_defaults: bool = False) -> ManagedCluster:
"""The overall controller used to construct the default ManagedCluster profile.
Expand Down Expand Up @@ -3781,6 +3824,8 @@ def construct_mc_profile_preview(self, bypass_restore_defaults: bool = False) ->
mc = self.set_up_static_egress_gateway(mc)
# set up imds restriction(a property in network profile)
mc = self.set_up_imds_restriction(mc)
# set up user-defined scheduler configuration for kube-scheduler upstream
mc = self.set_up_upstream_kubescheduler_user_configuration(mc)

# validate the azure cli core version
self.verify_cli_core_version()
Expand Down Expand Up @@ -5539,6 +5584,41 @@ def update_http_proxy_enabled(self, mc: ManagedCluster) -> ManagedCluster:

return mc

def update_upstream_kubescheduler_user_configuration(self, mc: ManagedCluster) -> ManagedCluster:
"""Update user-defined scheduler configuration for kube-scheduler upstream for the ManagedCluster object.

:return: the ManagedCluster object
"""
self._ensure_mc(mc)

if self.context.get_enable_upstream_kubescheduler_user_configuration():
if mc.scheduler_profile is None:
mc.scheduler_profile = self.models.SchedulerProfile() # pylint: disable=no-member
if mc.scheduler_profile.scheduler_instance_profiles is None:
mc.scheduler_profile.scheduler_instance_profiles = (
self.models.SchedulerProfileSchedulerInstanceProfiles() # pylint: disable=no-member
)
if mc.scheduler_profile.scheduler_instance_profiles.upstream is None:
mc.scheduler_profile.scheduler_instance_profiles.upstream = self.models.SchedulerInstanceProfile() # pylint: disable=no-member
mc.scheduler_profile.scheduler_instance_profiles.upstream.scheduler_config_mode = (
self.models.SchedulerConfigMode.MANAGED_BY_CRD # pylint: disable=no-member
)

if self.context.get_disable_upstream_kubescheduler_user_configuration():
if mc.scheduler_profile is None:
mc.scheduler_profile = self.models.SchedulerProfile() # pylint: disable=no-member
if mc.scheduler_profile.scheduler_instance_profiles is None:
mc.scheduler_profile.scheduler_instance_profiles = (
self.models.SchedulerProfileSchedulerInstanceProfiles() # pylint: disable=no-member
)
if mc.scheduler_profile.scheduler_instance_profiles.upstream is None:
mc.scheduler_profile.scheduler_instance_profiles.upstream = self.models.SchedulerInstanceProfile() # pylint: disable=no-member
mc.scheduler_profile.scheduler_instance_profiles.upstream.scheduler_config_mode = (
self.models.SchedulerConfigMode.DEFAULT # pylint: disable=no-member
)

return mc

def update_mc_profile_preview(self) -> ManagedCluster:
"""The overall controller used to update the preview ManagedCluster profile.

Expand Down Expand Up @@ -5616,6 +5696,8 @@ def update_mc_profile_preview(self) -> ManagedCluster:
mc = self.update_vmas_to_vms(mc)
# update http proxy config
mc = self.update_http_proxy_enabled(mc)
# update user-defined scheduler configuration for kube-scheduler upstream
mc = self.update_upstream_kubescheduler_user_configuration(mc)
# update ManagedSystem pools, must at end
mc = self.update_managed_system_pools(mc)

Expand Down
Loading
Loading