이 문서는 쿠버네티스(k8s) 구축에 대한 정보를 공유하기 위해 작성되었다.
Docker 설치
Docker Engine 설치를 위해 다음 절차를 따라 진행한다. 세부적인 가이드는 아래 링크를 참고한다.
- docs.docker.com 가이드 참조
저장소 설정
Docker 설치를 위해 먼저 apt 패키지를 업데이트한다.
sudo apt-get update sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release
Docker’s 공식 GPG key 추가하기 위해 다음 절차를 진행한다.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Stable repository 설정을 위해 다음 명령을 수행한다.
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Docker 엔진 설치
최신 버전의 Docker Engine 및 containerd를 설치하기 위해 다음 명령을 수행한다.
sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io
설치가 완료되면 Docker 버전 확인한다.
sudo docker version
설치된 버전
- Client: Docker Engine - Community
- Version: 20.10.13
- Server: Docker Engine - Community
- Version: 20.10.13
Docker를 서비스 등록 및 실행하기 위해 다음을 수행한다.
sudo systemctl enable docker sudo systemctl start docker
Kubernetes 설치
Docker 설치가 완료되었다면 kubernetes 설치를 진행한다. k8s는 kubeadmin을 통해 설치를 진행할 수 있다.
설치 전 확인 사항 (master, node)
각 노드들은 Swap Disable 해야하기 때문에 각 노드별로 다음 명령을 통해 설정한다.
swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab 혹은 sudo swapoff -a && sudo sed -i '/swap/s/^/#/' /etc/fstab
그리고 iptable 설정하기 위해 다음 명령을 수행한다.
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 sudo sysctl --system
통신을 위해 방화벽 예외 설정을 수행한다.
sudo systemctl stop firewalld sudo systemctl disable firewalld
다음과 같이 방화벽 설정 이후 포트가 오픈되어 있는지 확인한다.
telnet 127.0.0.1 6443
kubelet, kubeadm, kubectl 설치 (master, node)
쿠버네티스 설치를 진행하기위해 저장소 업데이트 및 필수 패키지 추가한다.
sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl
구글 클라우드 퍼블릭 키 다운로드를 수행한다.
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
쿠버네티스를 설치하기 위해 Kubernetes 저장소 추가한다.
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
저장소 업데이트 후 kubelet, kubeadm, kubectl 설치를 순차적으로 진행한다.
sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl
쿠버네티스를 서비스 등록 및 재시작을 수행한다.
sudo systemctl daemon-reload sudo systemctl restart kubelet
Control-plane 구성 (master only)
contol-plane 노드 초기화 - 해당 작업은 반드시 master에서만 진행한다.
kubeadm init
만약 초기화 진행중에 다음과 같은 에러가 발생가 발생한다면
failed with error: Get "http://localhost:10248/healthz"
해당 문제 해결책하기 위해 아래와 같이 daemon.json 생성 후에 kubeadm을 reset 후에 다시 init을 수행한다.
하위 작업은 node에도 수행 해준다.
sudo mkdir /etc/docker 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 enable docker sudo systemctl daemon-reload sudo systemctl restart docker kubeadm reset
최종적으로 아래와 같이 node가 접속할 때 사용하는 토큰이 발행된다.
kubeadm join 10.0.100.40:6443 --token zbgv72.v9ac8xhex128xjwp \ --discovery-token-ca-cert-hash sha256:2193f25bad65918edbc41b543e22327741bdd99748b1
모든 사용자가 kube 명령어를 사용할 수 있게 하기 위해 다음을 설정한다.
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
Pod network 애드온 설치 (master only)
Pod 간의 네트워크 통신 위해 다음 명령을 통해 써드파티 애드온인 Weave Net works 설치 수행한다.
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
Worker node 구성 (node only)
다음 명령을 통해 Worker node를 등록한다.
sudo kubeadm join 10.0.100.40:6443 --token zbgv72.v9ac8xhex128xjwp \ --discovery-token-ca-cert-hash sha256:2193f25bad65918197d7b543e282327741bdd99748b1a6d879e1b4dc
Master에서 노드 확인하기 (master)
다음 명령을 수행하여 모든 노드가 연결되었는지 확인한다.
kubectl get nodes -o wide
자동 완성 설정 (master)
bash에서 kubectl 명령어를 tab 자동 완성하기 위해 다음을 수행한다.
source <(kubectl completion bash) echo "source <(kubectl completion bash)" >> ~/.bashrc