쿠버네티스 설치부터 대시보드 접속까지

제이슨·2023년 11월 23일
2
post-thumbnail

실리콘 맥 환경에서 가상머신 생성하기 포스트에 이어지는 글입니다.

쿠버네티스 설치부터 대시보드 접속까지 험난한 여정

쿠버네티스 설치 준비하기

터미널에서 root 유저 접속

'k8s-master'로 호스트 이름 설정 및 적용

$ hostnamectl set-hostname “k8s-master” && exec bash
$ cat << EOF >> /etc/hosts
192.168.64.30 k8s-master
EOF

스왑 비활성화

# 현재 활성화된 모든 스왑 공간 비활성화
$ swapoff -a

# 재부팅시 스왑 활성화 X
$ sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

SELinux 강제 적용 모드에서 경고 모드로 전환

  • SELinux 강제 적용 모드에서 쿠버네티스 컴포넌트의 정상적인 동작이 방해받을 수 있기 때문입니다!
$ setenforce 0
$ sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/sysconfig/selinux

방화벽 설정

현재 쿠버네티스를 설치하고 있는 가상머신은 마스터 노드(컨트롤 플레인)이므로 쿠버네티스 문서를 참고해 방화벽을 설정합니다.

# 방화벽에 포트 추가 (--permanent 옵션을 통해 재부팅 시에도 유지)
$ firewall-cmd --permanent --add-port={6443,2379,2380,10250,10259,10257}/tcp
# 방화벽 설정 다시 읽기
$ firewall-cmd --reload
# 방화벽 전체 리스팅
$ firwall-cmd --list-all

방화벽 리스팅을 통해서 포트가 아래처럼 제대로 등록되었다면, 성공입니다 😀

클러스터 네트워크 관련 설정

  • overlay 모듈: 파드 간 통신, 컨테이너 간 통신, 서비스 디스커버리 등에 사용
  • br_netfilter: 네트워크 브리지에서 패킷 필터링을 지원하기 위한 모듈
$ tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
$ modprobe overlay
$ modprobe br_netfilter
$ cat <<EOF |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 --system

아래와 같이 커널 매개변수(net.bridge.bridge-nf-call-iptables, net.bridge.bridge-nf-call-ip6tables, net.ipv4.ip_forward)가 표시된다면, 성공입니다!

컨테이너 런타임(containerd) 설치

# repo 설정
$ yum install -y yum-utils
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# containerd 설치
$ yum install -y containerd.io-1.6.21-3.1.el9.aarch64
$ containerd config default > /etc/containerd/config.toml
$ sed -i 's/ SystemdCgroup = false/ SystemdCgroup = true/' /etc/containerd/config.toml
$ systemctl restart containerd
$ systemctl daemon-reload
$ systemctl enable --now containerd

containerd cri 활성화

$ sed -i 's/^disabled_plugins/#disabled_plugins/' /etc/containerd/config.toml
$ systemctl restart containerd

쿠버네티스 설치 준비: repo 설정

  • 쿠버네티스 도구(kubeadm, kubectl, kubelet)은 기본적으로 Rocky Linux 9에 기본 패키지로 이용이 불가능합니다. 따라서, 쿠버네티스 리포지토리를 아래와 같이 수동으로 등록해줍시다!
$ cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

쿠버네티스 설치하기

쿠버네티스(kubeadm, kubectl, kublet) 설치!

yum install -y kubelet-1.27.2-150500.1.1.aarch64 kubeadm-1.27.2-150500.1.1.aarch64 kubectl-1.27.2-150500.1.1.aarch64 --disableexcludes=kubernetes
systemctl enable --now kubelet

쿠버네티스 클러스터 구성하기

쿠버네티스 클러스터 생성

kubeadm init --pod-network-cidr=20.96.0.0/12 --apiserver-advertise-address 192.168.64.30

쿠버네티스 클러스터 통신을 위한 설정

# 홈 디렉터리에 kube 디렉터리 생성(이미 있는 경우 -p 옵션으로 에러 발생하지 않음)
$ mkdir -p $HOME/.kube

# Kubernetes 클러스터의 관리자 구성 파일인 admin.conf을
#	사용자의 홈 디렉터리에 있는 .kube/config로 복사
#	덮어쓰기가 필요한 경우 사용자에게 물어봄[-i(--interactive) 옵션]
$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

# 새로 생성, 복사된 config 파일 소유자를 현재 사용자와 사용자의 그룹으로 변경
$ chown $(id -u):$(id -g) $HOME/.kube/config

pod 네트워크(calico) 설치

$ kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.25.1/calico.yaml
$ kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.25.1/calico-custom.yaml

Master에서 Pod를 생성할 수 있도록 설정

$ kubectl taint nodes k8s-master node-role.kubernetes.io/control-plane-

kubectl 자동완성 편의기능 추가

# kubectl 명령어에 대한 자동완성 기능 활성화
$ echo "source <(kubectl completion bash)" >> ~/.bashrc

# k 관련 키워드에 kubectl 추가
$ echo 'alias k=kubectl' >>~/.bashrc

# k 누르고 탭치면 kubectl 자동완성 제안!
$ echo 'complete -o default -F __start_kubectl k' >>~/.bashrc

# 변경 사항 현재 세션에 적용
$ source ~/.bashrc

쿠버네티스 대시보드 설치와 메트릭스 서버 설치

쿠버네티스 대시보드 설치

  • 쿠버네티스 대시보드는 쿠버네티스 클러스터의 시각화 및 모니터링을 위한 웹 기반 UI 도구입니다!
$ kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/dashboard-2.7.0/dashboard.yaml

쿠버네티스 메트릭스 서버 설치

  • 쿠버네티스 메트릭스 서버는 클러스터 내에서 발생하는 리소스 사용 데이터를 수집하고 저장하는 역할을 수행합니다!
$ kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/metrics-server-0.6.3/metrics-server.yaml

쿠버네티스 대시보드 접속

  • 'https://192.168.64.30:30000/#/login'을 주소창에 입력하고 접속하면 아래와 같이 나오는데, 좌측 하단에 고급을 누르고 '안전하지 않음으로 이동'을 클릭합니다.

  • 아래 화면에서 생략을 누릅니다.

  • Login Skip Mode 설정과 NodePort:30000이 적용된 yaml파일을 통해 쿠버네티스 대시보드를 설치했으므로 생략이 가능합니다.
  • 좌측 상단의 default를 '모든 네임스페이스'로 바꿔줍니다.

  • 대시보드 구경하기!

이렇게 험난한 과정이 끝났습니다 🎉🎉🎉🎉🎉

느낀점

강의를 수강하며, 이제껏 구성했던 실습 환경중에 가장 복잡했습니다..😂

쿠버네티스 클러스터 통신 설정까지는 할 만하다 생각했는데, 파드 네트워크 설치부터 쿠버네티스 대시보드 설치, 메트릭스 서버 설치 까지는 강사님이 커스텀 yaml 파일을 제공하지 않았으면 한참 헤맸을 것 같다는 생각이 들구용😢

명령어를 단순히 복사해서 붙여넣는 과정에서 끝나는 것이 아니라 이해하려고 하다보니(강조되고 반복되는 복붙은 저를 답답하게 만듭니다) 지난번 포스트에서 이번 포스트를 작성하기까지 시간이 생각보다 오래 흘렀어요...ㅎㅎ

시작이 반이라고 하잖아요? 이제 반 했으니까 나머지 반 하러 가보겠습니다!

참고자료

쿠버네티스 공식 문서
쿠버네티스 어나더 클래스 (지상편) - Sprint1
챗GPT

profile
계속 읽고 싶은 글을 쓰고 싶어요 ☺

0개의 댓글