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을 등록하면 해결할 수 있을 것 같음