Study/Troubleshooting

[Ansible] kubectl 명령어 실행 문제 - 해결

마늘김 2023. 8. 15. 23:40

구동 환경

  • M1 Macbook Pro에 Docker Desktop으로 컨테이너 구동
  • Docker Desktop 컨테이너에서 구동되는 Ansible 서버
  • Docker Desktop에서 구동되는 Minikube 클러스터
  • Minikube 클러스터는 호스트인 M1 Macbook Pro의 IP 주소를 통해 접근하여 kubectl 명령어를 하달

증상

  • Docker Desktop에서 실행된 Ansible 서버 컨테이너에서 Ansible Playbook 실행
  • 대상 호스트는 minikube의 호스트인 M1 Macbook Pro이고, kubectl 명령어 실행 안됨
  • 단, Ansible 서버 컨테이너에서 SSH로 M1 Macbook Pro에 접속하고 수동으로 kubectl 명령은 실행됨 
[root@ansible-server k8s]# ansible-playbook -i hosts k8s-cicd-deployment-playbook.yaml
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details

PLAY [Create pods using deployment] *************************************************************

TASK [Gathering Facts] **************************************************************************
ok: [192.168.0.XXX]

TASK [create a deployment] **********************************************************************
fatal: [192.168.0.XXX]: FAILED! => {"changed": false, "cmd": "kubectl apply -f study/cicd/cicd-devops-deployment.yaml", "msg": "[Errno 2] No such file or directory: b'kubectl'", "rc": 2, "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}

PLAY RECAP **************************************************************************************
192.168.0.XXX               : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

 

에러 내용

  • Ansible playbook 실행 시 호스트에서 kubectl 명령어 찾을 수 없음

 

파일 코드

  • hosts 파일
[kubernetes]
192.168.0.XXX    ansible_user="Macbook User Name"    ansible_python_interpreter=/usr/bin/python3

 

  • k8s-cicd-deployment-playbook.yaml 파일 내용
- name: Create pods using deployment
  hosts: kubernetes
  # become: true
  # user: ubuntu

  tasks:
  - name: create a deployment
    command: kubectl apply -f study/cicd/cicd-devops-deployment.yaml

수정

  • Ansible Playbook 파일의 kubectl 명령어를 절대 경로로 지정
- name: Create pods using deployment
  hosts: kubernetes
  # become: true
  # user: ubuntu

  tasks:
  - name: create a deployment
    command: /usr/local/bin/kubectl apply -f study/cicd/cicd-devops-deployment.yaml

 

결과

  • 정상 작동 함

원인 추측

  • Ansible playbook 실행이 단순 ssh 접속이 아닌 것 같음
  • 환경 변수 PATH 값을 다르게 읽어 들이는 것으로 보임
  • PATH 설정에서 kubectl을 등록하면 해결할 수 있을 것 같음