mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-09 03:57:41 +00:00
juju: Add kubelet-extra-config to kubernetes-worker (#145)
This commit is contained in:
parent
577849693e
commit
fed74b7299
@ -89,3 +89,20 @@ options:
|
|||||||
as possible. You may also set a custom string as described in the
|
as possible. You may also set a custom string as described in the
|
||||||
'refresh.timer' section here:
|
'refresh.timer' section here:
|
||||||
https://forum.snapcraft.io/t/system-options/87
|
https://forum.snapcraft.io/t/system-options/87
|
||||||
|
kubelet-extra-config:
|
||||||
|
default: "{}"
|
||||||
|
type: string
|
||||||
|
description: |
|
||||||
|
Extra configuration to be passed to kubelet. Any values specified in this
|
||||||
|
config will be merged into a KubeletConfiguration file that is passed to
|
||||||
|
the kubelet service via the --config flag. This can be used to override
|
||||||
|
values provided by the charm.
|
||||||
|
|
||||||
|
Requires Kubernetes 1.10+.
|
||||||
|
|
||||||
|
The value for this config must be a YAML mapping that can be safely
|
||||||
|
merged with a KubeletConfiguration file. For example:
|
||||||
|
{evictionHard: {memory.available: 200Mi}}
|
||||||
|
|
||||||
|
For more information about KubeletConfiguration, see upstream docs:
|
||||||
|
https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/
|
||||||
|
@ -552,8 +552,9 @@ def apply_node_labels():
|
|||||||
|
|
||||||
|
|
||||||
@when_any('config.changed.kubelet-extra-args',
|
@when_any('config.changed.kubelet-extra-args',
|
||||||
'config.changed.proxy-extra-args')
|
'config.changed.proxy-extra-args',
|
||||||
def extra_args_changed():
|
'config.changed.kubelet-extra-config')
|
||||||
|
def config_changed_requires_restart():
|
||||||
set_state('kubernetes-worker.restart-needed')
|
set_state('kubernetes-worker.restart-needed')
|
||||||
|
|
||||||
|
|
||||||
@ -674,6 +675,20 @@ def configure_kubernetes_service(service, base_args, extra_args_key):
|
|||||||
db.set(prev_args_key, args)
|
db.set(prev_args_key, args)
|
||||||
|
|
||||||
|
|
||||||
|
def merge_kubelet_extra_config(config, extra_config):
|
||||||
|
''' Updates config to include the contents of extra_config. This is done
|
||||||
|
recursively to allow deeply nested dictionaries to be merged.
|
||||||
|
|
||||||
|
This is destructive: it modifies the config dict that is passed in.
|
||||||
|
'''
|
||||||
|
for k, extra_config_value in extra_config.items():
|
||||||
|
if isinstance(extra_config_value, dict):
|
||||||
|
config_value = config.setdefault(k, {})
|
||||||
|
merge_kubelet_extra_config(config_value, extra_config_value)
|
||||||
|
else:
|
||||||
|
config[k] = extra_config_value
|
||||||
|
|
||||||
|
|
||||||
def configure_kubelet(dns, ingress_ip):
|
def configure_kubelet(dns, ingress_ip):
|
||||||
layer_options = layer.options('tls-client')
|
layer_options = layer.options('tls-client')
|
||||||
ca_cert_path = layer_options.get('ca_certificate_path')
|
ca_cert_path = layer_options.get('ca_certificate_path')
|
||||||
@ -727,6 +742,12 @@ def configure_kubelet(dns, ingress_ip):
|
|||||||
'DevicePlugins': True
|
'DevicePlugins': True
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Add kubelet-extra-config. This needs to happen last so that it
|
||||||
|
# overrides any config provided by the charm.
|
||||||
|
kubelet_extra_config = hookenv.config('kubelet-extra-config')
|
||||||
|
kubelet_extra_config = yaml.load(kubelet_extra_config)
|
||||||
|
merge_kubelet_extra_config(kubelet_config, kubelet_extra_config)
|
||||||
|
|
||||||
# Render the file and configure Kubelet to use it
|
# Render the file and configure Kubelet to use it
|
||||||
os.makedirs('/root/cdk/kubelet', exist_ok=True)
|
os.makedirs('/root/cdk/kubelet', exist_ok=True)
|
||||||
with open('/root/cdk/kubelet/config.yaml', 'w') as f:
|
with open('/root/cdk/kubelet/config.yaml', 'w') as f:
|
||||||
|
Loading…
Reference in New Issue
Block a user