반응형

kubernetes 설치를 해보았다.

 

총 3가지 방법이 있다.

  1. kubeadm

  2. kubespray

  3. kops

 

3가지의 차이

https://github.com/kubernetes-sigs/kubespray/blob/master/docs/comparisons.md

 

kubespray/docs/comparisons.md at master · kubernetes-sigs/kubespray

Deploy a Production Ready Kubernetes Cluster. Contribute to kubernetes-sigs/kubespray development by creating an account on GitHub.

github.com

 

이전에는 kubeadm 으로 설치를 많이 해왔다.

그러나 최근에 flannel 이 이상하게 계속 죽는현상이 나타나서 원인을 못찾아서 OS 재설치와 함께 새로운 클러스터를 구성하는김에 새로운 방식으로 해보려고한다. 

 

참고한 블로그는 다음과 같다.

https://hackerpark.tistory.com/entry/Kubernetes-kubespary-%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-k8s-%EC%84%A4%EC%B9%98-Rocky9

 

[Kubernetes] kubespray 를 사용한 k8s 설치

[시스템 구성] 1. 방화벽 해제 + swapoff (모든 Node에서 수행) systemctl stop firewalld systemctl disable firewalld swapoff -a 2. SSH Key 생성 및 복사 ssh 생성 ( ※ Master Node 에서만 root 계정으로 진행 ! ) ssh-keygen -t rsa M

hackerpark.tistory.com

 

우선 방화벽을 전부 해제하였고

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 가 훨씬 편하다는 것을 알았다...

반응형

+ Recent posts