이번엔 kubespray를 사용해서 k8s 클러스터를 구성해보겠습니다.
구성환경
저는 Master Node 3대, Worker Node 3대로 구성을 하였습니다.
각 Node들의 OS는 모두 Ubuntu 20.04로 진행하였습니다.
모든 과정의 진행은 Master1번 노드로 사용될 노드에서 진행하였습니다.
사전 준비
먼저 Ubuntu 20.04는 기본적으로 python3.8이 설치가 되어있습니다.
ansible 9.11.0 버전을 설치하기 위해선 python3.10 이상이여야 합니다.
따라서 python3.10 버전을 먼저 설치 해줍니다.
# apt update
# apt install -y software-properties-common
# add-apt-repository ppa:deadsnakes/ppa
# apt update
# apt install -y python3.10
그리고 python 3.10을 python의 기본 버전으로 설정
# update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1
# python3 -V
Python 3.10.15
python3.10 버전에 맞는 pip 도 설치를 해주어야 합니다.
# wget -qO- https://bootstrap.pypa.io/get-pip.py | python3.10
ansible을 사용하여 설치를 하기 때문에, SSH 키도 각 노드들한테 넣어줍니다.
# ssh-keygen
# ssh-copy-id root@<각 노드 IP들>
이제 kubespray 를 사용하여 k8s 클러스터를 구성해보도록 하겠습니다.
k8s 클러스터 구성
github에서 kubespray 관련 파일들을 받아옵니다.
그리고 필요한 패키지들을 설치해줍니다.
# git clone https://github.com/kubernetes-sigs/kubespray.git
# cd kubespray
# pip install -r requirements.txt
설치가 정상적으로 되면 인벤토리 파일을 구성해줍니다.
# cp -rfp inventory/sample inventory/mycluster
# vi inventory/mycluster/inventory.ini
inventory.ini 파일의 내용
[all]
node1 ansible_host=10.10.91.121 ip=10.10.91.121
node2 ansible_host=10.10.91.122 ip=10.10.91.122
node3 ansible_host=10.10.91.123 ip=10.10.91.123
node4 ansible_host=10.10.91.124 ip=10.10.91.124
node5 ansible_host=10.10.91.125 ip=10.10.91.125
node6 ansible_host=10.10.91.126 ip=10.10.91.126
[kube_control_plane]
node1
node2
node3
[etcd]
node1
node2
node3
[kube_node]
node4
node5
node6
[k8s_cluster:children]
kube_control_plane
kube_node
container 엔진을 docker 사용하기 위해 변경 해줍니다.
# vi inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
container_manager: docker
ansible-playbook을 통해서 설치를 하도록 하겠습니다.
그런데 여기서 중요한 점은 kubespray 디렉터리 위치에서 명령어를 실행해주어야 합니다.
# ansible-playbook -vvv -i inventory/mycluster/inventory.ini --become --become-user=root cluster.yml
정상적으로 설치가 완료되면, kubectl get nodes 명령어가 동작하는지 확인 해줍니다.
오류 내용
ansible 9.11.0 버전을 설치하느라 python과 pip 버전을 변경하다보니 아래와 같은 내용의 오류 상황을 겪었습니다.
<오류 내용>
TASK [kubernetes/preinstall : Update package management cache (APT)] ***************************************************************************************************************
task path: /root/kubespray/roles/kubernetes/preinstall/tasks/0070-system-packages.yml:35
fatal: [node1]: FAILED! => {
"changed": false,
"invocation": {
"module_args": {
"allow_change_held_packages": false,
"allow_downgrade": false,
"allow_unauthenticated": false,
"autoclean": false,
"autoremove": false,
"cache_valid_time": 3600,
"clean": false,
"deb": null,
"default_release": null,
"dpkg_options": "force-confdef,force-confold",
"fail_on_autoremove": false,
"force": false,
"force_apt_get": false,
"install_recommends": null,
"lock_timeout": 60,
"only_upgrade": false,
"package": null,
"policy_rc_d": null,
"purge": false,
"state": "present",
"update_cache": true,
"update_cache_retries": 5,
"update_cache_retry_max_delay": 12,
"upgrade": "no"
}
},
"msg": "python3-apt must be installed and visible from /usr/bin/python3."
}
해결 방안:
# cp /usr/lib/python3/dist-packages/apt_inst.cpython-38-x86_64-linux-gnu.so apt_inst.so
# cp /usr/lib/python3/dist-packages/apt_pkg.cpython-38-x86_64-linux-gnu.so apt_pkg.so
오류 내용
fatal: [node1]: FAILED! => {
"attempts": 4,
"cache_update_time": 1730272418,
"cache_updated": true,
"changed": false,
"invocation": {
"module_args": {
"allow_change_held_packages": false,
"allow_downgrade": false,
"allow_unauthenticated": false,
"autoclean": false,
"autoremove": false,
"cache_valid_time": 0,
"clean": false,
"deb": null,
"default_release": null,
"dpkg_options": "force-confdef,force-confold",
"fail_on_autoremove": false,
"force": false,
"force_apt_get": false,
"install_recommends": null,
"lock_timeout": 60,
"name": [
"containerd.io=1.6.32-1",
"docker-ce-cli=5:26.1.2-1~ubuntu.20.04~focal",
"docker-ce=5:26.1.2-1~ubuntu.20.04~focal"
],
"only_upgrade": false,
"package": [
"containerd.io=1.6.32-1",
"docker-ce-cli=5:26.1.2-1~ubuntu.20.04~focal",
"docker-ce=5:26.1.2-1~ubuntu.20.04~focal"
],
"policy_rc_d": null,
"purge": false,
"state": "present",
"update_cache": true,
"update_cache_retries": 5,
"update_cache_retry_max_delay": 12,
"upgrade": null
}
},
"msg": "'/usr/bin/apt-get -y -o \"Dpkg::Options::=--force-confdef\" -o \"Dpkg::Options::=--force-confold\" install 'containerd.io=1.6.32-1' 'docker-ce-cli=5:26.1.2-1~ubuntu.20.04~focal' 'docker-ce=5:26.1.2-1~ubuntu.20.04~focal'' failed: E: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 33537 (unattended-upgr)\nE: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?\n",
"rc": 100,
"stderr": "E: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 33537 (unattended-upgr)\nE: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?\n",
"stderr_lines": [
"E: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 33537 (unattended-upgr)",
"E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?"
],
"stdout": "",
"stdout_lines": []
}
해결 방안: systemctl stop unattended-upgrades.service
'쿠버네티스' 카테고리의 다른 글
GPU 파드 생성 시 겪었던 오류 (nvidia-container-runtime) (0) | 2024.11.11 |
---|---|
쿠버네티스 특정 노드에만 파드 생성 하기 (0) | 2024.11.04 |
MetalLB 설치 오류 해결 (kyverno 정책) (0) | 2024.10.15 |
NFS를 사용하여 k8s에서 PV 동적 할당 해보기 (4) | 2024.10.11 |
Istio 설치 (0) | 2024.09.27 |