Kubeadm으로 Kubernetes Control Plane 관리하기
ClusterConfiguration 설정하기
References
경고
kube-system Namespace의 kubeadm-config ConfigMap에 저장된 설정이 SSOT입니다.
/etc/kubernetes/kubeadm-config.yaml을 사용하기 전/후에 ClusterConfiguration이 kubeadm-config의 내용과 같은지 확인해야합니다.
파일을 변경한 경우에는 아래 명령어를 사용하여 kubeadm-config에 변경사항을 반영합니다.
kubeadm init phase upload-config kubeadm --config=/etc/kubernetes/kubeadm-config.yaml
/etc/kubernetes/kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
kubernetesVersion: <version>apiServerextraArgs: []name: <name>value: <value>
extraEnvs: []name: <name>value: <value>valueFrom
extraVolumes: []name: <name>hostPath: <hostPath>mountPath: <mountPath>readOnly: <bool>- 기본값:
false
- 기본값:
pathType: DirectoryOrCreate|Directory|FileOrCreate|File|Socket|CharDevice|BlockDevice- 기본값:
""
- 기본값:
certSANs: []- kube-apiserver의 인증서에 추가할 Subject Alternative Name을 설정합니다.
- IP 또는 domain을 설정할 수 있습니다.
etcdexternal- 외부 etcd를 사용합니다.
local- etcd를 static Pod으로 실행합니다.
controllerManagerextraArgs: []extraEnvs: []extraVolumes: []
schedulerextraArgs: []extraEnvs: []extraVolumes: []
설정 적용하기
설정을 변경한 후 아래 명령어를 실행하면 static Pod manifest가 변경되고, kubelet이 이를 감지하여 static Pod를 재시작합니다.
kubeadm init phase control-plane <command> \
--config=/etc/kubernetes/kubeadm-config.yaml \
[<flag> ...]
<command>apiserver: kube-apiserver static Pod manifest를 생성합니다.controller-manager: kube-controller-manager static Pod manifest를 생성합니다.scheduler: kube-scheduler static Pod manifest를 생성합니다.all
<flag>--config=<file>:ClusterConfiguration설정 파일을 지정합니다.
kubeadm init phase etcd local \
--config=/etc/kubernetes/kubeadm-config.yaml \
[<flag> ...]
--config=<file>:ClusterConfiguration설정 파일을 지정합니다.
경고
설정은 변경되지 않았지만, 설정에서 사용된 파일이 변경되어 kube-apiserver를 재시작해야하는 경우 아래 명령어를 사용합니다.
crictl pods --namespace kube-system --name 'kube-apiserver-*' -q \
| xargs crictl rmp -f
모든 컴포넌트를 재시작해야하는 경우 아래 명령어를 사용합니다.
crictl pods --namespace kube-system --name 'kube-scheduler-*|kube-controller-manager-*|kube-apiserver-*|etcd-*' -q \
| xargs crictl rmp -f