(시리즈1) Linux 환경에서 KVM 이용해서 가상머신 환경 만들고, kubeadm 이용해서 가상머신 간에 쿠버네티스 클러스터 구축하기 (2) - kubeadm을 이용해 쿠버네티스 클러스터 구축

msyhu·2021년 5월 4일
0
post-thumbnail

저번 글에서 이제 클러스터를 구축할 노드들은 준비가 되었으니, 이제 실제로 쿠버네티스 클러스터를 구축합니다. 모든 노드에 적용해야 하는 부분, 마스터에만 적용해야 하는 부분, 워커에만 적용해야 하는 부분으로 구분되어 있으므로 잘 확인해야 합니다.

kubeadm을 이용하여 쿠버네티스 클러스터 만들기

kubeadm 이란, 쿠버네티스에서 제공해주는 클러스터 빌드 전용 커맨드라인 인터페이스 입니다.

< 모든 노드에 적용 >

쿠버네티스, 도커 설치

apt-key는 apt가 패키지를 인증하는 데 사용되는 키 목록을 관리하는 패키지입니다.
키를 사용하여 인증된 패키지는 신뢰할 수 있는 것으로 간주됩니다.

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
> deb http://apt.kubernetes.io/ kubernetes-xenial main
> EOF
(wget -qO- http://get.docker.com/ | sh) # 도커 버전을 확인
apt-get install -y kubelet kubeadm kubectl kubernetes-cni
sudo apt-mark hold kubelet kubeadm kubectl # 쿠버네티스 버전을 고정시킴

메모리 스왑 비활성화

sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # reboot 후에도 적용

모든 서버에서 메모리 스왑(Swap)을 비활성화해야 합니다. 메모리 스왑이 활성화되어 있으면 컨테이너의 성능이 일관되지 않을 수 있기 때문에 대부분의 쿠버네티스 설치 도구는 메모리 스왑을 허용하지 않습니다.

cgroup 드라이버 구성

도커와 쿠버네티스의 cgroup의 드라이버 구성이 맞아야 합니다.

쿠버네티스에서 권장하는 드라이버는 systemd이므로 도커의 cgroupfs를 systemd 로 변경

  • 도커 cgroup 드라이버 확인
docker info | grep -i cgroup
  • 권한 부여
sudo chown $USER:docker /etc/docker
  • 도커 데몬 드라이버 교체
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
  • 도커 Restart
systemctl daemon-reload

systemctl restart docker

< 마스터 노드에 적용 >

  • 마스터 노드 초기화
sudo kubeadm init --apiserver-advertise-address={호스트 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
  • root에 환경변수 등록
export KUBECONFIG=/etc/kubernetes/admin.conf
  • POD 네트워드 설정(CNI 설정)

플란넬은 쿠버네티스 요구 사항을 충족하는 매우 간단한 오버레이 네트워크입니다.


kubectl apply -f [https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml](https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml)
  • 클러스터 상태 확인
kubectl get nodes # 초기 생성 시 마스터 노드의 STATUS가 Ready 상태가 될때까지 기다린다.

kubectl get pods --all-namespaces
kubectl get pods -A # 바로 위 명령과 동치

< 워커 노드에 적용 >

  • 클러스터 join 예시

마스터 노드 초기화 후 마스터 노드의 터미널에 아래와 같은 명령어가 출력되므로 워커 노드 의 터미널에 복붙하면 됩니다.

sudo kubeadm join 192.168.0.2:6443 --token bny29x.gye3mdmqy5d1yffs \
    --discovery-token-ca-cert-hash sha256:90357f06fb4a16d689313a72f10ae2837925b7046a6fa394ca56fc588b0e40da
profile
컨테이너, k8s, 마이크로서비스 등 클라우드 네이티브 환경에 관심이 많습니다.

0개의 댓글