WSL2 우분투를 설치하여 진행하는 것도 가능하지만, 저처럼 귀찮으신 분들을 위해 남깁니다.
컨테이너 내에서 도커 실행
강사님이 게시하신 DinD 방식 대신 DooD 방식으로 실행하여 진행하실 수 있습니다. 다만 DooD 방식은 호스트 머신 도커를 공유하기 때문에 포트 바인딩에 신경 써주셔야 합니다.
예를 들면, 강사님은 DinD 방식이라 컨테이너 내부에서 실행하는 또 다른 컨테이너에 대해 포트를 8080:8080으로 바인딩합니다. 반면 DooD 방식은 호스트 도커를 곧바로 사용하기 때문에 컨테이너 내부에서 컨테이너를 실행할 때 [호스트에 노출할 포트]:8080로 바인딩하셔야 합니다.
아래는 docker-server, ansible-server 실행 명령입니다. 기존 명령에는 -p 8081:8080
과 같은 포트 바인딩이 있으나, DooD 방식 사용 시 필요 없기 때문에 생략했습니다.
docker-server
docker run -itd --name docker-server -p 10022:22 -e container=docker --tmpfs /run --tmpfs /tmp -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /var/run/docker.sock:/var/run/docker.sock edowon0623/docker:latest /usr/sbin/init
ansible-server
docker run -itd -p 20022:22 -e container=docker --tmpfs /run --tmpfs /tmp -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /var/run/docker.sock:/var/run/docker.sock edowon0623/ansible:latest /usr/sbin/init
Ansible, K8s, SSH
Jenkins + Ansible + Kubernetes 와의 연동 챕터에서 Ansible 서버 -> Windows 호스트로 SSH 연결하는 부분이 있습니다. Windows의 경우 SSH 활성화, 환경 구축 등 추가 작업이 필요하고, 알 수 없는 오류가 자주 발생하여 아래 방법으로 진행하는 것이 쉬웠습니다.
우선, Ansible 서버에서 Windows 호스트에 SSH로 연결하는 이유는 Windows 호스트에 K8s 관리를 위한 kubectl
실행 환경이 구축되어 있기 때문입니다( 도커가 K8s 활성화 시 자동 구축 ).
그러므로 kubectl
실행 환경을 별도 리눅스 컨테이너에 구축하여 진행하실 수 있습니다.
리눅스 컨테이너
docker-server 이미지를 재활용해 별도 리눅스 컨테이너( kubectl-server )를 생성합니다.
docker run -itd --name kubectl-server -p 90022:22 -e container=docker --tmpfs /run --tmpfs /tmp -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /var/run/docker.sock:/var/run/docker.sock edowon0623/docker:latest /usr/sbin/init
해당 컨테이너에 SSH 등으로 접속한 후 kubectl
을 설치합니다. 아래 명령을 차례대로 실행합니다.
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl 환경 설정
kubectl
은 기본적으로 ~/.kube/config
파일에서 마스터 노드 접속 정보를 읽습니다. 위에선 kubectl
을 설치했을 뿐, 접속 정보를 구성하지 않았기 때문에 추가 작업이 필요합니다.
Windows에서 minikube를 활성화한 경우 사용자 폴더/.kube
폴더에 config
파일이 존재합니다. 해당 파일의 내용을 복사하여 리눅스 컨테이너( kubectl-server )의 ~/.kube/config
파일에 붙여넣습니다. 리눅스 컨테이너에는 디렉토리와 파일이 없을텐데, 만드시면 됩니다.
테스트
kubectl
명령이 정상적으로 실행되는지 확인합니다.
kubectl get nodes
진행 방법
K8s 관련 부분을 kubectl-server에서 진행하시면 됩니다. 예를 들어 Ansible이 SSH로 Windows 호스트에 접근하는 대신, kubectl-server에 접근하도록 구성합니다.
안녕하세요, 이도원입니다.
아래 내용도 참고해 보시기 바랍니다.
https://www.inflearn.com/course/lecture?courseSlug=젠킨스-ci-cd-파이프라인&unitId=130047
정보 공유 감사드립니다. ^^;
답글
윈도우 pc에서 리눅스 작업환경으로 구성하고 싶어서 WSL2로 진행하고 있는데요
많은 도움되었습니다. 저와 같은 분들도 많을거라 생각되네요
답글
최경민
2023.03.15참고로, 윈도우 PC WSL2에서 kubectl 환경설정은 저 같은 경우 minikube를 설치하여 테스트 하였습니다.
1.다운로드후
curl -LO minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
2.minikube설치
sudo install minikube-linux-amd64 /usr/local/bin/minikube
3.설치확인
minikube version
4.minikube 시작
minikube start --driver=docker
kubectl 사용할수 있습니다.