DevOps

Kubernetes 구축하기

22jaeho 2024. 5. 24. 17:58

환경 및 설치 버전

  • Server : PJTL2M01
  • OS : Ubuntu 22.04.2 LTS
  • kubernetes version : 1.29.5
  • containerd version : 1.6.32
  • crictl : v1.28.0
  1. 시스템 업데이트 및 필수 패키지 설치
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release

 

Docker GPG 키 추가 및 Docker 저장소 설정

sudo mkdir -p /etc/apt/keyrings
curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo \\
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] <https://download.docker.com/linux/ubuntu> \\
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

 

 

Containerd 설치 및 설정

# 설치
sudo apt-get update
sudo apt-get install -y containerd.io=1.7.2-1

# 설정
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml  

# 재시작
sudo systemctl restart containerd
sudo systemctl enable containerd

# 버전 확인
containerd --version

 

 

Kubernetes 설치

패키지 설치 시 에러가 발생해 방법2. 바이너리 다운로드 후 설치

 

방법1. 패키지 설치

# kubernetes 패키지 저장소 추가
curl -s <https://packages.cloud.google.com/apt/doc/apt-key.gpg> | sudo apt-key add -
echo "deb <https://apt.kubernetes.io/> kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

# Kubernetes 1.29.5 버전을 설치
sudo apt-get install -y kubelet=1.29.5-00 kubeadm=1.29.5-00 kubectl=1.29.5-00
sudo apt-mark hold kubelet kubeadm kubectl

# containerd를 컨테이너 런타임으로 사용하는 클러스터를 초기화
sudo kubeadm init --pod-network-cidr=192.168.0.0/16 --cri-socket /run/containerd/containerd.sock --kubernetes-version 1.29.5

 

방법2. 바이너리 설치

cd /usr/local/bin

# kubeadm 다운로드
sudo curl -LO "<https://dl.k8s.io/release/v1.29.5/bin/linux/amd64/kubeadm>"

# kubectl 다운로드
sudo curl -LO "<https://dl.k8s.io/release/v1.29.5/bin/linux/amd64/kubectl>"

# kubelet 다운로드
sudo curl -LO "<https://dl.k8s.io/release/v1.29.5/bin/linux/amd64/kubelet>"

# 실행 권한 부여
sudo chmod +x kubeadm kubectl kubelet
# kubelet 서비스 파일 생성
sudo mkdir -p /etc/systemd/system/kubelet.service.d

cat <https://kubernetes.io/docs/
After=network-online.target

[Service]
ExecStart=/usr/local/bin/kubelet
Restart=always
StartLimitInterval=0
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF
# kubelet 환경 설정 파일 생성
cat <<EOF | sudo tee /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
ExecStart=
ExecStart=/usr/local/bin/kubelet \\$KUBELET_KUBECONFIG_ARGS \\$KUBELET_CONFIG_ARGS \\$KUBELET_EXTRA_ARGS
EOF
# 시스템 데몬 리로드 및 kubelet 시작
sudo systemctl daemon-reload
sudo systemctl enable kubelet
sudo systemctl start kubelet

# 설치 확인
kubeadm version
kubectl version --client
kubelet --version

 

kubeamd 설정 및 클러스터 초기화

# crictl 설치
# 컨테이너 런타임 인터페이스(CRI)를 위한 명령어 도구

VERSION="v1.28.0" # 최신 버전으로 변경
wget <https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz>

sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
crictl --version
# conntrack 설치
# 네트워크 연결 추적을 위한 도구
sudo apt-get install -y conntrack
# socat 설치
# 네트워크와 파일 간의 이중 통신을 제공하는 도구
sudo apt-get install -y socat
# 커널 파라미터를 설정
sudo modprobe br_netfilter
echo '1' | sudo tee /proc/sys/net/bridge/bridge-nf-call-iptables
echo '1' | sudo tee /proc/sys/net/ipv4/ip_forward

# swap 비활성화
sudo swapoff -a
# Kubernetes 클러스터 초기화
sudo kubeadm init --token-ttl 0 --pod-network-cidr=192.168.0.0/16 --cri-socket unix:///run/containerd/containerd.sock

 

kubeconfig 설정

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

 

네트워크 플러그인 설치

# Calico
kubectl apply -f <https://docs.projectcalico.org/v3.25/manifests/calico.yaml>

 

Worker join

# worker join, worker node에서 실행
kubeadm join 192.168.1.151:6443 --token h27exl.6jcxa4k6fumy3vku \\
        --discovery-token-ca-cert-hash sha256:22396246ac6d5b907651b24157fda3e37c2d7c5d70822047fec36b7625ce2dee

 

댓글수0