kubeadm API로 구성 요소 사용자 정의하기

kubeadm API로 구성 요소 사용자 정의하기 (Customizing components with the kubeadm API)

이 페이지는 kubeadm이 배포하는 구성 요소를 사용자 정의하는 방법을 다뤄요. 제어 플레인 구성 요소의 경우 ClusterConfiguration 구조의 플래그나 노드별 패치를 사용할 수 있어요. kubelet과 kube-proxy의 경우 각각 KubeletConfiguration과 KubeProxyConfiguration을 사용할 수 있어요.

이 모든 옵션은 kubeadm 구성 API를 통해 가능해요. 구성의 각 필드에 대한 자세한 내용은 API 참조 페이지로 이동할 수 있어요.

출처: 문서

본문

참고:

ClusterConfiguration의 플래그로 제어 플레인 사용자 정의하기

kubeadm ClusterConfiguration 객체는 APIServer, ControllerManager, Scheduler, Etcd 같은 제어 플레인 구성 요소에 전달되는 기본 플래그를 재정의할 수 있는 방법을 사용자에게 노출해요. 구성 요소는 다음 구조로 정의돼요.

  • apiServer
  • controllerManager
  • scheduler
  • etcd

이 구조에는 이름/값 쌍으로 구성된 공통 extraArgs 필드가 포함돼요. 제어 플레인 구성 요소의 플래그를 재정의하려면:

  • 적절한 extraArgs를 구성에 추가하세요.
  • extraArgs 필드에 플래그를 추가하세요.
  • --config <YOUR CONFIG YAML>으로 kubeadm init을 실행하세요.

참고:

참고:

참고:

APIServer 플래그

자세한 내용은 kube-apiserver 참조 문서를 참고하세요.

사용 예시:

apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
kubernetesVersion: v1.16.0
apiServer:
  extraArgs:
  - name: "enable-admission-plugins"
    value: "AlwaysPullImages,DefaultStorageClass"
  - name: "audit-log-path"
    value: "/home/johndoe/audit.log"

ControllerManager 플래그

자세한 내용은 kube-controller-manager 참조 문서를 참고하세요.

사용 예시:

apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
kubernetesVersion: v1.16.0
controllerManager:
  extraArgs:
  - name: "cluster-signing-key-file"
    value: "/home/johndoe/keys/ca.key"
  - name: "deployment-controller-sync-period"
    value: "50"

Scheduler 플래그

자세한 내용은 kube-scheduler 참조 문서를 참고하세요.

사용 예시:

apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
kubernetesVersion: v1.16.0
scheduler:
  extraArgs:
  - name: "config"
    value: "/etc/kubernetes/scheduler-config.yaml"
  extraVolumes:
    - name: schedulerconfig
      hostPath: /home/johndoe/schedconfig.yaml
      mountPath: /etc/kubernetes/scheduler-config.yaml
      readOnly: true
      pathType: "File"

Etcd 플래그

자세한 내용은 etcd 서버 문서를 참고하세요.

사용 예시:

apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
etcd:
  local:
    extraArgs:
    - name: "election-timeout"
      value: 1000

패치로 사용자 정의하기

kubeadm은 개별 노드의 InitConfiguration, JoinConfiguration, UpgradeConfiguration에 패치 파일이 있는 디렉터리를 전달할 수 있게 해줘요. 이 패치는 구성 요소 구성이 디스크에 기록되기 전의 마지막 사용자 정의 단계로 사용될 수 있어요.

이 파일을 --config <YOUR CONFIG YAML>으로 kubeadm init에 전달할 수 있어요.

apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
patches:
  directory: /home/user/somedir

참고:

이 파일을 --config <YOUR CONFIG YAML>으로 kubeadm join에 전달할 수 있어요.

apiVersion: kubeadm.k8s.io/v1beta4
kind: JoinConfiguration
patches:
  directory: /home/user/somedir

kubeadm upgrade apply와 kubeadm upgrade node로 kubeadm 노드를 업그레이드한다면, 업그레이드 후에도 사용자 정의가 보존되도록 같은 패치를 다시 제공해야 해요.

apiVersion: kubeadm.k8s.io/v1beta4
kind: UpgradeConfiguration
apply:
  patches:
    directory: /home/user/somedir
apiVersion: kubeadm.k8s.io/v1beta4
kind: UpgradeConfiguration
node:
  patches:
    directory: /home/user/somedir

디렉터리에는 target[suffix][+patchtype].extension 이름의 파일이 있어야 해요. 예를 들어 kube-apiserver0+merge.yaml 또는 그냥 etcd.json이에요.

  • targetkube-apiserver, kube-controller-manager, kube-scheduler, etcd, kubeletconfiguration, corednsdeployment 중 하나일 수 있어요.
  • suffix는 어떤 패치가 먼저 적용되는지 영숫자 순서로 결정하는 데 사용할 수 있는 선택적 문자열이에요.
  • patchtypestrategic, merge, json 중 하나일 수 있으며, 이것은 kubectl이 지원하는 패치 형식과 일치해야 해요. 기본 patchtype은 strategic이에요.
  • extensionjson 또는 yaml 중 하나여야 해요.

kubelet 사용자 정의하기

kubelet을 사용자 정의하려면 ClusterConfiguration 또는 InitConfiguration 옆에 KubeletConfiguration을 같은 구성 파일 안에 ---로 구분해 추가할 수 있어요. 이 파일은 kubeadm init에 전달할 수 있고, kubeadm은 클러스터의 모든 노드에 같은 기본 KubeletConfiguration을 적용해요.

기본 KubeletConfiguration 위에 인스턴스별 구성을 적용하려면 kubeletconfiguration 패치 대상(target)을 사용할 수 있어요.

또는 InitConfiguration과 JoinConfiguration이 모두 지원하는 nodeRegistration.kubeletExtraArgs 필드에 kubelet 플래그를 전달해 재정의로 사용할 수 있어요. 일부 kubelet 플래그는 폐기됐으므로, 사용하기 전에 kubelet 참조 문서에서 상태를 확인하세요.

추가 세부 사항은 'kubeadm으로 클러스터의 각 kubelet 구성하기'를 참고하세요.

kube-proxy 사용자 정의하기

kube-proxy를 사용자 정의하려면 ClusterConfiguration 또는 InitConfiguration 옆에 KubeProxyConfiguration을 ---로 구분해 kubeadm init에 전달할 수 있어요.

자세한 내용은 API 참조 페이지로 이동할 수 있어요.

참고:

CoreDNS 사용자 정의하기

kubeadm은 corednsdeployment 패치 대상을 대상으로 하는 패치로 CoreDNS Deployment를 사용자 정의할 수 있게 해줘요.

kube-system/coredns ConfigMap 같은 다른 CoreDNS 관련 API 객체에 대한 패치는 현재 지원되지 않아요. 이 객체들 중 어떤 것이든 kubectl로 수동으로 패치하고 그 후 CoreDNS 파드를 다시 만들어야 해요.

또는 ClusterConfiguration에 다음 옵션을 포함해 kubeadm CoreDNS 배포를 비활성화할 수 있어요.

dns:
  disabled: true

또한 다음 명령을 실행하면,

kubeadm init phase addon coredns --print-manifest --config my-config.yaml

kubeadm이 자신의 설정에서 CoreDNS에 대해 만들 매니페스트 파일을 얻을 수 있어요.

더 알아보기 (Learn more)