[1. 개요]
리눅스 서버에 쿠버네티스 설치 과정을 정리
- Host OS: Ubuntu 20.04
- vmware 이용
- 어느정도 설치 후, snapshot 으로 이미지 복제해서 사용
=> 기존에 사용하던 이미지 파일이 존재하는 디렉터리를 통째로 복사해서 따로 저장
[2. 설치 개요]
전체 적인 과정은 ubuntu 나 centos 나 비슷하다.
- 각 노드 별, hostname 을 유니크하게 설정
=> 멀티 노드 클러스터 구축 이후, 노드 구분을 위함. - 쿠버네티스 repository 설정
=> redhat 계열과 debian 계열이 좀 다름 - docker 설치
=> 최초 설치 시, cgroup driver 가 cgroupfs 이면, systemd 로 변경이 필요하다.
=> 버전은 18 버전 이상이면 됨(?). - swap partition disable
- kubeadm, kubectl, kubelet 설치
=> 여기서는 1.18.5 버전을 이용함 - kubeadm 으로 클러스터 생성
- kubeadm 으로 클러스터에 노드 등록
- kubectl 로 클러스터 내 노드 확인
[3. 상세 절차]
- host name 수정
=> 쿠버네티스 노드 식별을 위해서, 모든 노드는 서로 다른 host name 을 갖도록 해야 한다.
=> vim /etc/hostname # 적절한 값으로 수정 후 재부팅
=> hostnamectl 명령어 이용 - 커널 매개변수 설정
=> 오버레이 네트워크용 커널 파라미터 변경
# 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 - Swap partition disable
# swapoff -a
=> /etc/fstab 수정 - 방화벽 해제 혹은 특정 포트들에 대한 허용
=> 쿠버네티스 운영 중, 특정 포트 연결 거부를 방지하기 위해 - 기타 패키지 설치
# apt install -y apt-transport-https - 쿠버네티스 저장소 설정
- docker 설치
# apt install docker.io
# docker info
=> cgroup driver 가 cgroupfs 인 경우 수정이 필요하다.
=> 여기서 버전은 20.10.12
# systemctl daemon-reload
# systemctl restart docker
- kubernetes 설치
# apt install -y kubelet=1.18.15-00 kubeadm=1.18.15-00 kubectl=1.18.15-00
=> 특정 버전으로 설치한다.
- cni 사전 준비
- 쿠버네티스 클러스터 구축
# kubeadm init --pod-network-cidr=10.244.0.0/16
=> --pod-network-cidr 에는 앞서 다운 받은 kube-flannel.yml 을 참조하여 기입하도록 한다.
=> 콘솔 창에 출력된 세가지 명령을 반드시 수행하도록 한다.
=> 콘솔 창에 출력된 kubeadm join 명령어를 따로 기록해둔다.
=> 이 작업은 마스터 노드에서만 하도록 한다. - CNI 구축
# kubectl apply -f kube-flannel.yml
=> 이 작업 역시, 마스터 노드에서만 하도록 한다. - 쿠버네티스 클러스트에 노드 추가
# 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. 기타 참고자료]
- https://stackoverflow.com/questions/40534837/kubernetes-installation-and-kube-dns-open-run-flannel-subnet-env-no-such-file
- https://w.cublr.com/cloud/kubernetes/install-on-odroid/
- https://stackoverflow.com/questions/52098214/kube-flannel-in-crashloopbackoff-status
- https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=freepsw&logNo=220959722669
- fd