쿠버네티스의 구조는 위 사진처럼 표현 할 수 있다. 마스터 역활을 하는 컨트롤 플레인과 실제 컨테이너가 동작하는 노드로 이루어져있다.
위 구성과 같이 각각 컨트롤 프레인과 노드의 역활이 나뉘어져있으며 보통 컨트롤 플레인에서는 파드를 생성하지 않는다.
하나의 컨테이너 이상의 그룹으로 이루어져 있으며, 이 그룹은 스토리지나 네트워크를 공유하는 형식의 논리적인 개념으로 뭉쳐진 명세서라고 보면 된다. 어떤 어플리케이션을 동작할때 같은 네임스페이스와 리소스(스토리지 같은)을 사용하고 있으면 하나의 파드 형태로 묶여 관리를 편하게 한다. 사실 보기에 유저 입장에서 보기에도 편하다.
sudo apt-get update
sudo apt-get install -y \
ca-certificates \
curl \
gnupg \
lsb-release
sudo mkdir -m 0755 -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
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
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
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
sudo apt-get update
sudo apt-get install -y kubelet=1.22.17-00 kubeadm=1.22.17-00 kubectl=1.22.17-00
sudo apt-mark hold kubelet kubeadm kubectl
sudo cat > /etc/docker/daemon.json << EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo kubeadm init
컨트롤 플레인에서 위 명령어를 실행하면
kubeadm join 컨트롤플레인IP:6443 --token 토큰값 \
--discovery-token-ca-cert-hash sha256:sha256값
위 형태로 복사 붙여넣기하라고 뜬다. 그러면 노드에서는 sudo를 붙여 클러스터에 조인을 해주면 된다.
만약 아래 에러 문구 시 sudo swapoff -a 로 해결한다.
[ERROR Swap]: running with swap on is not supported. Please disable swap.
조인 완료 후
kubectl get nodes
위 명령어를 치면 노드가 조인된걸 볼 수 있다. 하지만 Not Ready 상태.
왜냐하면 컨테이너 네트워크 인터페이스를 설치 안해줬기 때문.
wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml
kubectl apply -f calico.yaml
kubectl taint nodes --all node-role.kubvernets.io/master=
CNI 중 calico를 설치 후 컨트롤플레인에 파드를 생성 할 수 있게 수정하면 끝
출처