Kubespray Node 추가/제거
Node 추가
Control plane
kube_control_plane
그룹은etcd
를 제외한 나머지 control plane 컴포넌트인 apiserver, scheduler, controller를 설치할 Node 그룹입니다.groups['kube_control_plane'][0]
은 추가적으로 실행되는 task가 있습니다.
ansible-playbook -i <inventory> -b cluster.yml
etcd
etcd
는 etcd가 설치될 Node 그룹입니다.groups['etcd'][0]
은 추가적으로 실행되는 task가 있습니다.- Node 수가 짝수인 경우
kubernetes/preinstall
role 실행이 실패하므로 변경 중이 아닌 경우 홀수로 유지해야합니다. - 다른 그룹으로 사용되던 Node는
etcd
그룹에 추가할 수 없으므로 해당 Node를 제거했다가 원래 그룹과 함께 다시 추가해야합니다.
ansible-playbook -i <inventory> -b cluster.yml \
-l etcd,kube_control_plane \
-e etcd_retries=10 \
-e ignore_assert_errors=true
ansible-playbook -i <inventory> -b upgrade-cluster.yml \
-l etcd,kube_control_plane \
-e etcd_retries=10 \
-e ignore_assert_errors=true
/etc/kubernetes/manifests/kube-apiserver.yaml
spec:
containers:
- command:
- --etcd-servers=https://<ip>:2379[,https://<ip>:2379]
etcd
변경이 잘 되었는지 kube_control_plane
그룹의 각 Node에서 위 옵션을 확인합니다.
Node
kube_node
그룹은 container runtime, kubelet을 설치할 Node 그룹입니다.
ansible-playbook -i <inventory> -b playbooks/facts.yml
ansible-playbook -i <inventory> -b scale.yml \
-l <hostname>
Node 제거
경고
kubespray에서 여러 그룹에 속해있는 Node를 한 그룹에서만 제거하는 방법을 제공하지 않는 것 같습니다.(불확실함)
제거 전 작업
groups['etcd'][0]
또는 groups['kube_control_plane'][0]
인 Node를 제거하려는 경우 해당 Node의 순서를 변경해야합니다.
inventory/hosts.yaml
etcd:
hosts:
node1: # 제거 대상
node2:
inventory/hosts.yaml
etcd:
hosts:
node2:
node1: # 제거 대상
ansible-playbook -i <inventory> -b cluster.yml
제거
ansible-playbook -i <inventory> -b remove-node.yml \
-e node=<target>
-e node=<target>
- 해당하는 Node들을 초기화할 수 없거나 할 필요가 없는 경우 아래 아래 두 옵션을 추가하면 됩니다.
-e reset_nodes=false
-e allow_ungraceful_removal=true
제거가 완료되면 inventory/hosts.yaml
에서 제거된 Node를 삭제합니다.
제거 후 작업
etcd
그룹에 포함된 Node가 제거된 경우 Kubernetes 와 네트워크 설정 파일을 업데이트를 위해 cluster.yml
플레이북을 실행합니다.
ansible-playbook -i <inventory> -b cluster.yml
- 짝수개의
etcd
를 가진 경우-e ignore_assert_errors=true
옵션으로 에러를 무시해야합니다.
/etc/kubernetes/manifests/kube-apiserver.yaml
spec:
containers:
- command:
- --etcd-servers=https://<ip>:2379[,https://<ip>:2379]
etcd
변경 이 잘 되었는지 kube_control_plane
그룹의 각 Node에서 위 옵션을 확인합니다.
kube_control_plane
의 첫 번째 Node가 변경된 경우 cluster-info
ConfigMap을 확인합니다.