오늘은 쿠버네티스 설치 및 환경 구성(ubuntu 20.04)을 포스팅하려고 합니다.
이번 포스팅은 ubuntu 20.04를 기준으로 하기 때문에
ubuntu가 아닌 CentOS이신분들이라면 아래 링크를 통해
CentOS 설치 버전을 참고해주시면 감사하겠습니다.
[Develope/Kubernetes] - [Kubernetes] 쿠버네티스 설치 및 환경구성(CentOS 7.9)
1. VirtualBox를 이용하여 vm(ubuntu 20.04) node 구성
필자는 VirtualBox를 이용하여 3개의 VM을 다음 표와 같이 구성하였습니다.
(VirtualBox가 아닌 다른 vm 또는 host server여도 무관합니다.)
HOSTNAME | IP | ROLE | RESOURCE |
k8s-master | 192.168.1.5 | control-plane, master | disk(30G), cpu(2), mem(2G) |
k8s-worker1 | 192.168.1.6 | worker | disk(30G), cpu(2), mem(2G) |
k8s-worker2 | 192.168.1.7 | worker | disk(30G), cpu(2), mem(2G) |
2. Kubernetes를 사용하기 위한 사전 세팅
1) apt 패키지 업데이트
# sudo apt-get update
# sudo apt-get upgrade
# sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
2) swap disable
# sudo swapoff -a && sudo sed -i '/swap/s/^/#/' /etc/fstab
3) 방화벽 예외 설정
# sudo systemctl stop firewalld
# sudo systemctl disable firewalld
4) hosts 설정
# hostnamectl set-hostname k8s-master
(각 노드별로 알맞게 hostname 지정)
# cat <<EOF >> /etc/hosts
192.168.1.5 k8s-master
192.168.1.6 k8s-worker1
192.168.1.7 k8s-worker2
EOF
3. Docker 설치
1) Docker 공식 GPG key 추가
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
2) Docker를 stable 버전으로 설치하기 위한 명령어 실행
# 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
3) Docker 엔진 설치
# sudo apt-get update
# sudo apt-get install docker-ce docker-ce-cli containerd.io
4) daemon.json 생성
# 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
5) Docker 서비스 등록 및 실행
# sudo systemctl enable docker
# sudo systemctl start docker
4. Kubernetes 설치
1) 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
2) Kubernetes 저장소 업데이트 및 패키지 추가
# sudo apt-get update
# sudo apt-get install -y apt-transport-https ca-certificates curl
3) 구글 클라우드 public key 다운로드
# sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
4) 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
5) 저장소 업데이트 및 kubelet, kubeadm, kubectl 설치
# sudo apt-get update
# sudo apt-get install -y kubelet kubeadm kubectl
# sudo apt-mark hold kubelet kubeadm kubectl
6) Kubernetes 서비스 등록 및 실행
# sudo systemctl enable kubelet
# sudo systemctl restart kubelet
5-1. master node 설정
1) node 초기화
* 결과값인 kubeadm join ~~~ 값 별도로 기록 (worker node에서 입력할 값)
# kubeadm reset
# kubeadm init --apiserver-advertise-address {vm-ip} --pod-network-cidr=192.168.0.0/16
2) 모든사용자가 kube 명령어를 사용할 수 있도록 설정
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config
# export KUBECONFIG=/etc/kubernetes/admin.conf
3) weave CNI 플러그인 설치
weave 이외에도 다른 CNI third party가 많이 있기 때문에 다른 CNI를 설치해도 무관 합니다.
# kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
4) kubectl 자동 완성 설정
# source <(kubectl completion bash)
# echo "source <(kubectl completion bash)" >> ~/.bashrc
5-2 worker node 설정
1) kubeadm join
* k8s-master에서 kubeadm join ~~ 기록한 값 입력
kubeadm join 192.168.1.5:6443 --token 7nck59.l95eq142d0oqprie \
--discovery-token-ca-cert-hash sha256:6b32c544c257d1e5387e56509b00a8fb8430cab82cc2acf5e50d150129ddca04
6. 결과 확인
master node에서 worker node들이 cluster join이 잘 되었는지 확인합니다.
각 node들이 잘 나타나 있고, Ready 상태라면 Kubernetes 구축이 완료됐다고 볼 수 있습니다..
# kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
kube-master Ready control-plane 3d6h v1.24.2 192.168.1.5 <none> Ubuntu 20.04.4 LTS 5.13.0-52-generic containerd://1.6.6
kube-worker1 Ready <none> 3d6h v1.24.2 192.168.1.6 <none> Ubuntu 20.04.4 LTS 5.13.0-52-generic containerd://1.6.6
kube-worker2 Ready <none> 3d6h v1.24.2 192.168.1.7 <none> Ubuntu 20.04.4 LTS 5.13.0-52-generic containerd://1.6.6
* ETC
VirtualBox로 node들을 구성했을 경우 네트워크 어댑터가 NAT로 되어있다면, INTERNAL-IP가 모두 같은
IP로 되어있어서 문제가 될 수 있습니다. 해당 이슈가 있다면, 아래 링크를 통해 해결하실 수 있습니다.
[Develope/Kubernetes] - [Kubernetes] VirtualBox Node INTERNAL-IP 설정 방법
참고 - https://confluence.curvc.com/pages/releaseview.action?pageId=98048155
지금까지 kubernetes 쿠버네티스 설치 및 환경 구성(ubuntu 20.04)에 대한 포스팅이었습니다.