쿠버네티스

Kubernetes 설치

황동리 2024. 1. 8. 19:59
반응형

용량: 25GB
Core: 2Core
Ram: 2GB

 

 

 

 


ssh, curl, vim, tree 등의 패키지 설치

sudo apt-get update
sudo apt-get install -y openssh-server curl vim tree

 

hostname 및 hosts 파일 변경

vi /etc/hostname
	master

vi /etc/hosts
	10.100.0.105	master.example.com
    10.100.0.106	work1.example.com
    10.100.0.107	work2.example.com


docker 설치 및 확인

sudo apt install -y docker.io
sudo docker version

쿠버네티스 설치

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

1. 쿠버네티스 클러스터를 구성하기전 요구사항 확인
 - CPU 2 Core 이상, Memory 2GB 이상
 - 모든 노드에 대한 호스트 이름, MAC 주소 및 UUID

2. kubelet 의 적절한 동작을 위해서 swap을 사용하지 않는다. 
# swapon && cat /etc/fstab 
# swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab

3. SELinux 와 방화벽을 해제한다. 
# apt install -y selinux-utils
# setenforce  0 
# ufw disable 
# systemctl stop firewalld 
# systemctl disable firewalld 

4. Linux 노드의 iptables가 bridged traffic을 정확하게 확인하고 제어 할 수 있도록 br_netfilter 모듈을 load하고 관련된 네트워크 파라미터를 설정한다. 

4-1) br_netfilter 모듈 load 
# lsmod | grep br_netfilter
# modprobe br_netfilter
# lsmod | grep br_netfilter
	br_netfilter           24576  0
	bridge                155648  1 br_netfilter

4-2) 모듈과 네트워크 파라미터가 영구적으로 적재되도록 파일에 편집 
# cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
> br_netfilter
> EOF

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

# sysctl --system

4-3) 네트워크 파라미터 정보 변경 사항 확인
# sysctl net.bridge.bridge-nf-call-iptables
	net.bridge.bridge-nf-call-iptables = 1
# sysctl net.bridge.bridge-nf-call-ip6tables
	net.bridge.bridge-nf-call-ip6tables = 1

5. kubeadm, kubelet, kubectl 설치

5-1) apt 패키지 업데이트 및 쿠버네티스 설치하는데 필요한 패키지 다운로드
# apt-get update
# apt-get install -y apt-transport-https ca-certificates

5-2) kubernetes 패키지 저장소의 공개 서명 키 다운로드
(참고, Ubuntu 22.04 이전 버전에서는 /etc/apt/keyrings 디렉터리가 없으므로 생성해줄 것)
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

5-3) apt 리포지토리에 쿠버네티스 관련 패키지 설치 할 수 있도록 레포지토리 추가
# echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

5-4) 패키지 인덱스 업데이트 후 kubelet, kubeadm, kubectl 설치
# apt-get update
# apt-get install -y kubelet kubeadm kubectl
# apt-mark hold kubelet kubeadm kubectl

6. 컨테이너 런타임과 kubelet에 의해서 제어할 수 있도록 구성
# cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

# systemctl enable docker
# systemctl daemon-reload
# systemctl restart docker

--------------------------------------------------------------------
7. (마스터 노드에서만 실행) 클러스터 생성
# kubeadmin init

7-1. (마스터 노드에서만 실행)
# mkdir -p $HOME/.kube
# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# chown $(id -u):$(id -g) $HOME/.kube/config

7-2. (마스터 노드에서만 실행) 쿠버네티스 클러스터에 조인하기 위해 명령어 구문 저장
# vim token.sh
	kubeadm join 192.168.137.101:6443 --token k73e80.otf7kbdnbxvc9qvk \
        --discovery-token-ca-cert-hash sha256:76507fe082ede68174b6e324f3c72dd0bfd70b78a186c7b46efa26fbf893fd74

7-3. (마스터 노드에서만 실행) Pod가 서로 통신 할 수 있도록 CNI(Container Network Interface) 기반 Pod 네트워크 추가 기능 구성
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
-----------------------------------------------------------------------
8. (워커 노드에서 실행) 쿠버네티스 클러스터에 work노드로 등록
 - 마스터 노드에서 저장한 token.sh을 work노드에서 실행
# sh token.sh
-----------------------------------------------------------------------
9. kubectl 자동명령어 실행 스크립트 
# echo "source <(kubectl completion bash)" >>~/.bashrc
# source <(kubectl completion bash)

 

 

감사합니다.

 

반응형