본문 바로가기

프로그래밍/kubernetes

[쿠버네티스 어나더 클래스 (지상편) - Sprint 1] - 구간별 상태 확인 (2/2)

728x90
반응형

개요  

inflearn - 쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2 의 학습내용을 복습하는 용도로 작성하고자 하며

내용이 추가 되거나 변경될 수 있음.


구간별 상태 확인 (2)

 

4. rocky linux 기본 설정

1) 패키지 업데이트 실행(강의와 동일한 실습 환경을 위해 업데이트는 실행하지 않음)

2) 타임존 설정 확인

  • 스크립트
timedatectl set-timezone Asia/Seoul
  • 중복 실행할 필요 없음

 

 

 

5. kubeadm 설치 전 사전작업

1) 방화벽 해제 확인

 

[root@k8s-master ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
  • 스크립트
systemctl stop firewalld && systemctl disable firewalld
  • 중복 실행할 필요 없음

2) 스왑(swap) 비활성화 확인 

[root@k8s-master ~]# free
              total        used        free      shared  buff/cache   available
Mem:        6063276     1690380      434788       28020     3938108     4063728
Swap:             0           0           0
  • Swap 에 할당된 자원이 없어야 함
[root@k8s-master ~]# cat /etc/fstab | grep swap
#/swapfile none swap defaults 0 0
  • 주석 처리(#) 가 잘 되어 있는지 확인

 

[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

 

kubeadm 설치하기

이 페이지에서는 kubeadm 툴박스 설치 방법을 보여준다. 이 설치 프로세스를 수행한 후 kubeadm으로 클러스터를 만드는 방법에 대한 자세한 내용은 kubeadm으로 클러스터 생성하기 페이지를 참고한다.

kubernetes.io

 

6. 컨테이너 런타임 설치

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

1) iptables 세팅

▷ 설정 세팅 확인

[root@k8s-master ~]# cat /etc/modules-load.d/k8s.conf
overlay
br_netfilter

[root@k8s-master ~]# cat /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1

 

모듈 적재 확인

[root@k8s-master ~]# lsmod | grep overlay
overlay               139264  35

[root@k8s-master ~]# lsmod | grep br_netfilter
br_netfilter           24576  0
bridge                290816  1 br_netfilter

 

 

[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

 

컨테이너 런타임

참고: Dockershim은 쿠버네티스 릴리스 1.24부터 쿠버네티스 프로젝트에서 제거되었다. 더 자세한 내용은 Dockershim 제거 FAQ를 참고한다. 파드가 노드에서 실행될 수 있도록 클러스터의 각 노드에 컨

kubernetes.io

 

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

  • 스크립트상 적용된 명령(중복실행 금지)
yum install -y containerd.io-1.6.21-3.1.el8

[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

 

containerd/RELEASES.md at main · containerd/containerd

An open and reliable container runtime. Contribute to containerd/containerd development by creating an account on GitHub.

github.com

 

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)만 설치

  • 스크립트
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

 

 

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

 

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

 

 

[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

 

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

cri 활성화 설정 확인

  • 스크립트
# default cgroupfs에서 systemd로 변경 (kubernetes default는 systemd)
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

 

* false 일 경우 cgroupfs

kubelet cgroup 확인 (configmap)

[root@k8s-master ~]# kubectl get -n kube-system cm kubelet-config -o yaml
[root@k8s-master ~]# cat /var/lib/kubelet/config.yaml
 
 
 

 kubelet cgroup 확인 (kubelet)

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

 

 

* 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

 

[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

 

 

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

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

 

 

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

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

 

 

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

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

 

8. kubeadm으로 클러스터 생성

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

 

 

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

 클러스터 상태 확인

  • vagrant 스크립트
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

 

[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

 

 

[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

 

 

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

 

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

 

#Calico 삭제 
kubectl delete -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.26.4/calico.yaml
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

 

 

[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

 

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

 

 

9-2. Dashboard 설치

▷ dashboard 설치 확인

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

 

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

 

 

[9-3] Metrics Server 설치

metrics server 설치 확인

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

 

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

728x90
반응형