Container/Kubernetes

[Kubernetes] 쿠버네티스 온프레미스 환경에서 직접 설치하기 (kubernetes install on premise, kubeadm)

Nirsa 2021. 1. 5. 17:30
반응형
  • 쿠버네티스 온프레미스 환경에서 직접 설치하기 (kubernetes install on premise, kubeadm)

온프레미스 환경에서 쿠버네티스를 설치하기 전에 사전 작업들을 해주어야할 필요성이 있습니다. 해당 글은 사전작업 → Docker 설치 → Kubernetes 설치 및 master-worker node 연동 순으로 진행 됩니다.

저의 환경은 아래와 같으며 본인 환경에 따라 적절히 변경하여 설치를 진행 해주시면 됩니다.

  1. OS : CentOS 7
  2. master node 1대, worker node 3대 구성
  3. 모든 서버 root 계정으로 설치 및 연동 진행

 

  • 1) 호스트 네임 변경 (master node, worker node 적용)

아래와 같이 echo와 hostnamectl 명령어를 이용해 호스트 네임을 변경해주세요. 재부팅은 하지 않으셔도 됩니다.

# master node
echo "master" > /proc/sys/kernel/hostname
hostnamectl set-hostname master

# worker node1
echo "node1" > /proc/sys/kernel/hostname
hostnamectl set-hostname node1

# worker node2
echo "node2" > /proc/sys/kernel/hostname
hostnamectl set-hostname node2

# worker node3
echo "node3" > /proc/sys/kernel/hostname
hostnamectl set-hostname node3

 

  • 2) hosts 파일 변경 (master node, worker node 적용)

master node, worker node의 정보를 hosts 파일에 적용 합니다. 아래 명령어를 사용해 master node, worker node 모두 적용 시켜줍니다.

# master node
cat <<EOF > /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.10 master
192.168.100.21 node1
192.168.100.22 node2
192.168.100.23 node3
EOF

# node1
cat <<EOF > /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.10 master
192.168.100.21 node1
192.168.100.22 node2
192.168.100.23 node3
EOF

# node2
cat <<EOF > /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.10 master
192.168.100.21 node1
192.168.100.22 node2
192.168.100.23 node3
EOF

# node3
cat <<EOF > /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.10 master
192.168.100.21 node1
192.168.100.22 node2
192.168.100.23 node3
EOF

 

  • 3) firewalld 설정 (master node 적용)

firewalld를 사용중인 경우 master node에만 아래와 같이 방화벽 정책 설정을 진행 해주세요.

* 기존에 firewalld를 사용하지 않고 있는데 아래 명령어를 입력할 경우 기존 서비스하고 있던것들이 deny되어 장애가 발생할 수 있습니다.

# master node
systemctl start firewalld
firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --reload

 

  • 4) selinux, swap 비활성화 및 br_netfilter 모듈 활성화(master node, worker node 적용)

master node 서버에서 아래와 같이 selinux, swap 비활성화 및 br_netfilter 모듈을 활성화 해주세요.

setenforce 0
sed "s/SELINUX=enforcing/SELINUX=disabled/g" -i /etc/sysconfig/selinux
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
swapoff -a
sed -e 's/\(.*swap\)/#\1/' -i /etc/fstab

 

  • 5) Docker 설치 (master node, worker node 적용)
yum -y install yum-utils device-mapper-persistent-data lvm2 && yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo && yum -y install docker-ce
systemctl start docker && systemctl enable docker

 

  • 6) Kubernetes 저장소 추가 및 설치 (master node, worker node 적용)
# master node
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
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
EOF

yum install -y kubelet kubeadm kubectl


# worker node
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
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
EOF

yum install -y kubelet kubeadm

 

  • 7) kubelet 서비스 등록 및 시작 (master node, worker node 적용)
systemctl start kubelet && systemctl enable kubelet

 

  • 8) Kubernetes 초기화 작업 (master node 적용)

master node 서버에서 아래 명령어를 이용해 k8s 초기화 작업을 진행 합니다.  apiserver쪽에는 master node ip를 입력해주시고 그 뒤에는 클러스터 pod netowrk CIDE를 작성해주세면 됩니다.

# master node
#kubeadm init --apiserver-advertise-address=[마스터 노드 IP] --pod-network-cidr=[POD NETWORK CIDE]
kubeadm init --apiserver-advertise-address=192.168.100.10 --pod-network-cidr=172.16.0.0/24

 

초기화 작업이 성공적으로 종료되면 아래와 같이 token 볼 수 있는데, 이 token으로 worker node와 클러스터 연동을 해야하기 때문에 별도로 저장하여 보관해주시길 바랍니다.

 

  • 9) Cluster에게 root 권한 부여 (master node 적용)
# master node
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

 

  • 10) Calico 배포 (master node 적용)
# master node
curl https://docs.projectcalico.org/archive/v3.8/manifests/calico.yaml -O

 

이후 vim 편집기를 이용해 calico.yml 파일을 열은 후 아래 라인을 주석해제하고 8번에서 진행한 Pod CIDE로 수정을 해주시면 됩니다.

 

calico.yaml 파일을 배포 해주세요.

# master node
kubectl apply -f calico.yaml

 

이후 아래 명령을 통해 calico가 정상적으로 실행중인지 확인할 수 있습니다.

* coredns CrashLoopBackOff 발생 시 참고 : nirsa.tistory.com/293

# master node
watch kubectl get pods --all-namespaces

 

  • 11) kubernetes 초기화 작업 (worker node 적용)

이제 8번에서 작업 후 얻었던 token을 사용할때가 왔습니다. 따로 저장해두었던 token을 worker node 서버들에게 입력 해주세요.

 

  • 12) 연동 확인

kubectl get nodes 명령을 사용하면 아래와 같이 master, node1, node2, node3이 모두 연동된것을 확인할 수 있습니다.

 

반응형