본문 바로가기
Data Engineering/docker, kubernetes(k8s)

Kubernetes 설치 및 설정 Code 분석, Pod 생명주기, 기본 명령어

by EverReal 2024. 12. 17.

Kubernetes 설치 및 설정 Code 분석, Pod 생명주기, 기본 명령어

 

※ 「컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 - 길벗」를 참고하여 작성하였습니다.

 

쿠버네티스의 구조

 

쿠버네티스 구조에 대한 자세한 설명과 아키텍쳐는 *링크 를 통해 확인할 수 있다.

 

 

쿠버네티스 설치를 직접 VirtualBox를 복제해서 하나하나 생성하려다보니 생각보다 복잡하더군요..

그래서 이전에 하던 방식은 잡시 접어두고

다양한 실습을 위해 Vagrant로 서버를 셋팅해두고 이를 활용하는 방식을 사용했습니다.

 

아래는 Vagrant를 활용해서 셋팅했던 코드 중 일부입니다.

이 코드들은 쿠버네티스를 설치하는 데 주요한 코드들로 볼 수도 있습니다.

 

 


파드의 생명주기(Lifecycle of a Pod)

출처 : https://www.infracloud.io/blogs/kubernetes-pod-lifecycle/

 

 

 

 

 


P88) config.sh

 - 1번)

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF


브리지 네트워크를 통과하는 IPv4와 IPv6의 패킷을 iptables가 관리하도록 설정하는 Code

파드의 통신을 iptables로 제어한다. 필요에 따라 IPVS(IP Virtual Server) 같은 방식으로도 구성 가능

 

 - 2번)

modprobe br_netfilter

 

br_netfilter 커널 모듈을 사용해 브리지로 네트워크를 구성. 이 때 IP 카스커레이드(Masquerade)를 사용해 내부 네트워크와 외부 네트워크를 분리한다. 실제로는 br_netfilter를 적용함으로써 위의 1번 코드가 활성화된다.

*IP 마스커레이드 : 커널에서 제공하는 NAT(Network Address Translation) 기능.

 

 - 3번)

# config DNS  
cat <<EOF > /etc/resolv.conf
nameserver 1.1.1.1 #cloudflare DNS
nameserver 8.8.8.8 #Google DNS
EOF

 

외부와 통신할 수 있게 DNS 서버 지정

 

 

P90) install_pkg.sh

 - 1번)

# install kubernetes cluster  ($1에는 버전이 전달됨)
yum install kubectl-$1 kubelet-$1 kubeadm-$1 -y
systemctl enable --now kubelet

 

쿠버네티스 구성을 위한 kubectl, kubelet, kubeadm을 설치하고 kubelet을 시작

 

P91) master_node.sh

 - 1번)

#!/usr/bin/env bash

# init kubernetes 
kubeadm init --token 123456.1234567890123456 --token-ttl 0 \
--pod-network-cidr=172.16.0.0/16 --apiserver-advertise-address=192.168.1.10

 

kubeadm을 통해 쿠버네티스의 워커노드를 받아들일 준비를 한다.

(토큰을 123456.1234567890123456으로 지정하고 ttl(time to live, 유지시간)을 0으로 설정해서 기본값인 24시간 후에 토큰이 계속 유지되도록 한다. 또 워커 노드가 정해진 토큰으로 들어오게 한다.

쿠버네티스가 자동으로 컨테이너에 부여하는 네트워크를 172.16.0.0/16(172.16.0.1~172.16.255.254)으로 제공하고,

워커 노드가 접속하는 API 서버의 IP를 192.168.1.10으로 지정해서 워커 노드들이 자동으로 API서버에 연결되게 한다.

 

 - 2번)

# config for master node only 
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

 

 마스터노드에서 현재 사용자가 쿠버네티스를 정상적으로 구동할 수 있게 설정 파일을 루트의 홈 디렉터리(/root)에 복사하고 쿠버네티스를 이용할 사용자에게 권한을 준다.

 

 - 3번)

# config for kubernetes's network 
kubectl apply -f \
https://raw.githubusercontent.com/sysnet4admin/IaC/master/manifests/172.16_net_calico.yaml

 

컨테이너 네트워크 인터페이스(CNI)이니 캘리코(Calico)의 설정을 적용해 쿠버네티스의 네트워크를 구성한다.

 

P91) work_node.sh

 - 1번)

#!/usr/bin/env bash

# config for work_nodes only 
kubeadm join --token 123456.1234567890123456 \
             --discovery-token-unsafe-skip-ca-verification 192.168.1.10:6443

 

kubeadm을 이용해 쿠버네티스 마스터노드에 접속한다. 이 때 연결에 필요한 토큰은 기존에 마스터노드에서 생성한 123456.1234567890123456을 사용한다. 간단하게 구성하기 위해 --discovery-token-unsafe-skip-ca-verification으로 인증을 무시하고, API 서버 주소인 192.168.1.10으로 기본 포트 번호인 6443번 포트에 접속하도록 설정한다.

 



참고할 만한 사이트들

 

unable to locate package kubeadm 에러

 

unable to locate package kubeadm 에러

etc/apt/source.list 를 카카오서버로 바꿔줘도 인스톨이 안되길래 인터넷을 찾아봄아래와 같이 진행해주면 된다 참고로 6번라인은 5번에서 생성한 파일에 넣을 문자열임12345678910#firstcurl -s https://packa

vesselsdiary.tistory.com

 

 

[Kubernetes] kubeadm init 에러

 

[Kubernetes] kubeadm init 에러

kubelet 프로세스 실패

gain-yoo.github.io

 

 

[Redis + Kubernetes + MSA + Spring] MSA 아키텍처의 프로젝트를 쿠버네티스에서 운용할 때 캐시 적용 방법

 

[Redis + Kubernetes + MSA + Spring] MSA 아키텍처의 프로젝트를 쿠버네티스에서 운용할 때 캐시 적용 방법

현재 아키텍처에서는 쿠버네티스에 ArgoCD를 통해 Spring 프로젝트와 Redis가 같은 컨테이너 상에 위치하도록 배포하고 있다.이를 위해서는 배포하는 .yaml 파일에 같은 컨테이너 상에 위치하도록 하

velog.io

 

 

kubernetes 구축시 swap 메모리 off해야 하는 이유

 

kubernetes - swap off에 대하여

swap란 물리 메모리(RAM)의 용량 부족시 하드 디스크의 일부 공간을 메모리처럼 사용하는 것이다.이 동작은 swap in, swap out으로 구분할 수 있다.만약 메모리에 최대 100개의 프로세스가 실행될 수 있

velog.io

 

 

SELinux(Security-Enhanced Linux)란?

 

SELinux 간편 가이드: 개념, 설정 및 사용법

SELinux 개념과 시스템 액세스 권한을 제어하는 리눅스 보안 아키텍처를 이해하고, SELinux 설정 방법, 보안 확인 절차, 무료 다운로드 및 사용법을 알아보세요

www.redhat.com

SELinux(Security-Enhanced Linux)

 · 관리자가 시스템 액세스 권한을 효과적으로 제어할 수 있는 Linux® 시스템용보안 아키텍처

 · SELinux는 Linux 배포판에 내장된 시스템에 추가 보안 계층을 제공합니다. 

 · SELinux 활성화 :  /etc/selinux/config 편집 → SELINUX=permissive 설정

 

 

반응형

댓글