본문 바로가기

Docker/k8s

쿠버네티스 설치 과정

[1. 개요]

리눅스 서버에 쿠버네티스 설치 과정을 정리

  • Host OS: Ubuntu 20.04
  • vmware 이용
  • 어느정도 설치 후, snapshot 으로 이미지 복제해서 사용
    => 기존에 사용하던 이미지 파일이 존재하는 디렉터리를 통째로 복사해서 따로 저장

[2. 설치 개요]

전체 적인 과정은 ubuntu 나 centos 나 비슷하다.

  1. 각 노드 별, hostname 을 유니크하게 설정
    => 멀티 노드 클러스터 구축 이후, 노드 구분을 위함.

  2. 쿠버네티스 repository 설정
    => redhat 계열과 debian 계열이 좀 다름

  3. docker 설치
    => 최초 설치 시, cgroup driver 가 cgroupfs  이면, systemd 로 변경이 필요하다.
    => 버전은 18 버전 이상이면 됨(?).

  4. swap partition disable

  5. kubeadm, kubectl, kubelet 설치
    => 여기서는 1.18.5 버전을 이용함 

  6. kubeadm 으로 클러스터 생성

  7. kubeadm 으로 클러스터에 노드 등록

  8. kubectl 로 클러스터 내 노드 확인

[3. 상세 절차]

  1. host name 수정
    => 쿠버네티스 노드 식별을 위해서, 모든 노드는 서로 다른 host name 을 갖도록 해야 한다.
    => vim /etc/hostname # 적절한 값으로 수정 후 재부팅
    => hostnamectl 명령어 이용

  2. 커널 매개변수 설정
    => 오버레이 네트워크용 커널 파라미터 변경
    # sysctl -w net.bridge-nf-call-ip6tables=1
    # sysctl -w net.bridge-nf-call-iptables=1
    # sysctl -w net.ipv4.ip_forward=1
    => 커널 파라미터 확인 후, 변경해도 됨.
    => https://testkernelv2.tistory.com/536

  3. Swap partition disable
    # swapoff -a
    => /etc/fstab 수정

  4. 방화벽 해제 혹은 특정 포트들에 대한 허용
    => 쿠버네티스 운영 중, 특정 포트 연결 거부를 방지하기 위해
  5. 기타 패키지 설치
    # apt install -y apt-transport-https

  6. 쿠버네티스 저장소 설정
  7. docker 설치
    # apt install docker.io
    # docker info
    => cgroup driver 가 cgroupfs 인 경우 수정이 필요하다.
    => 여기서 버전은 20.10.12

    # systemctl daemon-reload 
    # systemctl restart docker

  8. kubernetes 설치
    # apt install -y kubelet=1.18.15-00 kubeadm=1.18.15-00 kubectl=1.18.15-00
    => 특정 버전으로 설치한다.
  9. cni 사전 준비
  10. 쿠버네티스 클러스터 구축
    # kubeadm init --pod-network-cidr=10.244.0.0/16
    => --pod-network-cidr 에는 앞서 다운 받은 kube-flannel.yml 을 참조하여 기입하도록 한다.
    => 콘솔 창에 출력된 세가지 명령을 반드시 수행하도록 한다.
    => 콘솔 창에 출력된 kubeadm join 명령어를 따로 기록해둔다.
    => 이 작업은 마스터 노드에서만 하도록 한다.

  11. CNI 구축
    # kubectl apply -f kube-flannel.yml
    => 이 작업 역시, 마스터 노드에서만 하도록 한다.

  12. 쿠버네티스 클러스트에 노드 추가
    # kubeadm join 을 마스터 노드를 제외한 모든 노드 서버에서 실행하도록 한다.\

기타 클러스터 구축 중 유용한 명령어

  • kubectl get pods --all-namespaces -o wide
  • core dns 등 확인

[4. 결과]

  • kubectl get nodes 를 통해 클러스터에 등록 된 node 정보를 확인 할 수 있다.
  • kubeadm init 으로 클러스터 생성 시, master 는 따로 하지 않아도 등록된다.
  • node 서버에서 kubeadm join 을 통해 클러스터에 등록할 수 있다.

  • kube-flannel 및 coredns 등이 모두 Running 상태여야 한다.


[5. CentOS 7 관련]

  • 도커 버전에 따라 쿠버네티스 클러스터 생성 시 영향을 있음.
  • 도커 버전 20.10.12 에서 문제가 있진 않았음.
  • kubectl init 시 --pod-network-cidr=172.28.0.0/14 로 할 것. => kube-flannel.yml 수정 필요.
  • 클러스터 생성 후, 두개의 네트워크 인터페이스가 생성 됨
    => cni.0 와 flannel.1
    => pod-network-cidr=10.244.0.0/16 사용 시
    => 두 네트워크 인터페이스 간 ip 충돌이 있는 듯 함. 
    => 10.244.0.0/24 를 cni.0 가 사용

 


[6. 기타 참고자료]

 

 

'Docker > k8s' 카테고리의 다른 글

볼륨, 영구 볼륨, 영구 볼륨 클레임  (0) 2023.07.11
pod stuck  (0) 2023.02.23
워크로드 API  (0) 2023.02.11
쿠버네티스 종류  (0) 2023.02.04