Vitual Machine에 Kubernetes 환경 구성하기
Virtual Machine을 이용해서, Kubernetes 환경 구성하기
VM 준비
OS: Ubuntu 20.04LTS RAM: 2G/4G(master은 4G) SSD: 20G CPU: 3
Nat Network 구성
G/W: 10.100.0.1 DNS: 10.100.0.1
master: 10.100.0.101 node1: 10.100.0.102 node2: 10.100.0.104
Docker 설치
- apt package 업데이트 및 설치
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
- Docker GPG key 설정
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
- Docker Repository 설정
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
- docker-ce, docker-ce-cli, containerd 설치
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl status docker
Results
- docker의 cgroup설정을 변경해줘야한다.
Kubernetes에서는 Docker 데몬의 드라이버를 systemd로 권장하고 있기 때문에, 해당 cgroup 드라이버 설정을 변경해줘야한다.
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
위와 같이 설정파일을 구성한 다음 Docker 데몬을 reloading해준다.
mkdir -p /etc/systemd/system/docker.service.d
systemctl daemon-reload
systemctl restart docker
Kubernetes 환경 구축
- 우선, Kubernetes 환경을 구성하기 위해서는 swap 메모리를 비활성화 해야한다.
swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab
위의 명령어로 실행하게 되면, /etc/fstab에 설정된 swap 메모리 mount 정보가 주석 처리 되면서 swap 메모리가 영구적으로 비활성화 된다.
- public signing key, kubernetes repository 추가
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
- kubeadm, kubelet, kubectl을 설치한 다음, 버전을 고정시켜준다.
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
kubeadm은 node를 제어하기 위한 명령어로, cluster 환경 구성에 활용된다. kubelet은 kubernetes 데몬으로, 모든 노드에서 동작하게 된다. kubectl은 kubernetes cluster에 명령을 요청할 수 있는 cli이다.
Master-node
Master-node는 worker node들을 관리하는 control-plane 역할을 하게 된다.
- control plane을 구성하기 위해, master node를 초기화시켜준다.
kubeadm init
위의 명령어를 수행하게 되면, control plane에서 필요한 component들을 설치하게 된다.
해당 명령어를 수행하고 나면, 아래와 같은 명령어가 화면에서 출력되게 된다. 이 명령어를 따로 파일에 기록해두자 –> 나중에 worker-node를 cluster에 구성하기 위해 필요한 명령어이다.
kubeadm join [master-node Ip] --token [tokenName] --discovery-token-ca-cert-hash [hashValue]
- kubectl 설정 kubectl을 사용하기 위해 directory 생성 및 소유권을 변경해줘야한다.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
- CNI 구성
pod 즉, 각각 node와 통신을 수행하기 위해서는 Container Network Interface를 설치해야한다. CNI에는 Weave, Flannel, Calico, 등이 있지만 여기서는 Weave를 이용해서 설정하였다.
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
Worker-nodes
- 구성한 cluster에 join시킨다.
kubeadm join [master-node Ip] --token [tokenName] --discovery-token-ca-cert-hash [hashValue]
이전에 저장해둔 kubeadm join 명령어를 이용해서 worker-node를 cluster에 구성한다.
Cluster 구성 확인
master-node에서 cluster 환경을 확인할 수 있다.
kubectl get nodes
아래의 명령어를 통해 확장된 정보도 확인할 수 있다.
kubectl get nodes -o wide
추가로, 아래의 명령어 수행을 통해 kubectl 관련 명령어에 대한 자동완성 기능을 활용할 수 있다.
sudo apt install bash-completion
kubectl completion bash
sudo chown $(id -u):$(id -g) /etc/bash_completion.d/kubectl
sudo kubectl completion bash >/etc/bash_completion.d/kubectl
source ~/.bashrc
댓글남기기