쿠버네티스 강의를 들었는데 kubespray 라는걸로도 설치를 할 수 있다고 한다.
자동으로 kubeadm init join 같은것도 다 해줘서 설치할 때 더 편한것 같음.
다만 여러 프로그램들을 사용해서 설치하다보니 버전들을 맞춰주는게 중요한듯
쿠버네티스 마스터노드와 워커노드로 구성할 VM들은 이미 되었다고 가정하고 생략
1. 사전내용
APT update (Cent OS 의경우 apt 대신 yum 으로 사용)
sudo apt update
SSH 키 생성
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ''
SSH 키 각 노드로 복사
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@IP
ex)
ssh-copy-id -i ~/.ssh/id_ed25519.pub k8s-master@192.168.133.11
ssh-copy-id -i ~/.ssh/id_ed25519.pub k8s-node1@192.168.133.12
ssh-copy-id -i ~/.ssh/id_ed25519.pub k8s-node2@192.168.133.13
ssh-copy-id -i ~/.ssh/id_ed25519.pub k8s-node3@192.168.133.14
pyhton3, pip, git 설치
sudo apt install -y python3 python3-pip git
2. Kubespray 설치
작업할 임의의 디렉토리 이동하여 kubespray git clone
https://github.com/kubernetes-sigs/kubespray
git clone https://github.com/kubernetes-sigs/kubespray.git
requirements 파일에서 의존성 및 버전 확인 후 설치
cd kubespray
vi requirements.txt
위 github 에 보면 의존성 및 버전이 나오는데, OS처럼 이미 설치해둔 버전이 호환이 안되는 것이 아닌이상 그냥 냅두면 최신버전으로 설치되니.. 나같이 잘 모르면 그냥 최신버전으로 하는게 좋을듯 싶음 (이전에 버전맞춘다고 고생해봄)
sudo pip3 install -r requirements.txt
Ansible 로 실행할 인벤토리 준비
cp -rfp inventory/sample inventory/mycluster
인벤토리 내용 수정
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]
k8s-master ansible_host=192.168.133.11 ip=192.168.133.11 ansible_user=k8s-master
k8s-node1 ansible_host=192.168.133.12 ip=192.168.133.12 ansible_user=k8s-node1
k8s-node2 ansible_host=192.168.133.13 ip=192.168.133.13 ansible_user=k8s-node2
k8s-node3 ansible_host=192.168.133.14 ip=192.168.133.14 ansible_user=k8s-node3
# ## 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]
# node1
# node2
# node3
k8s-master
[etcd]
# node1
# node2
# node3
k8s-master
[kube_node]
# node2
# node3
# node4
# node5
# node6
k8s-node1
k8s-node2
k8s-node3
[calico_rr]
[k8s_cluster:children]
kube_control_plane
kube_node
calico_rr
노드들 IP와 이름들 맞춰주면 됨
파라미터 확인, 변경
vi inventory/mycluster/group_vars/k8s_cluster/addons.yml
...
metrics_server_enabled: true
...
ingress_nginx_enabled: true
...
metallb_enabled: true
...
metallb_protocol: "layer2"
...
metallb_config:
address_pools:
primary:
ip_range:
- 192.168.133.100-192.168.133.200
auto_assign: true
...
layer2:
- primary
...
주석을 풀어주거나, false -> true 로 값 변경.
ip_range 의 경우 내 ip range 입력
vi inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
...
kube_proxy_strict_arp: true
...
false -> true 로 변경
ansible 통신 가능 확인
ansible all -i inventory/mycluster/inventory.ini -m ping
apt 캐시 업데이트
ansible all -i inventory/mycluster/inventory.ini -m apt -a 'update_cache=yes' --become -K
(-K 는 sudo 권한 획득 ansible 옵션)
여기까지 다 잘되었다면 설치 진행
ansible-playbook -i inventory/mycluster/inventory.ini cluster.yml -e kube_version=v1.27.6 --become
kube version 은 쿠버네티스 공식페이지에서 확인하면서 맞추면됨.
(kubespray v2.23.0 의 경우 기본 k8s 버전은 1.27.6)
호스트 시스템 사양, VM 개수 및 리소스 네트워크 사양에따라 15~60분 정도 소요
3. 설치 후 쿠버네티스 기본 세팅
자격증명 가져오기
mkdir ~/.kube
sudo cp /etc/kubernetes/admin.conf ~/.kube/config
sudo chown $USER:$USER ~/.kube/config
쿠버네티스 명령 자동완성 (kubectl)
kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl
exec bashcd ku
설치끝