<p>I have a Kubernetes cluster 1.17, and I want to add some <code>extraArgs</code> and <code>extraVolumes</code> (like in <a href="https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/control-plane-flags/" rel="nofollow noreferrer">https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/control-plane-flags/</a>) in the apiserver. Usually, I update the manifest file <code>/etc/kubernetes/manifests/kube-apiserver.yaml</code> to apply my new config, then I update the <code>kubeadm-config</code> ConfigMap to keep this new configuration for the next Kubernetes upgrade (because static pod manifests are re-generated from this ConfigMap when upgrading).</p>
<p>Is it possible to update only the <code>kubeadm-config</code> ConfigMap then apply the configuration with a command like <code>kubeadm init phase control-plane apiserver</code> ? What are the risks ?</p>

<p>That's the way to go to upgrade <code>static pod definitions</code> of <code>control plane components</code>, but instead of <a href="https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/" rel="nofollow noreferrer">init</a> command I guess you meant <a href="https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/" rel="nofollow noreferrer">upgrade</a>.</p>
<p><code>$ kubeadm upgrade</code> command consults each time current cluster configuration from <a href="https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/" rel="nofollow noreferrer">ConfigMap</a> (<code>$ kubectl -n kube-system get cm kubeadm-config -o yaml</code>) before applying changes.</p>
<p>Talking about risks, you can try to envision them by studying output of kubeadm upgrade diff command, e.g.</p>
<p><code>kubeadm upgrade diff v1.20.4</code>. More details in <a href="https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/#cmd-upgrade-diff" rel="nofollow noreferrer">this documentation</a>. You could also try to use <code>--dry-run</code> flag from <a href="https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/#cmd-upgrade-node" rel="nofollow noreferrer">this doc</a>. It won't change any state, it will display the actions that would be performed.</p>
<p>As addition, you could also read about <code>--experimental-patches</code> from <a href="https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/#options" rel="nofollow noreferrer">this docs</a></p>
