[Kubernetes] Cluster: Kubespray를 이용해 클러스터 구성하기 - 3.3.1. cluster.yml - 태스크 구조

3 분 소요

서종호(가시다)님의 On-Premise K8s Hands-on Study 4주차 학습 내용을 기반으로 합니다.


TL;DR

이번 글에서는 cluster.yml의 태스크 구조--list-tasks 옵션으로 분석한다.

  • 15개 플레이: 버전 체크부터 resolv.conf 설정까지 순차 실행
  • Warning 메시지: bastion, k8s_cluster, calico_rr 등 무시 가능한 경고
  • 주요 태스크 영역: OS 준비, 컨테이너 런타임, etcd, 컨트롤 플레인, CNI, 애드온


태스크 목록 확인

명령어 실행

ansible-playbook -i inventory/mycluster/inventory.ini cluster.yml \
  -e kube_version="1.33.3" \
  --list-tasks > cluster-list-tasks.log

--list-tasks 옵션은 플레이북을 실제로 실행하지 않고 실행될 태스크 목록만 출력한다. 플레이북 구조를 파악하거나, 변경 사항이 어떤 태스크에 영향을 주는지 미리 확인할 때 유용하다.

명령어 실행 시 주의해야 할 사항은 아래와 같다:

  • 반드시 ~/kubespray 디렉토리에서 실행해야 한다
  • root 권한이 필요하다 (실습 환경에서는 이미 root)

root 권한이 필요한 이유는 Kubespray가 다음 작업들을 수행하기 때문이다:

작업 경로/대상
SSL 인증서 작성 /etc/kubernetes/
패키지 설치 apt, yum 등
systemd 데몬 관리 kubelet, containerd 등
네트워크 설정 변경 iptables, ipvs 등
커널 파라미터 수정 sysctl


Warning 메시지 분석

명령 실행 시 다음과 같은 경고가 발생한다:

[WARNING]: Could not match supplied host pattern, ignoring: bastion
[WARNING]: Could not match supplied host pattern, ignoring: k8s_cluster
[WARNING]: Could not match supplied host pattern, ignoring: calico_rr
[WARNING]: Could not match supplied host pattern, ignoring: _kubespray_needs_etcd

현재 inventory.ini 구성을 다시 확인하자:

k8s-ctr ansible_host=192.168.10.10 ip=192.168.10.10

[kube_control_plane]
k8s-ctr

[etcd:children]
kube_control_plane

[kube_node]
k8s-ctr

inventory.ini 구성에 의하면, 경고 메시지는 정상적이다.

경고 메시지 의미 영향
bastion Jump host(Bastion 서버) 그룹 없음 직접 접속 환경이면 불필요
k8s_cluster k8s_cluster 그룹 미정의 내부적으로 자동 처리됨
calico_rr Calico Route Reflector 그룹 없음 Flannel 사용 시 불필요
_kubespray_needs_etcd 내부 동적 그룹 자동 생성되므로 무시 가능

이 경고들은 단일 노드 테스트 환경에서 정상적으로 발생하며, 클러스터 설치에 영향을 주지 않는다.


플레이 구조 개요

--list-tasks 결과를 보면 총 15개의 플레이가 순차 실행된다:

플레이 대상 호스트 주요 역할
#1 all Ansible 버전 체크
#2 all 인벤토리 검증
#3 bastion[0] Bastion SSH 설정
#4 k8s_cluster:etcd:calico_rr OS 부트스트랩
#5 k8s_cluster:etcd:calico_rr 팩트 수집
#6 k8s_cluster:etcd etcd 사전 준비, 컨테이너 런타임 설치
#7 kube_node etcd 클라이언트 인증서 필요 여부 확인
#8 etcd:kube_control_plane:_kubespray_needs_etcd etcd 설치
#9 k8s_cluster kubelet 설치
#10 kube_control_plane 컨트롤 플레인 설치
#11 k8s_cluster kubeadm join, CNI 설치
#12 calico_rr Calico Route Reflector 설치
#13 kube_control_plane[0] Windows 노드 패치
#14 kube_control_plane 애드온 설치
#15 k8s_cluster resolv.conf 최종 설정


주요 태스크 영역

각 플레이에서 실행되는 핵심 태스크들을 영역별로 분류하면:

사전 검증 (Play #1-2)

Check  <= Ansible version < 
Check that python netaddr is installed
Stop if kube_control_plane group is empty
Stop if unsupported version of Kubernetes

OS 준비 (Play #4)

bootstrap_os : Fetch /etc/os-release
bootstrap_os : Include vars
system_packages : Manage packages
bootstrap_os : Gather facts

컨테이너 런타임 (Play #6)

container-engine/containerd : Containerd | Download containerd
container-engine/containerd : Containerd | Copy containerd config file
container-engine/runc : Runc | Download runc binary
container-engine/crictl : Install crictl

etcd (Play #8)

etcd : Check etcd certs
etcd : Generate etcd certs
etcd : Install etcd
etcd : Configure etcd

Kubernetes 노드 (Play #9)

kubernetes/node : Install | Copy kubeadm binary from download dir
kubernetes/node : Install | Copy kubelet binary from download dir
kubernetes/node : Write kubelet config file
kubernetes/node : Enable kubelet

컨트롤 플레인 (Play #10)

kubernetes/control-plane : Install | Copy kubectl binary from download dir
kubernetes/control-plane : Kubeadm | Create kubeadm config
kubernetes/control-plane : Kubeadm | Initialize first control plane node
kubernetes/control-plane : Create kubeadm token for joining nodes

CNI (Play #11)

network_plugin/cni : CNI | Copy cni plugins
network_plugin/flannel : Flannel | Create Flannel manifests
network_plugin/flannel : Flannel | Start Resources

애드온 (Play #14)

kubernetes-apps/ansible : Kubernetes Apps | CoreDNS
kubernetes-apps/helm : Helm | Download helm
kubernetes-apps/metrics_server : Metrics Server | Apply manifests


결과

이번 글에서 --list-tasks를 통해 cluster.yml의 전체 태스크 구조를 파악했다.

항목 내용
플레이 수 15개
주요 단계 검증 → OS → 런타임 → etcd → 노드 → 컨트롤 플레인 → CNI → 애드온
Warning 단일 노드 환경에서 정상 발생, 무시 가능

다음 글에서는 cluster.yml이 import하는 첫 번째 플레이북인 boilerplate.yml을 분석한다.


참고 자료




hit count

댓글남기기