쿠버네티스 node 초기 설정

Watermelon·2025년 9월 19일

CKA 학습 과정

목록 보기
3/35
post-thumbnail

참고 유튜브
cpu 2코어 및 램 2기가 이상, 스왑 비활성화

  • 스왑 비활성화 명령어:
    swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab

쿠버네티스 설치툴

  1. kubeadm: 쿠버네티스에서 공식 제공하는 클러스터 생성/관리 도구
  2. kubespray: 쿠버네티스 클러스터를 배포하는 오픈소스 프로젝트

CNI(Container Network interface)

  • Container 간 통신을 지원하는 VxLAN, Pod Network라고도 부름
  • 다양한 종류의 플러그인 존재

CNI 종류

  • IP만으로 통신이 불가능하고 꼭 CNI가 있어야함
  1. 플라넬(flannel)
  2. 칼리코(calico)
  3. 위브넷(weavenet)
  • 이전에 사용한 도커 플레이그라운드에서는 큐브 라우터를 사용함

  • CNI를 통해 컨테이너 간 통신이 가능한 모습
  • CNI1 -> NIC1 -> NIC2 -> CNI2

쿠버네티스 클러스터 구성요소

귀여운 쿠버네티스 무리들은 어떻게 구성이 되어있을까요
1. Control plane(master node)

  • 워커 노드들의 상태를 관리하고 제어
  • 싱글 마스터와 멀티 마스터(3, 5개의 마스터 노드)
  1. Worker node
  • 도커 플랫폼을 통해 컨테이너를 동작하며 실제 서비스 제공

도커와 쿠버네티스 설치 과정

  • 설치 구성도
  • CNI는 위브넷 사용(강사님 임의로)

1. 도커 설치

https://docs.docker.com/

  • 도커 설치법 참조

https://docs.docker.com/get-started/get-docker/

  • 자신이 사용하는 OS에 맞춰서 클릭

  • 작성자는 리눅스 cli 사용해서 해당 클릭

  • GUI 사용자는 docker desktop 클릭

  • 리눅스 중에서도 자신이 사용하는 종류 클릭

  • 버전에 따라서 차이가 있을 수 있으니 확인하기

dnf remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine \
                  podman \
                  runc
  • 오래된 버전 삭제
dnf -y install dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
  • 도커 저장소 설정
dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • 도커 설치
systemctl enable --now docker
  • 도커 시작
docker run hello-world
  • hello-world 이미지 실행하여 설치 확인
  • 작성자는 systemctl status docker로 확인함
  • 또는 docker --version로도 확인 가능

2. 쿠버네티스 컨테이너 런타임 설정

https://kubernetes.io/ko/

  • 쿠버네티스 설치법 참조
  • 쿠버네티스 1.24 버전 이상부터는 컨테이너 런타임을 별도로 설정하지 않아도 됨
  • 구버전 설치 시 컨테이너 런타임 설정하기
# 필요한 sysctl 파라미터를 설정하면, 재부팅 후에도 값이 유지
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

# 재부팅하지 않고 sysctl 파라미터 적용하기
sysctl --system
  • 일단 강의와 동일하게 구성
systemctl stop firewalld
systemctl disable firewalld
  • 원래라면 허용해야하는 포트를 일일이 오픈해줘야하지만 번거러워서 그런지 방화벽 내림

2-2. 쿠버네티스 설정도구 설치(control plan, worker 둘 다 적용)

kubeadm: 노드에 Kubernetes 설치·초기화하는 공식 도구
kOps: AWS에서 인프라까지 포함해 Kubernetes 클러스터 자동 생성
Kubespray: Ansible 기반으로 다양한 환경에서 Kubernetes 클러스터 자동 배포

  • 작성자는 kubeadm 사용
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

systemctl enable --now kubelet
  • selinux 끄기: vi /etc/sysconfig/selinux에서 selinux disabled 설정 후 재기동 필수
  • getenforce로 확인 가능
  • https://every-up.tistory.com/87 레포지토리는 블로그 참고
systemctl daemon-reload
systemctl restart kubelet
systemctl enable kubelet

컨테이너 런타임 설정

  • containerd config default > /etc/containerd/config.toml 명령어 실행 후
  • systemctl restart containerd

3. control-plane node 구성

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

  • 링크 참고하여 설정 이어서 진행
kubeadm init
  • 반드시 master node 에서만 실행
  • !!!worker node 안됨!!!

join token 저장법

  • cat > token.txt
  • ctl + Ins로 join 명령어 복사
  • shift + Ins로 txt 파일에 붙여넣기
  • ctl + d로 저장
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 유저에게 kube 허용해주기
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
  • CNI: weave로 설정

이제 kubectl get nodes 하면 status Ready 상태 됨

4. worker node 구성

  • master node에서 저장해두었던 join 명령어 복사 붙여넣기
  • 잠시 기다렸다가 master node에서 kubectl get nodes 하면 status Ready 상태 됨

5. 명령어 자동완성 설정

source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
  • master node에서 해당 명령어 실행
  • kubectl 명령어 입력 시 tab 키 입력 가능해짐
  • kubeadm 이렇게 바꾸면 해당 명령어도 tab 키 입력 가능해짐
  • 만약 오류가 뜬다면
  1. dnf install -y bash-completion
  2. source /etc/profile.d/bash_completion.sh
profile
많은 경험을 해보고자 하는

0개의 댓글