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
- 시스템 업데이트 및 필수 패키지 설치
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