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이에요.
target은kube-apiserver,kube-controller-manager,kube-scheduler,etcd,kubeletconfiguration,corednsdeployment중 하나일 수 있어요.suffix는 어떤 패치가 먼저 적용되는지 영숫자 순서로 결정하는 데 사용할 수 있는 선택적 문자열이에요.patchtype은strategic,merge,json중 하나일 수 있으며, 이것은 kubectl이 지원하는 패치 형식과 일치해야 해요. 기본 patchtype은strategic이에요.extension은json또는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에 대해 만들 매니페스트 파일을 얻을 수 있어요.