K8S에서 공식적으로 제공해주는 도구이다.
클러스터를 빨리 구축하기 위한 다양한 기능을 제공한다.
Node | OS | CPU | Memory | IP Address |
---|---|---|---|---|
Master | Centos | 4 Core | 4096MB | 192.168.56.11 |
Node1 | Centos | 2 Core | 2048MB | 192.168.56.101 |
Node2 | Centos | 2 Core | 2048MB | 192.168.56.102 |
Node3 | Centos | 2 Core | 2048MB | 192.168.56.103 |
*쿠버네티스 공식 Docs를 보고 설치를 하였다.
네트워크 어댑터가 두 개 이상 (Public, Private)사용을 권장한다.
sudo firewall-cmd --add-port 6443/tcp --permanent
sudo firewall-cmd --add-port 2379-2380/tcp --permanent
sudo firewall-cmd --add-port 10250-10252/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --add-port 10250/tcp --permanent
sudo firewall-cmd --add-port 30000-32767/tcp --permanent
sudo firewall-cmd --reload
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
컨테이너가 Pod 네트워크의 host filesystem 액세스 할 수 있도록 하기위해 SELinux 해제를 한다.
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
쿠버네티스에서 Swap Memory 사용 시 속도가 저하된다. 따라서 스왑을 꺼주자.
sudo swapoff -a
sudo sed -i
쉘로 자동으로 설치해 주는 명령어
curl -fsSL https://get.docker.com/ | sudo sh
docker 서비스 시작
sudo systemctl start docker.service docker.socket
sudo systemctl enable docker.service docker.socket
cat <<EOF | sudo tee /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
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
sudo kubeadm init --apiserver-advertise-address=192.168.56.11
!! 해당 명령어가 완료되면 kubeadm join
명령어가 출력되는데 이 명령어는 Worker Node를 클러스터에 연결할 때 사용되므로 기록해두거나 복사해놓자.
--apiserver-advertise-address
옵션은 마스터 노드의 API Server 주소를 설정할 때 사용하는 옵션이다. 워커노드들은 이 API 주소로 Master Node와 통신을 한다.만약 Master Node를 다중으로 구성하였다면
--control-plane-endpoint
옵션을 사용하여 엔드 포인트를 설정할 수 있다. 하지만 지금 구성 환경은 단일 Master Node이기 때문에 사용하지 않는다.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl
명령을 사용하기 위함. 추가로 kube 환경설정 파일을 환경변수로 지정할 수 있다.
export KUBECONFIG=/etc/kubernetes/admin.conf
curl https://docs.projectcalico.org/manifests/calico.yaml -O
kubectl apply -f calico.yaml
kubeadm join 192.168.56.11:6443 --token o0zezq.d3a298ky1xqdyz15 \
--discovery-token-ca-cert-hash sha256:81089ceaa64bdda339043ee5321667ddb5c948e5c4f42dcbde3c33fbdcbc98c1
kubeadm join
명령어를 그대로 복사 붙여넣기 해주면 알아서 연결이 된다. (user일 경우 sudo 붙여야 함)https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises
좋은 글 포스팅해주셔서 감사합니다.
지금 운영 중인 여러 서버를 묶는 kubernetes cluster를 구성하려고 하는데, 지금 worker node가 port forwarding을 통해 특정 port만 사용가능한 경우에는 어떤 방식으로 접근하면 좋을까요?