diff --git a/docs/book/src/tasks/bootstrap/kubeadm-bootstrap/kubelet-config.md b/docs/book/src/tasks/bootstrap/kubeadm-bootstrap/kubelet-config.md index e69de29bb2d1..5cf8c89cb2b2 100644 --- a/docs/book/src/tasks/bootstrap/kubeadm-bootstrap/kubelet-config.md +++ b/docs/book/src/tasks/bootstrap/kubeadm-bootstrap/kubelet-config.md @@ -0,0 +1,167 @@ +# Kubelet Configuration + +CAPBK has several ways to configure kubelet. + +- [`cloud-init` files](#cloud-init-files) +- [`kubeletExtraArgs`](#set-kubelet-flags-via-kubeletextraargs) +- [`kubeletconfiguration` patch target](#use-the-kubeletconfiguration-patch-target) + +## Pass `KubeletConfiguration` file via `cloud-init` files + +You can use `cloud-init` files to put any files on nodes. + +### KubeadmControlPlaneTemplate + +```yaml +apiVersion: controlplane.cluster.x-k8s.io/v1beta1 +kind: KubeadmControlPlaneTemplate +metadata: + name: cloudinit-control-plane + namespace: default +spec: + template: + spec: + kubeadmConfigSpec: + files: + - path: /etc/kubernetes/kubelet/config.yaml + owner: "root:root" + permissions: "0644" + content: | + apiVersion: kubelet.config.k8s.io/v1beta1 + kind: KubeletConfiguration + evictionHard: + nodefs.available: "0%" + nodefs.inodesFree: "0%" + imagefs.available: "0%" + authentication: + anonymous: + enabled: false + webhook: + cacheTTL: 0s + enabled: true + x509: + clientCAFile: /etc/kubernetes/pki/ca.crt + authorization: + mode: Webhook + webhook: + cacheAuthorizedTTL: 0s + cacheUnauthorizedTTL: 0s + cgroupDriver: systemd + clusterDNS: + - 10.128.0.10 + clusterDomain: cluster.local + containerRuntimeEndpoint: "" + cpuManagerReconcilePeriod: 0s + evictionPressureTransitionPeriod: 0s + fileCheckFrequency: 0s + healthzBindAddress: 127.0.0.1 + healthzPort: 10248 + httpCheckFrequency: 0s + imageMinimumGCAge: 0s + logging: + flushFrequency: 0 + options: + json: + infoBufferSize: "0" + verbosity: 0 + memorySwap: {} + nodeStatusReportFrequency: 0s + nodeStatusUpdateFrequency: 0s + rotateCertificates: true + runtimeRequestTimeout: 0s + shutdownGracePeriod: 0s + shutdownGracePeriodCriticalPods: 0s + staticPodPath: /etc/kubernetes/manifests + streamingConnectionIdleTimeout: 0s + syncFrequency: 0s + volumeStatsAggPeriod: 0s + clusterConfiguration: + controllerManager: + extraArgs: + enable-hostpath-provisioner: "true" + initConfiguration: + nodeRegistration: + criSocket: unix:///var/run/containerd/containerd.sock + kubeletExtraArgs: + config: "/etc/kubernetes/kubelet/config.yaml" + joinConfiguration: + nodeRegistration: + criSocket: unix:///var/run/containerd/containerd.sock + kubeletExtraArgs: + config: "/etc/kubernetes/kubelet/config.yaml" +``` + +### KubeadmConfigTemplate + +``` +``` + +## Set kubelet flags via `kubeletExtraArgs` + +```yaml +apiVersion: controlplane.cluster.x-k8s.io/v1beta1 +kind: KubeadmControlPlaneTemplate +metadata: + name: kubelet-extra-args-control-plane + namespace: default +spec: + template: + spec: + kubeadmConfigSpec: + clusterConfiguration: + controllerManager: + extraArgs: + enable-hostpath-provisioner: "true" + initConfiguration: + nodeRegistration: + criSocket: unix:///var/run/containerd/containerd.sock + kubeletExtraArgs: + eviction-hard: nodefs.available<0%,nodefs.inodesFree<0%,imagefs.available<0% + joinConfiguration: + nodeRegistration: + criSocket: unix:///var/run/containerd/containerd.sock + kubeletExtraArgs: + eviction-hard: nodefs.available<0%,nodefs.inodesFree<0%,imagefs.available<0% +``` + +## Use the `kubeletconfiguration` patch target + +```yaml +apiVersion: controlplane.cluster.x-k8s.io/v1beta1 +kind: KubeadmControlPlaneTemplate +metadata: + name: kubeadm-config-template-control-plane + namespace: default +spec: + template: + spec: + kubeadmConfigSpec: + files: + - path: /etc/kubernetes/patches/kubeletconfiguration0+strategic.json + owner: "root:root" + permissions: "0644" + content: | + { + "apiVersion": "kubelet.config.k8s.io/v1beta1", + "kind": "KubeletConfiguration", + "evictionHard": { + "nodefs.available": "0%", + "nodefs.inodesFree": "0%", + "imagefs.available": "0%", + }, + } + clusterConfiguration: + controllerManager: + extraArgs: + enable-hostpath-provisioner: "true" + initConfiguration: + nodeRegistration: + criSocket: unix:///var/run/containerd/containerd.sock + patches: + directory: /etc/kubernetes/patches + joinConfiguration: + nodeRegistration: + criSocket: unix:///var/run/containerd/containerd.sock + patches: + directory: /etc/kubernetes/patches +```