[kubernetes] kubeadm init 클러스터 구성하기

Kubernetes는 컨테이너화된 애플리케이션을 자동으로 배포, 확장, 관리하는 오픈 소스 플랫폼이며, 다양한 환경에서 일관된 애플리케이션 실행을 가능하게 해주는 컨테이너 오케스트레이션 도구입니다.

 

kubeadm init 명령어는 Kubernetes 클러스터의 control plane을 설정하고 초기화하는데 사용됩니다.
이 명령어를 통해 Kubernetes 마스터 노드를 설정하고, 다른 워커 노드를 추가할 수 있습니다.

 

kubeadm init 명령어를 통해 Kubernetes 클러스터 구축하는 방법을 알아보도록 하겠습니다.

 

 


사전 작업

 

컨테이너 런타임 설치

컨테이너를 실행하고 관리하는 역할인 컨테이너 런타임 설치가 필요합니다.
CRI-O 컨테이너 런타임을 설치합니다.

 

[kubernetes] CRI-O 설치하기

[kubernetes] CRI-O 설치하기Kubernetes는 컨테이너화된 애플리케이션을 자동으로 배포, 확장, 관리하는 오픈 소스 플랫폼이며, 다양한 환경에서 일관된 애플리케이션 실행을 가능하게 해주는 컨테이너

every-up.tistory.com

 

 

kubeadm kubelet kubectl 설치

Kubernetes 클러스터 생성 및 기본적인 명령어를 사용하기 위해 kubeadm kubelet kubectl 패키지를 설치합니다.

 

[kubernetes] kubeadm, kubelet, kubectl 설치하기

[kubernetes] kubeadm, kubelet, kubectl 설치하기Kubernetes는 컨테이너화된 애플리케이션을 자동으로 배포, 확장, 관리하는 오픈 소스 플랫폼이며, 다양한 환경에서 일관된 애플리케이션 실행을 가능하게

every-up.tistory.com

 

 

 

IPv4 Forward 설정

Pod 네트워크의 트래픽을 정상적으로 라우팅하기 위해 ipv4 forward 설정을 추가합니다.

 

 

[Linux] IPv4 Forwarding 설정하기

[Linux] IPv4 Forwarding 설정하기 Linux에서 IPv4 Forwarding(IPv4 포워딩)은 시스템이 들어오는 네트워크 패킷을 다른 네트워크 인터페이스로 전달할 수 있는 기능을 활성화하는 설정입니다 기본적으로 서

every-up.tistory.com

 

 

 

Kubernetes 컴포넌트 이미지 다운로드

Kubernetes 클러스터의 초기화를 성공적으로 진행하기 위해 Kubernetes 컴포넌트 이미지를 다운로드 받습니다.

# kubeadm config images pull
[config/images] Pulled registry.k8s.io/kube-apiserver:v1.31.1
[config/images] Pulled registry.k8s.io/kube-controller-manager:v1.31.1
[config/images] Pulled registry.k8s.io/kube-scheduler:v1.31.1
[config/images] Pulled registry.k8s.io/kube-proxy:v1.31.1
[config/images] Pulled registry.k8s.io/coredns/coredns:v1.11.3
[config/images] Pulled registry.k8s.io/pause:3.10
[config/images] Pulled registry.k8s.io/etcd:3.5.15-0

 

 


kubeadm init

 

Kubernetes 클러스터의 control plane을 설정하고 초기화하는 kubeadm init 명령어를 사용하여 마스터 노드를 설정합니다.

kubeadm init 명령어 이후 클러스터 설정 진행에 대한 로그를 확인하실 수 있습니다.

#  kubeadm init
[init] Using Kubernetes version: v1.31.1

===== 생략 =====

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.0.0.13:6443 --token 80hzos.m4ql4kdlrv7bpd24 \
        --discovery-token-ca-cert-hash sha256:2827b77380f60a82a86f6051c599289f9432f71b7c369216f62da768822d7e02

 

 

kubectl 명령어를 사용할 수 있도록 설정 파일을 준비하고 권한 설정을 위해 아래 명령어를 추가로 입력합니다.

# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config

 

 

kubelet을 재시작 합니다.

# systemctl restart kubelet

 

 


클러스터 설치 확인

Kubernetes 클러스터에서 현재 구성된 모든 노드(node)에 대한 정보를 확인할 수 있습니다.

# kubectl get nodes
NAME         STATUS   ROLES           AGE     VERSION
k8s-cn-001   Ready    control-plane   5m53s   v1.31.1

노드 이름, 상태, 역할, 생성된 시간, 버전 등의 정보를 확인할 수 있습니다.

 

 

Kubernetes 클러스터의 핵심 구성 요소들이 실행되는 kube-system 네임스페이스의 리소스를 확인할 수 있습니다.

# kubectl get all -A
NAMESPACE     NAME                                     READY   STATUS    RESTARTS   AGE
kube-system   pod/coredns-7c65d6cfc9-5gtzj             1/1     Running   0          12m
kube-system   pod/coredns-7c65d6cfc9-85swv             1/1     Running   0          12m
kube-system   pod/etcd-k8s-cn-003                      1/1     Running   0          12m
kube-system   pod/kube-apiserver-k8s-cn-003            1/1     Running   0          12m
kube-system   pod/kube-controller-manager-k8s-cn-003   1/1     Running   0          12m
kube-system   pod/kube-proxy-6gx92                     1/1     Running   0          12m
kube-system   pod/kube-scheduler-k8s-cn-003            1/1     Running   0          12m

NAMESPACE     NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
default       service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP                  12m
kube-system   service/kube-dns     ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   12m

NAMESPACE     NAME                        DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
kube-system   daemonset.apps/kube-proxy   1         1         1       1            1           kubernetes.io/os=linux   12m

NAMESPACE     NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/coredns   2/2     2            2           12m

NAMESPACE     NAME                                 DESIRED   CURRENT   READY   AGE
kube-system   replicaset.apps/coredns-7c65d6cfc9   2         2         2       12m

 

 


 

Rocky Linux 9.4에서 Kubernetes 클러스터를 구축하는 방법을 알아봤습니다.

 

먼저, 클러스터 구성을 위해 컨테이너 런타임(CRI-O)을 설치하고, kubeadm, kubelet, kubectl 패키지를 설치한 후, IPv4 포워딩을 활성화해야 합니다.

 

그 후, kubeadm init 명령어를 사용하여 Kubernetes 클러스터의 control plane을 초기화합니다. 초기화가 완료되면, 클러스터에서 kubectl 명령어를 사용하기 위해 설정 파일을 준비하고 권한을 추가합니다. 그리고 kubelet을 재시작하여 클러스터가 정상적으로 동작하도록 합니다.

 

마지막으로, kubectl get nodes 명령어로 클러스터의 노드를 확인하고, kubectl get all -A 명령어로 kube-system 네임스페이스에서 Kubernetes의 핵심 구성 요소들이 제대로 실행되고 있는지 확인할 수 있습니다.

 

지금까지 Kubernetes 클러스터를 구축하는 방법을 간단히 알아보는 시간을 가졌습니다....! 끝...!

 

 

유익하게 보셨다면 공감을 눌러주고, 댓글로 의견을 공유해 남겨주시면 감사하겠습니다!

 

 

 

[Reference]
https://github.com/kubernetes/kubernetes
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

 

 

 

+ Recent posts