
쿠버네티스 설치
진행 순서
- 도커 설치(컨테이너 런타임)
- k8s 설치
- k8s 클러스터 구성
- 컨트롤 노드 세팅
- 워커 노드 세팅
- 최종 확인
1. 도커 설치
쿠버네티스는 컨테이너들을 통합 관리하는 오케스트레이션 플랫폼이기 때문에 실행, 관리 등의 역활을 수행하는 컨테이너 런타임을 별도로 설치해야 한다.
쿠버네티스 설치에 앞서 도커를 설치하는 이유도, 도커의 컨테이너 런타임 기능인 Containerd를 쿠버네티스에서 사용하기 위해서이다.
최근에는 방향이 약간 달라졌는데, 쿠버네티스에서 무거운 도커를 사용하기 보다 containerd만 따로 사용한다거나 Cri-O와 같은 경량 컨테이너 런타임을 사용하는 방향으로 나아가고 있다. 쿠버네티스 1.20부터 도커는 더이상 기본 런타임으로 쿠버네티스에 포함되지 않으며, containerd와 같은 런타임을 사용하도록 권장하고 있다.
다만 본 프로젝트에서는 추후 웹 서비스 테스트를 도커이미지로 할 예정이어서 어차피 도커를 쓸 것이기 때문에 컨테이너 런타임으로 도커를 선택했다.(출처 :https://jbground.tistory.com/107)
# docker 설치
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release apt-transport-https
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Cgroup를 systemd로 설정
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
sudo systemctl restart docker
sudo systemctl enable docker
# 일반유저 Docker 사용
sudo usermod -aG docker $USER
sudo su - $USER
groups $USER
sudo apt-get install -y bash-completion
sudo curl https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker -o /etc/bash_completion.d/docker.sh
2. k8s 설치
# K8s 설치
# swap 해제
sudo swapoff -a
sudo sed -i '/\/swap.img/d' /etc/fstab
# 네트워크 설정
cat << EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
cat << EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
# Containerd config 수정
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/ SystemdCgroup = false/ SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
# K8s 설치
sudo apt-get update
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
echo 'source <(kubectl completion bash)' >>~/.bashrc
kubectl completion bash >/etc/bash_completion.d/kubectl
3. k8s 클러스터 구성
컨트롤 노드 세팅
MASTER_IP=`hostname -I | awk '{print $1}'`
echo $MASTER_IP
sudo kubeadm init --apiserver-advertise-address="${MASTER_IP}" --pod-network-cidr "10.244.0.0/16"
# 사용자 인증 설정
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# CNI 구성
curl -sSL https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico.yaml | kubectl apply -f -
워커 노드 세팅
sudo kubeadm join <Control Node IP>:6443 --token <Token> \
--discovery-token-ca-cert-hash <Hash>
ex)sudo kubeadm join 192.168.1.192:6443 --token wpqn43.mn2mnm56mgzijgrb \
--discovery-token-ca-cert-hash sha256:a12554e8f2be45d7329b252dfa9035c54afe98ca09e2df631ae7e452c889a243
4. 최종 확인

kubespray를 이용해서 앤서블을 활용해 쿠버네티스 클러스터를 편하게 설치할 수 있다.
앤서블을 이용하기 때문에 클러스터 형성을 위해 일일히 노드마다 설치를 할 필요가 없다는 장점이 있지만, 둘 다 해본 입장에서 kubeadm을 이용하는 방법이 훨씬 빠르다.
kubespray를 이용할 경우 최소 30분 이상시간이 걸렸었는데, kubeadm을 이용할 경우 처음에만 좀 복잡하지 10분 정도면 설치가 다 된다.
만약 kubeadm에서 calico네트워크를 이용했을 때, calico-node가 제대로 만들어지지 않거나 kube-proxy가 0/1 등의 경우 노드간 통신에 문제가 있을 수 있으니 네트워크 설정을 확인해서 모든 노드가 서로 통신이 되는지 확인해야 한다.
클라우드 네이티브 환경으로 IT 인프라를 구축하기 위해서 k8s 클러스터가 가장 기초가 되기 때문에 꼭 클러스터가 정상적으로 구성되었는지 확인해야한다.
'DevOps & SRE 엔지니어 부트캠프 > 프로젝트 진행' 카테고리의 다른 글
[프로젝트] Ceph Storage 트러블 슈팅 (0) | 2024.10.21 |
---|---|
[프로젝트] Ceph Stroage (0) | 2024.10.21 |
[프로젝트] 가상머신 만들기 (3) | 2024.10.15 |