2024. 11. 21. 10:34ㆍ쿠버네티스/쿠버네티스
https://www.linuxtechi.com/install-kubernetes-using-kubespray/
How to Install Kubernetes Cluster Using Kubespray
In this post, we will cover how to install Kubernetes cluster using kubespray. It is a free and open-source tool used to deploy and manage Kubernetes clusters.
www.linuxtechi.com
환경
inventory.py는 의존성 문제와 동작의 불안정성 때문에 제거.
대신, 정적 인벤토리 파일 기반 접근법이 도입되어 더 직관적이고 안정적인 설치 프로세스를 제공.
사용자는 샘플 인벤토리를 수정하거나 다른 자동화 도구(Terraform 등)를 활용하여 클러스터 설정을 진행 가능
- installer : ubuntu 24 LTS / 192.168.111.101 (인스토럴 노드는 rocky로 할려했으나 오류가 많아 우분투로 진행)
- master : rocky 9 / 192.168.111.201
- node1 : rocky 9 / 192.168.111.202
- node2 : rocky 9 / 192.168.111.203
- node33 : rocky 9 / 192.168.111.204
# 1. 필요한 패키지 설치
sudo apt-get update
sudo apt-get install -y ansible git python3 python3-pip
# 2. SSH 키 생성 및 각 노드에 키 복사
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -N ""
ssh-copy-id sysops@192.168.111.201
ssh-copy-id sysops@192.168.111.202
ssh-copy-id sysops@192.168.111.203
ssh-copy-id sysops@192.168.111.204
# 3. 각 노드에 대해 sudo 권한 설정
echo "master ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/sysops
echo "node1 ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/sysops
echo "node2 ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/sysops
echo "node3 ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/sysops
# 4. 방화벽 비활성화 및 IPV4 포워딩 활성화
ansible all -i inventory/mycluster/hosts.yaml -m shell -a "sudo systemctl stop firewalld && sudo systemctl disable firewalld"
ansible all -i inventory/mycluster/hosts.yaml -m shell -a "echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf"
ansible all -i inventory/mycluster/hosts.yaml -m shell -a "sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab && sudo swapoff -a"
# 5. Kubespray 클론
git clone https://github.com/kubernetes-sigs/kubespray.git
cd kubespray
# 6. 필수 의존성 설치
pip install -r requirements.txt
# 7. 인벤토리 파일 준비 (필요한 경우 IP 주소 수정)
cp -r inventory/sample inventory/mycluster
# (여기서 `inventory/mycluster/hosts.yaml` 파일을 편집하여 각 노드 IP와 역할을 설정)
# 8. Kubernetes 클러스터 설치
ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml
# 9. 클러스터 상태 확인
kubectl get nodes
현재아래는 잘 안되 수정-기록용으로만 놓음
----------------------
installer
$ sudo apt update
$ sudo apt install git python3 python3-pip -y
$ git clone https://github.com/kubernetes-incubator/kubespray.git
$ cd kubespray
$ pip install -r requirements.txt --break-system-packages
아래 에러 발생 시 :
ERROR: Cannot uninstall jsonschema 4.10.3, RECORD file not found. Hint: The package was installed by debian.
1. 패키지가 apt로 설치되었는지 확인
출력에 jsonschema 관련 항목이 나타난다면, 이 패키지는 apt를 통해 설치된 것입니다.
2. apt로 패키지 제거
apt를 사용해 제거합니다:
제거된 후, pip로 다시 설치하려면 아래 명령어를 사용하세요:
pip install jsonschema
3. pip로 다시 설치된 패키지 확인
만약 이후에도 동일한 오류가 발생하면, pip를 통해 설치된 패키지를 강제로 제거하고 새로 설치할 수 있습니다:
ModuleNotFoundError: No module named 'ruamel' 오류
pip install ruamel.yaml --break-system-packages로 설치
앤서블 사용을 위해 클러스트 파일 만들기
$ cp -rfp inventory/sample inventory/mycluster
$ declare -a IPS=(192.168.111.201 192.168.111.202 192.168.111.203 192.168.111.204)
$ CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
vi inventory/mycluster/hosts.yaml
아래와 같이 수정 (현재 환경에 맞게 수정한거므로 상황이 다르면 다르게 수정)
Kubernetes 대시보드 및 Ingress 컨트롤러와 같은 애드온을 활성화하려면, inventory/mycluster/group_vars/k8s_cluster/addons.yml 파일에서 해당 매개변수를 활성화 상태로 설정.
$ vi inventory/mycluster/group_vars/k8s_cluster/addons.yml
-----------
dashboard_enabled: true
ingress_nginx_enabled: true
ingress_nginx_host_network: true
-----------
install node에서
ssh-keygen
$ ssh-copy-id sysops@192.168.111.201
$ ssh-copy-id sysops@192.168.111.202
$ ssh-copy-id sysops@192.168.111.203
$ ssh-copy-id sysops@192.168.111.204
각 노드마다 아래 실행
echo "master ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/sysops
echo "node1 ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/sysops
echo "node2 ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/sysops
echo "node3 ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/sysops
Disable Firewall and Enable IPV4 forwarding
ansible all -i inventory/mycluster/hosts.yaml -m shell -a "sudo systemctl stop firewalld && sudo systemctl disable firewalld"
ansible all -i inventory/mycluster/hosts.yaml -m shell -a "echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf"
ansible all -i inventory/mycluster/hosts.yaml -m shell -a "sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab && sudo swapoff -a"
Start Kubernetes deployment
ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml
몇가지 경고문들 챗gpt검색
이 경고 메시지는 Ansible에서 발생하는 것으로, main.yml 파일 내에서 동일한 키(예: paths)가 여러 번 정의되었음을 의미합니다. Ansible은 중복된 키 중 마지막으로 정의된 값을 사용합니다. 이는 일반적으로 무시할 수 있는 경고지만, 잘못된 동작을 유발할 수 있으므로 확인 및 수정하는 것이 좋습니다.
문제 원인
- main.yml 파일의 특정 위치(예: 29번째 줄)에서 paths라는 키가 중복으로 정의되었습니다.
- YAML 파일에서 동일한 키를 여러 번 정의하면, 마지막 값만 유효하게 적용됩니다.
해결 방법
- 문제 발생 위치 확인
경고 메시지에 따라 /root/kubespray/roles/bootstrap-os/tasks/main.yml 파일의 29번째 줄을 열어 확인하세요: -
bash코드 복사nano /root/kubespray/roles/bootstrap-os/tasks/main.yml
- 중복된 키 확인 및 수정
예를 들어, 파일에서 아래와 같은 내용이 있다면:위와 같은 중복 정의를 하나로 합치세요: -
yaml코드 복사paths: - /some/path/1 - /some/path/2
-
yaml코드 복사paths: - /some/path/1 paths: - /some/path/2
- 파일 저장 및 테스트
파일을 저장한 후 Ansible 작업을 다시 실행하여 경고가 제거되었는지 확인합니다.
추가 팁
- YAML 유효성 검사
수정한 파일이 올바른 YAML 형식인지 확인하려면 다음 명령어를 사용하세요: -
bash코드 복사yamllint /root/kubespray/roles/bootstrap-os/tasks/main.yml
- 경고 무시
위 경고는 심각한 오류가 아니므로 무시해도 됩니다. 하지만 같은 키의 중복이 의도된 것인지 확인하는 것이 중요합니다.
설치완료

잘 설치 됬는지 아래 명령어로 확인
kubectl get nodes
kubectl get pods -A
kubeadmin으로하면 정말 힘들엏던거같은데 ㅋㅋㅋㅋㅋ
kubectl create deployment demo-nginx-kubespray --image=nginx --replicas=2
kubectl expose deployment demo-nginx-kubespray --type NodePort --port=80
kubectl get deployments.apps
kubectl get pods
kubectl get svc demo-nginx-kubespray
쿠버네티스 대시보드
vi dashboard-adminuser.yml
##########
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
##########
kubectl apply -f dashboard-adminuser.yml
vi admin-role-binding.yml
######
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system
###########
kubectl apply -f admin-role-binding.yml
kubectl -n kube-system create token admin-user
##터널링
ssh -L8001:localhost:8001 master@192.168.111.201
kubectl proxy
터널링 통해 접근 성공
'쿠버네티스 > 쿠버네티스' 카테고리의 다른 글
Pod Task (0) | 2024.12.04 |
---|---|
쿠버네티스를 사용하여 마이크로서비스 아키텍처 배포-1 (0) | 2024.11.25 |
kubectl 실습 (0) | 2023.09.10 |
마스터 노드 (0) | 2023.09.04 |
컨테이너를 다루는 표준 아키텍처, 쿠버네티스 (0) | 2023.09.04 |