ubuntu 22.04에서 kubernets 설치하기

2–3분

쿠버네티스 – 메뉴얼 작성

○ 쿠버네티스 설치 진행

시험 준비를 위한 CKS,CKAD 간단한 클러스터 구성 진행을 해보았다.

가상머신 스펙은 아래와 같습니다. 가상머신 구성은 vSphere에서 진행하였습니다.

필수 요구조건

  • ubuntu 22.04 서버 설치
  • 최소 메모리 2GB 이상
  • CPU는 최소 2코어 이상
  • DISK 최소 20G 이상
  • 각각의 노드가 인터넷에 연결 필수

가상머신 스펙

k8s-masterk8s-worker1k8s-worker2
CPU222
Memory444
DISK303030
OSubuntu22.04ubuntu22.04ubuntu22.04

진짜 기본적인 기능만 실험 해보기 위해 간단히 구성된 서버이다.

LAB 구성

  • 마스터 노드: 192.168.1.108 – k8s-master
  • 워커노드 #1: 192.168.1.41 – k8s-worker1
  • 워커노드 #2: 192.168.1.98 – k8s-worker2

위와 같은 정보로 가상머신이 구성 된 이 후 인제 실질적인 설치 진행하겠습니다.

준비된 노드는 이미 ubuntu22.04가 설치 된 상태여야 합니다.

그리고 모든 명령어는 root 에서 사용하는 것을 가정으로 합니다.

○ 설치시작

1) 각각의 노드에 호스트 네임 설정 – 모든 노드에 설정

  • 각각의 노드에 접속한 후 아래 명령어를 입력
$ hostnamectl set-hostname <node name>
# example
$ hostnamectl set-hostname k8s-master

2) 스왑메모리 설정 해제 및 커널 파라미터 추가 – 모든 노드에 설정

스왑메모리 설정을 사용해제 하지 않으면 중간에 설치가 되었어서도 컨테이너가 생성되지 않아 쿠버네티스가 정상작동 하지 않게 된다.

스왑메모리 설정 해제는 필수 이다.

# 스왑메모리 즉시 해제 명령어
$ swapoff -a
# 스왑메모리 fstab에서 제거하는 명령어
$ sudo sed -i '/ swap / s/^\\(.*\\)$/#\\1/g' /etc/fstab

아래는 커널 설정이다. 이 설정도 하지 않으면 애초에 kubeadm init이 실행 되지 않으니 필수적으로 입력해야한다.

  • 컨테이너 설정
$ tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
$ modprobe overlay
$ modprobe br_netfilter
  • 쿠버네티스 설정
$ tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
$ modprobe overlay
$ modprobe br_netfilter

이후 설정 적용을 위하여 아래 명령어를 입력

$ sysctl --system

3) 컨테이너 런타임 설치 – 모든 노드에 설정

컨테이너 런타일 설치를 위한 사전에 필요한 패키지를 먼저 설치 진행

$ apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
  • 도커 레포지토리 추가
$ curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg
$ add-apt-repository "deb [arch=amd64] <https://download.docker.com/linux/ubuntu> $(lsb_release -cs) stable"

$ apt update
$ apt install -y containerd.io

  • containerd를 cgroup을 사용하여 시작되도록 구성
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
sed -i 's/SystemdCgroup \\= false/SystemdCgroup \\= true/g' /etc/containerd/config.toml

  • apt 명령어를 통한 containerd 설치
$ systemctl restart containerd
$ systemctl enable containerd

4) 쿠버네티스 설치를 위한 레포지토리 추가 – 모든 노드에 설정

쿠버네티스 설치를 위한 레포지토리 추가가 필요하다.

  • curl 명령어를 통한 gpg키 다운로드
$ curl -s <https://packages.cloud.google.com/apt/doc/apt-key.gpg> | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/kubernetes-xenial.gpg
  • 레포지토리 추가 진행
$ apt-add-repository "deb <http://apt.kubernetes.io/> kubernetes-xenial main"

5) kubeadm,kubectl,kubelet 설치 – 모든 노드에 설정

위에 레포지토리를 설치하면 위에 3개 패키지를 설치 진행 가능

$ apt update
$ apt install -y kubelet kubeadm kubectl
$ apt-mark hold kubelet kubeadm kubectl

6) kubeadm을 통한 쿠버네티스 클러스터 초기화 진행 – 마스터 노드에서 진행

클러스터 초기화를 진행하는 과정이다. 반드시 마스터노드에서만 진행해야 한다.

$ kubeadm init --apiserver-advertise-address <Master Node IP>
# example
$ kubeadm init --apiserver-advertise-address 192.168.1.108

초기화가 완료되면 아래 아래 통해 노드조회가 가능하다.

※ root 계정을 통한 진행을 할 예정이므로 export KUBECONFIG=/etc/kubernets/admin.conf 명렁어를 꼭 입력한 후 진행

아래에 명령어를 입력하면 쿠버네티스 클러스터 정보 및 노드에 대한 정보확인 가능

# 클러스터 정보
$ kubectl cluster-info
# 노드에 대한 정보
$ kubectl get nodes

Ready가 아마 ‘NotReady’로 되어 있을 것이다.

7) worker node 추가하기

# master node에서 토큰 생성후 join command 생성하기
kubeadm token create --print-join-command
# 각각의 worker node에서 join-command를 통해 생성 된 문장 실행
kubeadm join 192.168.1.108:6443 --token lgb6sq.6apxcwalwxx3pj5s --discovery-token-ca-cert-hash sha256:bbe70e75b854adf884096d4d99673d152b939746cbfb4873f60f520c11cd0d64

8) Calico Network Plugin 설치 – 마스터 노드에서 진행

네트워크 플러그인을 설치 해야 만 노드가 정상적으로 구성 된다. Calico Network plugin은 마스터 노드에서만 진행

$ kubectl apply -f <https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml>

kube-system namespace에서 확인 가능

$ kubectl -n kube-system get pod

아래와 같이 모든 노드 출력되면 설치 완료