kubeadm

개요

Pasted image 20240729105128.png|700
Kubernetes를 설치하는 것을 도와주는 명령어.
클러스터로서 관리되기 위해서는 각종 세팅이 필요하기에 이를 도와주는 다양한 도구가 존재하는데, 이 중 CKA에도 출제되기도 하는 툴이다.
그래서 쿠버네티스 공식 문서에서도 설치하는 방법에 대한 언급이 존재한다.

요구사양

문서에 실제 설치를 위한 요구사항이 적혀있다.[1]

init - 클러스터 초기화

kubeadm을 통한 클러스터 구축은 두 가지 과정이 담긴다.
먼저 init을 통해 마스터 노드를 초기화해야 하는데, 이걸 먼저 보자.

초기화 과정은 다음과 같이 이뤄진다.

처음 보면 장황해보이는데, 막상 하나하나 보면 별 거 없어서 설명을 간단히 적었다.
그냥 인증서 만들고, 통신할 수 있는 파일 만들어준다.
그 다음에 파드 양식을 만들어둔 이후에 kubelet을 작동시키면 kubelet이 정적 파드를 만들어줄 것이고, 본격적으로 클러스터가 가동된다.
그 다음에는 설정 때 사용된 파일들을 클러스터 컨피그맵에 올려주고, 인증서 관리를 위해 kubeadm 자신도 인증서를 가지고 있는다.
그후에는 노드가 ready 상태가 되기 위한 기본 네트워크 관련 애드온들을 설치해주는 것이다.

kubeadm init phase control-plane all --config=config.yaml
kubeadm init phase --skip-phases=ccontrol-plane --config=config.yaml

이렇게 단계가 나눠져 있어서, 이를 단계별로 실행하는 것도 가능하다.
이런 식으로 한다면 중간 단계에서 뭔가 커스텀을 하고 싶은 게 있을 때 관리자가 세밀하게 조작할 수 있다.
(근데 처음부터 설정 파일을 잘 넣던가, 인자를 잘 줘서 하는 게 당연히 베스트다.)

설정 파일 사용

많은 설정을 인자로 미리 넣어줄 수 있지만, 이것들을 처음부터 설정파일로 관리하는 것도 가능하다.
설정 양식도 yaml이고, 4개의 kind를 넘길 수 있다.

사실 여기에 Join, Upgrade, Reset 등의 Configuration도 넘길 수 있긴 한데, 어차피 init 단계에서 해당 파일을 넣어봐야 무시된다.

kubeadm config print init-defaults --component-configs KubeProxyConfiguration,KubeletConfiguration

이때 뒤 인자를 넣지 않으면 InitConfiguration, ClusterConfiguration만 나온다.[2]

자세한 설정은 여기에서 볼 수 있다.[3]
기본적으로 넣어주면 좋은 것은 Init, Cluster.
클러스터쪽에는 각 컴포넌트에 대한 설정도 해줄 수 있는데 이런 식으로 해주면 된다.[4]
각 컴포넌트의 넣을 추가 인자를 세팅하는 것이다.[5]

image.png
ClusterConfiguration에 featureGates라는 필드가 있길래 모든 컴포넌트에 일일히 안 써도 되는 줄 알았는데, 에러가 오질나게 뜬다.[6]
image.png
대체 저 필드는 뭘 넣는 필드인가.. 그리고 정말 피쳐게이트를 일일히 명시해서 넣어야 하나.. 난감하다..
정말 이 방법밖에 없나..?[7]

join - 노드 등록

이후에 join을 통해 워커노드를 마스터 노드에 등록한다.
각 과정은 각 노드에서 이뤄져야만 한다.

명령어

클러스터 구축

kubeadm을 이용해서 클러스터를 구축할 때 kubeadm은 기본적으로 kubelet을 동작시키고 그 위에 핵심 컴포넌트들을 동작시키는 일을 한다.
자세한 사항은 E-쿠버네티스 클러스터 구축를 참조한다.

사실 쿠버네티스를 설치하는 다른 방법은 많다.
심지어 일일히 모든 컴포넌트를 수동으로 만드는 방법도 있다..[8]
그러나 가장 표준적인 방법은 역시 kubeadm이라 할 수 있어 kubeadm을 통한 설치 방식을 해당 문서의 핵심으로 분리하고자 한다.

참고


  1. https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#before-you-begin ↩︎

  2. https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-config/ ↩︎

  3. https://kubernetes.io/docs/reference/config-api/kubeadm-config.v1beta4/ ↩︎

  4. https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/control-plane-flags/#customizing-kube-proxy ↩︎

  5. https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/ ↩︎

  6. https://kubernetes.io/docs/reference/config-api/kubeadm-config.v1beta4/#kubeadm-k8s-io-v1beta4-ClusterConfiguration ↩︎

  7. https://devopscube.com/enable-feature-gates-kubeadm/ ↩︎

  8. https://github.com/kelseyhightower/kubernetes-the-hard-way ↩︎