-
쿠버네티스 온프레미스 환경에서 직접 설치하기 (kubernetes install on premise, kubeadm)
온프레미스 환경에서 쿠버네티스를 설치하기 전에 사전 작업들을 해주어야할 필요성이 있습니다. 해당 글은 사전작업 → Docker 설치 → Kubernetes 설치 및 master-worker node 연동 순으로 진행 됩니다.
저의 환경은 아래와 같으며 본인 환경에 따라 적절히 변경하여 설치를 진행 해주시면 됩니다.
- OS : CentOS 7
- master node 1대, worker node 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이 모두 연동된것을 확인할 수 있습니다.