1-1. 쿠버네티스 무게감 있게 설치하기 > 구간별 상태 확인 [미션 1]

Yoony·2025년 6월 1일
0
post-thumbnail

MAC OS에서 UTM을 통해 Rocky Linux OS 위에 VM을 만들고 내부 IP를 할당하여 원격 접속을 진행한다.

Rocky Linux 버전 확인

[root@k8s-master ~]# cat /etc/*-release

Hostname 확인

[root@k8s-master ~]# hostname

Network 확인

[root@k8s-master ~]# ip addr

자원(cpu, memory) 확인

[root@k8s-master ~]# lscpu
[root@k8s-master ~]# free -h


Rocky linux 기본 설정

[root@k8s-master ~]# timedatectl

Kubeadm 설치 전 사전작업

  1. 방화벽 해제 확인
[root@k8s-master ~]# systemctl status firewalld

  1. 스왑 비활성화 확인(Swap에 할당된 자원이 없으며 주석 처리 확인)
[root@k8s-master ~]# free
[root@k8s-master ~]# cat /etc/fstab | grep swap

컨테이너 런타임 설치

컨테이너 런타임 설치 전 사전작업 - istables 세팅

# 설정 세팅 확인
[root@k8s-master ~]# cat /etc/modules-load.d/k8s.conf
[root@k8s-master ~]# cat /etc/sysctl.d/k8s.conf
# 모듈 적제 확인
[root@k8s-master ~]# lsmod | grep overlay
[root@k8s-master ~]# lsmod | grep br_netfilter

컨테이너 런타임 설치

  1. 컨테이너 런타임 설치(containerd 설치)
  1. containerd 패키지 설치(option2)
  1. docker engine (containerd.io)만 설치
  • docker repo 설정 확인
[root@k8s-master ~]# yum repolist enabled

  • containerd 설치 확인
[root@k8s-master ~]# systemctl status containerd

[root@k8s-master ~]# yum list containerd.io --showduplicates | sort -r

컨테이너 런타임 CRI 활성화

Kublet의 Cgroup의 default가 cgroupfs 입니다. 하지만 레드헷 계열 리눅스(Rocky linux)의 경우 systemd를 메인으로 프로세스를 실행시키는 시스템이기 때문에, 쿠버네티스 설치 시 default로 systemd가 세팅됩니다. 따라서 컨테이너 런타임의 cgroup 드라이버와 동일해야 하기때문에 containerd도 systemd로 변경하여 쓰는 게 Core 사용에 부담이 없다.

  1. CRI 활성화 설정 확인
[root@k8s-master ~]# cat /etc/containerd/config.toml

SystemdCgroup을 true로 설정해주어야 한다. false일 경우 cgroupfs를 쓴다.

  1. Kublet cgroup 확인
[root@k8s-master ~]# cat /etc/containerd/config.toml

[root@k8s-master ~]# cat /var/lib/kubelet/config.yaml

Kubeadm 설치

  1. repo 설정 확인
[root@k8s-master ~]# yum repolist enabled

  1. SELinux 설정 확인
[root@k8s-master ~]# cat /etc/selinux/config
[root@k8s-master ~]# sestatus

  1. kubelet, kubeadm, kubectl 패키지 설치
#버전 보기
[root@k8s-master ~]# kubeadm version
[root@k8s-master ~]# kubectl version

#상태 보기
[root@k8s-master ~]# systemctl status kubelet

#설정 파일 위치
[root@k8s-master ~]# cat /var/lib/kubelet/config.yaml

#로그 조회
 journalctl -u kubelet | tail -10

클러스터 초기화(Pod network 세팅)

kubeadm init --pod-network-cidr=20.96.0.0/16 --apiserver-advertise-address 192.168.56.30

클러스터 상태 확인

# master node 상태확인
[root@k8s-master ~]# kubectl get node

# pod network cidr 설정 확인
[root@k8s-master ~]# kubectl cluster-info dump | grep -m 1 cluster-cidr

# apiserver advertise address 적용 확인
[root@k8s-master ~]# kubectl cluster-info

# kubernetes component pod 확인
[root@k8s-master ~]# kubectl get pods -n kube-system

  1. 마스터 노드 1개만 있고, 정상적으로 클러스터 구성이 완료 상태인 걸 알 수 있어요. 만약 Pod 네트워크가 없는 상태라면 노드의 상태는 NotReady 상태일 거예요. 'control-plane'은 마스터 노드 역할을 의미해요. 그리고 노드가 클러스터에 포함된 시간은 161분이네요. v1.27.2는 쿠버네티스의 버전입니다.
  2. 'cluster-cidr'은 Pod 네트워크에 할당된 IP 주소의 범위예요. 이 CIDR 블록은 각 pod에게 IP를 분배하는 풀(pool)이고 20.96.0.0/16은 약 6만 개 이상의 Pod IP를 할당할 수 있는 대역이에요. CNI 플러그인이 이 범위를 기반으로 네트워크를 구성하고 Pod에 IP를 자동으로 부여합니다.
  3. 'kubenetes control plane is running at https://192.168.56.30:6443' 이 주소는 클러스터의 API 주소예요. 모든 kubectl 명령어는 이 API 서버에 REST API를 날려서 작동해요. 즉 쿠버네티스의 두뇌가 여기서 작동 중이라는 뜻!
  4. 'CoreDNS is running at https://.../services/kube-dns:dns/proxy' CoreDNS는 쿠버네티스 내부의 DNS 역할을 해요.
  5. 추가로... 6443 포트를 쓰는 이유는 쿠버네티스 API 서버의 기본 HTTPS 포트(보안 통신), Pod IP는 클러스터를 초기화할 때 설정한 'cluster-cidr'에 따라 CNI 플러그인이 Pod 생성 시 자동으로 설정, CoreDNS가 있어야 Pod 간에 서비스 이름 기반 통신이 가능해요!

kubectl 사용 설정

[root@k8s-master ~]# cat ~/.kube/config

CNI 플러그인 설치(calico)

# Calico Pod 상태 확인
[root@k8s-master ~]# kubectl get -n calico-system pod
[root@k8s-master ~]# kubectl get -n calico-apiserver pod

# Calico에 pod network cidr 적용 확인
[root@k8s-master ~]# kubectl get installations.operator.tigera.io default -o yaml  | grep cidr

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

  • 원래 pod는 master node에 만들지 않고 보통 worker node에 만들기 때문에 실습을 위해 master nodedp traint 해제를 확인합니다.

대시보드 설치 확인

kubectl get pod -n kubernetes-dashboard

Mac에서 대시보드에 접속하기 위해서 대시보드용 관리자 계정을 만들고 Bearer token(Kubernetes 클러스터에서 대시보드에 로그인할 수 있는 사용자 권한을 가진 인증 토큰)을 발급받아 로그인 했다.
토큰 확인: kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
https://192.168.56.30:30000/#/login

  • chrome 접속 시 거부 화면에서 아무데나 클릭하고 thisisunsafe로 인증하면 우회된다.
profile
Software Quality Engineer

0개의 댓글