반응형
kubernetes 설치를 해보았다.
총 3가지 방법이 있다.
1. kubeadm
2. kubespray
3. kops
3가지의 차이
https://github.com/kubernetes-sigs/kubespray/blob/master/docs/comparisons.md
이전에는 kubeadm 으로 설치를 많이 해왔다.
그러나 최근에 flannel 이 이상하게 계속 죽는현상이 나타나서 원인을 못찾아서 OS 재설치와 함께 새로운 클러스터를 구성하는김에 새로운 방식으로 해보려고한다.
참고한 블로그는 다음과 같다.
우선 방화벽을 전부 해제하였고
systemctl stop firewalld
systemctl disable firewalld
swapoff -a
이후 SSH Key 생성과 복사를 하였다.
# ssh key 생성 (Master 노드에서만 진행)
ssh-keygen -t rsa
# Key 복사
cat ~/.ssh/id_rsa.pub
# 위 결과를 복사한 후 아래 "" 안에 삽입 (이 명령어는 master / worker 노드 모두 수행)
echo "" > ~/.ssh/authorized_keys
kubespray 설치
# git 설치
yum install -y git
# python 설치
yum install -y python3 python3-pip
# kubespray 설치
# kubespray 의 버전에 따라 잘 설치해야한다.
# 필자는 Rocky 8.9 버전에 python 이 호환되는 버전이라 그런지 2.22 버전으로 설치하여서 성공했다.
git clone -b v2.22.0 https://github.com/kubernetes-sigs/kubespray.git
필수 Package 들 설치
# git clone 으로 생성된 kubespray 경로에 접속하여 실행
cd kubespray; pip3 install -r requirements.txt
설치 도중에 나온 에러
버전이 없다는 에러가 나온다.
# requirements 의 버전을 낮춰주었다.
cd kubespray; rm requirements.txt
ln -s requirements-2.11.txt requirements.txt
수행해도 버전이 안맞아서 안되었다.
그럴경우 아래처럼 수정하면 된다.
#1. 파일 열기
cd kubespray; vi requirements.txt
#2. 아래와 같이 붙혀넣기
ansible==4.10.0
ansible-core==2.11.11
cryptography==3.4.8
jinja2==3.0.3
jmespath==0.10.0
MarkupSafe==2.0.1
netaddr==0.8.0
pbr==5.11.1
ruamel.yaml==0.17.21
ruamel.yaml.clib==0.2.7
필자처럼 했음에도 버전이 없을경우 있는 버전으로 맞춰주면된다.
inventory 설정 변경
# Copy ``inventory/sample`` as ``inventory/mycluster``
cd kubespray; cp -rfp inventory/sample inventory/mycluster
# inventory.ini 설정
vi inventory/mycluster/inventory.ini
# ## Configure 'ip' variable to bind kubernetes services on a
# ## different ip than the default iface
# ## We should set etcd_member_name for etcd cluster. The node that is not a etcd member do not need to set the value, or can set the empty string value.
[all]
master1 ansible_host=192.168.13.10 #ip=192.168.13.10 etcd_member_name=etcd1
worker1 ansible_host=192.168.13.11
worker2 ansible_host=192.168.13.12
worker3 ansible_host=192.168.13.13
# ## configure a bastion host if your nodes are not directly reachable
# [bastion]
# bastion ansible_host=x.x.x.x ansible_user=some_user
[kube_control_plane]
master1
[etcd]
master1
[kube_node]
worker1
worker2
worker3
[calico_rr]
[k8s_cluster:children]
kube_control_plane
kube_node
calico_rr
마스터가 될 서버의 ip 정보
그리고 워커노드가 될 서버의 ip 정보를 잘 기입하여준다.
이후 Ansible playbook 으로 kubernetes 를 설치한다.
ansible-playbook -i inventory/mycluster/inventory.ini -become --become-user=root cluster.yml
한참 걸린다.
이후 kubernetes 설치 확인을 하면 끝난다.
# API Server 통신을 위한 인증파일 복사
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# k8s node 확인
kubectl get nodes
# k8s 모든 리소스 확인
kubectl get all --all-namespaces
설치는 참고 블로그와 동일하다.
kubeadm 보다는 kubespray 가 훨씬 편하다는 것을 알았다...
반응형