[kubernetes] kubeadm init 클러스터 구성하기
Kubernetes는 컨테이너화된 애플리케이션을 자동으로 배포, 확장, 관리하는 오픈 소스 플랫폼이며, 다양한 환경에서 일관된 애플리케이션 실행을 가능하게 해주는 컨테이너 오케스트레이션 도구입니다.
kubeadm init 명령어는 Kubernetes 클러스터의 control plane을 설정하고 초기화하는데 사용됩니다.
이 명령어를 통해 Kubernetes 마스터 노드를 설정하고, 다른 워커 노드를 추가할 수 있습니다.
kubeadm init 명령어를 통해 Kubernetes 클러스터 구축하는 방법을 알아보도록 하겠습니다.
사전 작업
컨테이너 런타임 설치
컨테이너를 실행하고 관리하는 역할인 컨테이너 런타임 설치가 필요합니다.
CRI-O 컨테이너 런타임을 설치합니다.
- CRI-O 설치하기
https://every-up.tistory.com/84
kubeadm kubelet kubectl 설치
Kubernetes 클러스터 생성 및 기본적인 명령어를 사용하기 위해 kubeadm kubelet kubectl 패키지를 설치합니다.
- kubeadm kubelet kubectl 설치하기
https://every-up.tistory.com/87
IPv4 Forward 설정
Pod 네트워크의 트래픽을 정상적으로 라우팅하기 위해 ipv4 forward 설정을 추가합니다.
- IPv4 Forwarding 설정하기
https://every-up.tistory.com/89
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/
'kubernetes' 카테고리의 다른 글
[kubernetes] kubeadm join 시 secrets "kubeadm-certs" is forbidden 오류 확인 (2) | 2024.11.01 |
---|---|
[kubernetes] Master/Worker 노드 개념 알아보기 (0) | 2024.10.29 |
[kubernetes] kubeadm, kubelet, kubectl 설치하기 (0) | 2024.09.25 |
[kubernetes] kubeadm init "found multiple CRI endpoints on the host" 오류 (0) | 2024.09.19 |
[kubernetes] runc 설치하기 (0) | 2024.09.13 |