쿠버네티스 싱글노드 클러스터 구축
설치하기전에
설치를 진행한 노드는 master 입니다, 해당 노드의 각 스펙은 아래와 같습니다.
OS | CPU | Memory | Hard |
centOS7 | 8core | 16G | 300G |
공식 문서에 따르면 노드는 2개의 코어 이상이 필요합니다.
- 2 GB 이상의 램을 장착한 머신. (이 보다 작으면 앱을 위한 공간이 거의 남지 않음)
- 2 이상의 CPU.
- Swap의 비활성화. kubelet이 제대로 작동하게 하려면 반드시 Swap을 사용하지 않도록 설정한다.
쿠버네티스 마스터 만들기
1. 시스템 설정
Kubernetes를 이상없이 작동하게 하기 위해 firewalld와 selinux를 비활성화 할 필요가 있습니다.
sudo service firewalld stop
sudo chkconfig firewalld off
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sudo setenforce 0
이후 위에 언급된 swap의 비활성화까지 진행 하도록 합니다.
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
2. 도커 설치 및 활성화
해당 글 에서는 도커 설치를 다루지 않겠습니다. (아래를 따라 써보거나, 참조된 도커 홈페이지를 이용 바랍니다.)
참조 : docs.docker.com
Install Docker Engine on CentOS
docs.docker.com
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io -y
sudo service docker start
sudo chkconfig docker on
3. Kubeadm 설치
참조: https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
Installing kubeadm
This page shows how to install the kubeadm toolbox. For information on how to create a cluster with kubeadm once you have performed this installation process, see the Using kubeadm to Create a Cluster page. Before you begin A compatible Linux host. The Kub
kubernetes.io
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
이후 저장소를 추가하도록 합니다.
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
마지막으로 kubelet, kubeadm, kubectl을 설치합니다.
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable --now kubelet
4. Master 초기화
이제 설치는 모두 끝났으니 init으로 초기화를 진행 해 주도록 하겠습니다.만약 노드가 여러개라면 master로 사용할 node에서만 진행하도록 합니다.
sudo kubeadm init
5. Master 초기화 중 오류시 조치사항
[에러1]
kubeadm init시 오류가 난다면 kubeadm reset를 다시 해보도록 합니다.
rm –rf /etc/cni/net.d/*
rm –rf $HOME/.kube/config
sudo kubeadm reset
sudo kubeadm init
[에러2]
“timed out waiting for the condition”라는 오류가 나올 수 있습니다.
해당 오류가 나올 경우의 조치사항입니다. (쿠버네티스 공식 홈페이지에 나와 있는 내용)
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
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker
이후 다시 Master 초기화를 진행 합니다 [에러1] 진행
6. Config 설정 (Root가 아닌 사용자도 kubectl가능하게 선택)
Root가 아닌 사용자도 kubectl가능하게 합니다.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
7. Network 설정
쿠버네티스는 네트워크 구성자체를 구성 하지않아 플러그인형태를 사용합니다.
kubectl apply -f https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')
kubectl get pods --all-namespaces #정상적으로 진행이 되었는지 확인
8. Master 노드에도 Pod가 실행가능하게 실행
기본적으로 마스터노드에서 pod를 실행할 수 없습니다. 해당 설정을 하게 됨으로써 Master node에서 pod를 실행할 수 있게 됩니다.
kubectl taint nodes --all node-role.kubernetes.io/control-plane- node-role.kubernetes.io/master-
kubectl get nodes #클러스터가 Ready로 바뀌었는지 확인
기타. 이외의 다른 오류들
[기타에러1]
설치 중 Unable to connect to the server: x509: certificate signed by unknown authority
라는 에러가 뜰 시 해결하는 방법입니다.
export KUBECONFIG=/etc/kubernetes/admin.conf
참조 : https://www.edureka.co/community/23959/unable-connect-server-certificate-signed-unknown-authority
Error saying Unable to connect to the server x509 certificate signed by unknown authority
I am using kube-aws to v0.9.4-rc2 After successfully do kube-aws up --s3-uri s3:// ... -authority: credentials/ca.pem Where am I going wrong?
www.edureka.co
[기타에러2]
Kube init 명령어 실행시 에러 추가
해결법은 아래와 같다.
rm /etc/containerd/config.toml
systemctl restart containerd
kubeadm init
이제 아래에서 쿠버네티스 대시보드를 적용하여 클러스터가 잘 동작하는지 확인 해 보자
쿠버네티스 대시보드 적용
쿠버네티스 대시보드 설치 전에 쿠버네티스는 대시보드를 공식적으로 지원해 준다, 아래글은 해당 문서를 참고하여 작성 하였다. (이때 버전은 2.6.0) 참조 : https://github.com/kubernetes/dashboard GitHub -
park-hw.tistory.com