세팅할때 기본적으로 ram 4GB이상 2코어 이상으로 세팅하는게 편합니다.
우분투 os를 설치 한 후 네트워크 세팅을 먼저 실시합니다.
네트워크 세팅은 설정으로 들어가서 고정 ip를 입력합니다.
고정 ip 설정이 완료되었다면 /etc/hosts와 /etc/hostname을 변경합니다.
sudo vi /etc/hosts
sudo vi /etc/hostname
이 두개를 변경하는데 기본적인 것은 node와 소통을 위한 부분입니다.
hosts
hostname
두가지의 설정이 완료되었다면 아래의 코드를 실행시킵니다.
sudo apt-get update
sudo apt-get install \
openssh-server \
vim \
tree \
ca-certificates \
curl \
gnupg \
lsb-release -y
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
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
위에 코드들은 기본적인 설정에 필요한 파일이랑 docker를 설치하는 과정입니다. 자세한 사항은 docs를 확인하세요
sudo systemctl status docker
sudo docker run hello-world
설치가 완료되었다면 상기의 명령어로 도커를 실행이 되는지 확인하시고 docker rm 명령어로 테스트 파일를 지워줍니다.
이후에 vm의 클론 기능을 이용하여 node를 만들어줍니다. 이때 시스템을 종료하시고 클론을 하셔야합니다.
node를 만든 후에 각 노드에 맞게 네트워크 설정을 해줍니다.
저는 각각 130,131,132로 마스터, 노드1, 노드2를 만들었습니다.
위에서 진행한 대로 hosts와 hostname을 확인하시고 모든 설정이 끝났다면 메모리 절약을 위해 멀티유저 모드로 전환합니다.
sudo systemctl set-default multi-user.target
컴퓨터의 성능에 맞게 노드의 메모리도 줄여줍니다.
putty로 각각에 접근하여 ping test를 진행합니다.
정상적으로 수신하는 것을 확인할 수 있습니다.
이제 본격적으로 쿠버네티스를 설치할 시간입니다.
쿠버네티스는 기본적으로 공식 홈페이지에 설치 방법에 대한 가이드가 있습니다. 달라지는 경우도 있기 때문에 공식 홈페이지를 참조하는 것이 바람직합니다.
각 노드와 마스터에 아래의 코드를 실행시켜 쿠버네티스를 설치한다.
sudo swapoff -a && sudo sed -i '/swap/s/^/#/' /etc/fstab
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo 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
sudo ufw disable
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 kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
sudo systemctl daemon-reload
sudo systemctl restart kubelet
마스터 노드는 아래의 코드를 추가로 실행시킨다.
sudo rm /etc/containerd/config.toml
sudo systemctl restart containerd
sudo kubeadm init
최종적으로는 kubeadm join 192.168.146.130:6443 --token zx3x0p.prkjwuigxlva8jqj \
--discovery-token-ca-cert-hash sha256:ad2ee7cb9bf4378db184a79ed033711ddb9baf9e105142aaf3dfbcda9c08a81d
이것과 비슷하게 토큰이 생긴다.
아래의 코드를 실행시켜 모든 사용자가 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간 네트워크 통신을 위해 weave net works 설치한다.
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
이제 노드로 이동하여서 아까 나온 토큰을 등록해주며 마스터와 연결한다.
sudo rm /etc/containerd/config.toml
sudo kubeadm join 192.168.146.130:6443 --token zx3x0p.prkjwuigxlva8jqj \
--discovery-token-ca-cert-hash sha256:ad2ee7cb9bf4378db184a79ed033711ddb9baf9e105142aaf3dfbcda9c08a81d
마스터로 이동하여 노드들의 상태를 확인한다.
kubectl get nodes -o wide
또한 bash에서 kubectl 명령어를 더 쉽게 사용하기 위해 tab키로 자동완성기능을 추가한다.
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
이제 쿠버네티스의 기본적인 설정이 완료되었다
kubectl run nginx --image=nginx:1.14 --port=80
kubectl get pods -o wide
여러가지 실행 명령어를 이용하여 테스트를 진행해보면 됩니다.
k8s의 기본적인 부분과 명령어들을 익혀 후에 EKS를 활용 및 관리할 수 있도록!