본문으로 건너뛰기

Kubeadm으로 Kubernetes Control Plane 관리하기

ClusterConfiguration 설정하기

경고

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>
  • apiServer
    • extraArgs: []
      • 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을 설정할 수 있습니다.
  • etcd
    • external
      • 외부 etcd를 사용합니다.
    • local
      • etcd를 static Pod으로 실행합니다.
  • controllerManager
    • extraArgs: []
    • extraEnvs: []
    • extraVolumes: []
  • scheduler
    • extraArgs: []
    • 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