kubespray 설치 전에 사전작업
1. 모든 노드에서 설정
1. 메모리 스왑 비활성화
swapoff -a && sed -i '/swap/d' /etc/fstab
2. K8s 네트워크 사용을 위해 ipforward 활성화
sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
cat /proc/sys/net/ipv4/ip_forward
1이 출력되어야한다.
3. 방화벽 해제 (모든 노드해당)
sudo ufw disable
2. 마스터 노드에서 설정
4. multipass focal 버전 설치시 파이썬이 설치되었음
-> 설치되어있지않은경우 설치 필요
5. kubespray 받기
// 컨테이너가 cri-o 버전으로 사용 하기위해서 최신 버전으로 한다.
// 도커의 경우 K3s에서 띄운 파드가 보이지않는데 cri-o 경우 보인다.
// 현재 마스터브랜치에서 설치했는데 큰 이슈는 없었다.
// 마스터 노드 ssh 접속
git clone https://github.com/kubernetes-sigs/kubespray.git
6. 설정
sudo apt update -y
//pip3는 파이썬에서 패키지관리하는 매니저이다.
sudo apt install -y python3-pip
pip3 --version
cd kubespray
// 필요한 파일 자동으로 설치 (ansible등)
sudo pip3 install -r requirements.txt
cp -rfp inventory/sample inventory/mycluster/
declare -a IPS=(마스터노드아이피 워커노드아이피1 워커노드아이피2)
CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
vi inventory/mycluster/hosts.yaml
파일이 생성되는데 다음과 같이 수정한다
all:
hosts:
master-node:
ansible_host: master-node
worker-node1:
ansible_host: worker-node1
worker-node2:
ansible_host: worker-node2
children:
kube_control_plane:
hosts:
master-node:
worker-node1:
worker-node2:
kube_node:
hosts:
master-node:
worker-node1:
worker-node2:
etcd:
hosts:
master-node:
worker-node1:
worker-node2:
k8s_cluster:
children:
kube_control_plane:
kube_node:
calico_rr:
calico_rr:
hosts: {}
만일 마스터노드에서 파드를 실행시키고 싶지않으면 all.children.kube_node.hosts에서 master-node를 빼면 된다.
// metalllb설정
vi inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
// 검색
/kube_proxy_strict_arp: true
esc
//클러스터 감사 로그 활성화
// 검색
/kubernetes_audit: true
3. K3S 설치
7. 설치
ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml
설치시 10~15분정도 소요되는것같다.
네트워크 오류가 가끔 발생하는데 다시 같은 명령어를 실행하면 거의 설치된다.
ansible은 멱등성으로 동작하기때문이다.
계속 오류가 발생하면
ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root reset.yml
실행후 다시 아래 명령어를 실행해본다.
ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml