일프로 미션1 설치 점검하기

쿠버네티스 무게감 있게 설치하는 방법 1/2


[1-1] 내 PC 네트워크 확인

윈도우 > 실행 > cmd 입력 > 확인

c:\사용자>ipconfig

image

[1-2] 내 PC 자원 확인

윈도우 하단 상태바 우클릭 > 작업관리자 > 성능 탭

image

[1-3] VirtualBox 설치 버전 확인

Virtualbox 실행 > 도움말 > Virtualbox 정보

[FAQ] : https://cafe.naver.com/kubeops/25

image

[1-4] Vagrant 설치 버전 확인

윈도우 > 실행 > cmd 입력 > 확인

c:\사용자>vagrant --version

[FAQ] : https://cafe.naver.com/kubeops/26

image

[1-5] 원격접속(MobaXterm) 설치 버전 확인

MobaXterm 실행 > Help > About MobaXterm

image


[2-1] VirtualBox VM 확인

Virtualbox 실행 > VM Name 확인

네이밍 : <Vagrant 폴더명>_<VM Name>_<ramdom>

image

[2-2] 내 VM에 적용된 NAT 확인

Virtualbox 실행 > k8s_master-node 마우스 우클릭 > 설정 > 네트워크 > 어댑터 1

image

[2-3] 내 VM에 적용된 Host-Only Network 확인

Virtualbox 실행 > k8s_master-node 마우스 우클릭 > 설정 > 네트워크 > 어댑터 2

image

[2-4] VirtualBox Host-Only cidr 확인

파일 > 도구 > Network Manager

[FAQ] : https://cafe.naver.com/kubeops/27

image


[3-1] Rocky Linux 버전 확인

k8s-master 원격접속 후 명령어 실행

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

실행 결과

image

[3-2] Hostname 확인

k8s-master 원격접속 후 명령어 실행

[root@k8s-master ~]# hostname

실행 결과

image

[3-3], [3-4] Network 확인

k8s-master 원격접속 후 명령어 실행

[root@k8s-master ~]# ip addr

실행 결과

image

[3-5] 자원(cpu, memory) 확인

k8s-master 원격접속 후 명령어 실행

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

실행 결과

image

[4] Rocky Linux 기본 설정

패키지 업데이트 진행

[update 25.01.02] 강의와 동일한 실습 환경을 유지하기 위해 Linux Update는 하지 않습니다.


타임존 설정 확인

(스크립트로 적용된 명령: timedatectl set-timezone Asia/Seoul) - 중복 실행할 필요는 없습니다.

[root@k8s-master ~]# timedatectl

실행 결과

image

[5] kubeadm 설치 전 사전작업

방화벽 해제 확인

(스크립트로 적용된 명령: systemctl stop firewalld && systemctl disable firewalld) - 중복 실행할 필요는 없습니다.

[root@k8s-master ~]# systemctl status firewalld

실행 결과

image


스왑(swap) 비활성화 확인

(스크립트로 적용된 명령: swapoff -a && sed -i '/ swap / s/^/#/' /etc/fstab) - 중복 실행할 필요는 없습니다.

[root@k8s-master ~]# free [root@k8s-master ~]# cat /etc/fstab | grep swap

실행 결과

image

Swap에 할당된 자원이 없어야함

# <- 주석 처리가 잘 됐는지

[Kubernetes Docs] : https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-%EC%A0%84%EC%97%90

[6] 컨테이너 런타임 설치

[6-1] 컨테이너 런타임 설치 전 사전작업

iptables 세팅

# 설정 세팅 확인

[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

실행 결과

image

[Kubernetes Docs] : https://kubernetes.io/ko/docs/setup/production-environment/container-runtimes/#ipv4%EB%A5%BC-%ED%8F%AC%EC%9B%8C%EB%94%A9%ED%95%98%EC%97%AC-iptables%EA%B0%80-%EB%B8%8C%EB%A6%AC%EC%A7%80%EB%90%9C-%ED%8A%B8%EB%9E%98%ED%94%BD%EC%9D%84-%EB%B3%B4%EA%B2%8C-%ED%95%98%EA%B8%B0

[6-2] 컨테이너 런타임 (containerd 설치)

[Kubernetes Docs] : https://kubernetes.io/ko/docs/setup/production-environment/container-runtimes/#containerd

[Containerd Release] : https://github.com/containerd/containerd/blob/main/RELEASES.md#kubernetes-support

[6-2-1] containerd 패키지 설치 (option2)

[Containerd Docs] : https://github.com/containerd/containerd/blob/main/docs/getting-started.md#option-2-from-apt-get-or-dnf

[6-2-1-1] docker engine (containerd.io)만 설치

docker repo 설정 확인

(스크립트로 적용된 명령: yum install -y yum-utils, yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo)

[root@k8s-master ~]# yum repolist enabled

실행 결과

image

[Docker Docs] : https://docs.docker.com/engine/install/centos/#install-using-the-repository


containerd 설치 확인

(스크립트로 이미 적용된 명령: yum install -y containerd.io-1.6.21-3.1.el8) - 중복실행은 하지마세요!

[root@k8s-master ~]# systemctl status containerd

실행 결과

image

-> 확인 후 [ctrl + c]로 빠져나오기

[Docker Docs] : https://docs.docker.com/engine/install/centos/#install-using-the-repository


설치 가능한 버전의 containerd.io 리스트 확인

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

실행 결과

image

[6-3] 컨테이너 런타임 (CRI활성화)

* 쿠버네티스 문서에 Kubelet의 Cgroup의 Default가 cgroupfs라고 말씀 드렸는데, 레드햇 계열 리눅스의 경우 systemd를 메인으로 프로세스를 실행시키는 시스템이기 때문에, 쿠버네티스 설치시Default systemd가 세팅됩니다. 이 경우 containerd도 systemd로 변경하여 모두 systemd를 쓰는게 Core 사용에 부담이 없습니다.

cri 활성화 설정 확인

(스크립트로 이미 적용된 명령: containerd config default > /etc/containerd/config.toml; sed -i 's/ SystemdCgroup = false/ SystemdCgroup = true/' /etc/containerd/config.toml) - 중복실행은 하지마세요!

[root@k8s-master ~]# cat /etc/containerd/config.toml

실행 결과 :

image

* false 일 경우 cgroupfs

kubelet cgroup 확인 (configmap)

[root@k8s-master ~]# kubectl get -n kube-system cm kubelet-config -o yaml

실행 결과 :

image

kubelet cgroup 확인 (kubelet)

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

실행 결과 :

image

* kubelet에서 cgroup 수정 필요시 적용 방법

// 아래 두 군데에서 cgroupDriver를 systemd 혹은 cgroupfs로 변경

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

[root@k8s-master ~]# kubectl edit -n kube-system cm kubelet-config

[root@k8s-master ~]# systemctl restart kubelet

[Kubernetes Docs] : https://kubernetes.io/ko/docs/setup/production-environment/container-runtimes/#containerd

[7] kubeadm 설치

repo 설정 확인

[root@k8s-master ~]# yum repolist enabled

실행 결과

image

[Kubernetes Docs] : https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#kubeadm-kubelet-%EB%B0%8F-kubectl-%EC%84%A4%EC%B9%98


SELinux 설정 확인

[root@k8s-master ~]# cat /etc/selinux/config

[root@k8s-master ~]# sestatus

실행 결과

image


kubelet, kubeadm, kubectl 패키지 설치

(스크립트로 이미 적용된 명령: yum install -y kubelet-1.27.2-150500.1.1.x86_64 kubeadm-1.27.2-150500.1.1.x86_64 kubectl-1.27.2-150500.1.1.x86_64 --disableexcludes=kubernetes) - 중복실행은 하지 마세요!

#버전 보기

[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

#로그 조회

[root@k8s-master ~]# journalctl -u kubelet | tail -10

실행 결과

image

-> 확인 후 [ctrl + c]로 빠져나오기

* stop 상태일 때는 아래 명령으로 올리기

[root@k8s-master ~]# systemctl restart kubelet


설치 가능한 버전의 kubeadm 리스트 확인

[root@k8s-master ~]# yum list --showduplicates kubeadm --disableexcludes=kubernetes

실행 결과

image


[8] kubeadm으로 클러스터 생성

[Kubernetes Docs] : https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

[8-1] 클러스터 초기화 (Pod Network 세팅)

클러스터 상태 확인

(스크립트로 이미 적용된 명령: kubeadm init --pod-network-cidr=20.96.0.0/12 --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

실행 결과 :

image

[Kubernetes Docs] : https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#initializing-your-control-plane-node

* Cluster가 정상이 아닐 때는 아래 명령으로 reset후 다시 init 해주기.

* reset 실행 후 1분 정도 시간이 지난 후에 init을 해주세요.

[root@k8s-master ~]# kubeadm reset

[root@k8s-master ~]# kubeadm init --pod-network-cidr=20.96.0.0/12--apiserver-advertise-address 192.168.56.30

[8-2] kubectl 사용 설정

인증서 설정 확인

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

실행 결과 :

image

[Kubernetes Docs] : https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#more-information

[8-3] CNI Plugin 설치 (calico)

calico pod 설치 및 pod network cidr 적용 확인

# 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

실행 결과 :

image

[Calico Docs] : https://docs.tigera.io/calico/latest/getting-started/kubernetes/self-managed-onprem/onpremises#install-calico

* Calico 설치가 정상이 아닐 때 (Calico가 CrashLoopBackOff 상태고, coredns가 가 Pending 상태)

#Calico 삭제

[root@k8s-master ~]# kubectl delete-f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.26.4/calico.yaml

[root@k8s-master ~]# kubectl delete-f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.26.4/calico-custom.yaml

#Calico 재설치

[root@k8s-master ~]# kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.26.4/calico.yaml

[root@k8s-master ~]# kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.26.4/calico-custom.yaml

[8-4] Master에 pod를 생성 할 수 있도록 설정

Master Node에 Taint 해제 확인

(스크립트로 이미 적용된 명령: kubectl taint nodes k8s-master node-role.kubernetes.io/control-plane- )

[root@k8s-master ~]# kubectl describe nodes | grep Taints

실행 결과 :

image

[Kubernetes Docs] : https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#control-plane-node-isolation

[9] 쿠버네티스 편의 기능 설치

[9-1] kubectl 자동완성 기능

kubectl 기능 설정 확인

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

실행 결과 :

image

[kubectl Cheat Sheet] : https://kubernetes.io/docs/reference/kubectl/cheatsheet/

[9-2] Dashboard 설치

dashboard 설치 확인

[root@k8s-master ~]# kubectl get pod -n kubernetes-dashboard

실행 결과 :

image

[kubernetes dashboard] : https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/

※ 문제시 관련 FAQ : https://cafe.naver.com/kubeops/22

[9-3] Metrics Server 설치

metrics server 설치 확인

[root@k8s-master ~]# kubectl get pod -n kube-system | grep metrics

[root@k8s-master ~]# kubectl top pod -A

실행 결과 :

image

[kubernetes Metrics Server : https://github.com/kubernetes-sigs/metrics-server

* 설치 후 kubectl top pod -A 명령시 error: Metrics API not available 메세지가 나올때

최초 설치시 / VM 재기동시 매트릭 정보가 수집되는데 시간이 좀 걸릴 수 있습니다.

댓글을 작성해보세요.

채널톡 아이콘