1. Kubernetes란?
오픈 소스 기반에 컨테이너화된 애플리케이션의 자동 디플로이, 스케일링 등을 제공하는 관리시스템입니다.
2014년 구글에 의해 설계, 배포되었고 현재는 리눅스 재단에 의해 관리되고 있습니다.
Kubernetes(이하 K8S)의 목적은 여러 클러스터의 호스트 간에 애플리케이션 컨테이너의 배치, 스케일링, 운영을 자동화하기 위한 플랫폼을 제공하기 위함입니다.
Docker를 포함하여 일련의 컨테이너 도구들과 함께 동작하게 됩니다.
이번 포스팅에서도 kubectl과 docker를 이용해볼텐데요, 한 가지 알아둬야 할 점은 최근 K8S 공식 블로그에는 V1.20 발표와 함께 Docker 사용을 중단한다는 글이 올라왔습니다.
(참고 : https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker)
K8S에서 컨테이너 런타임과 통신 할 때 Container Runtime Interface(이하 CRI)라는 표준 인터페이스 API 를 사용합니다.
하지만 Docker는 CRI를 지원하지 않습니다.
그래서 K8S는 “dockershim”라는 브리지용 서비스로 Docker API와 CRI의 변환을 해주었습니다.
V1.20 이후 부턴 이것이 deprecation 되면서 마이너 릴리스 된 후에 “dockershim”은 삭제될 예정입니다.
K8S에서 Dockershim가 사용 중지 되면서 자동으로 Docker를 사용 할 수 없게 되었습니다.
앞으로 K8S에선 CRI를 지원하는 컨테이너 런타임만 사용할 수 있게 되는데,
CRI를 지원하는 컨테이너 런타임은 cri-o와 containerd가 있습니다.
이번엔 docker를 이용하겠지만 추후에는 CRI를 지원하는 컨테이너를 이용하여 포스팅해보겠습니다.
2. MacOS에 kubectl 설치 및 설정하기
MacOS에서 K8S를 사용하기 위해 먼저 kubectl 설치를 진행해보겠습니다.
kubectl은 Kubernetes Cluster manage tool로 K8S reference에선 K8S API 서버와 통신하기 위한 커맨드라인 툴로 소개하고있습니다.kubectl을 통해 cluster를 관리 할 수 있습니다.
설치에 사용한 Mac은 Intel칩을 내장한 2017년형 모델입니다.
Intel과 M1 설치 방법이 다르기 때문에 M1 Mac을 사용하시는 분들은 쿠버네티스 공식 Documentaion을 참고해주세요.
Documentation을 보면 curl, Homebrew, Macports, Google cloud SDK를 사용하여 kubectl을 설치할 수 있습니다.
이번 포스팅에선 curl을 이용하여 설치를 진행해보도록 하겠습니다.
2.1 curl을 사용하여 kubectl 바이너리 설치
1) 최신 release된 k8s 다운로드
#curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"
1-1) 특정 버전의 release를 다운받으려면 $(curl -L -s https://dl.k8s.io/release/stable.txt) 대신 버전을 입력합니다.
#curl -LO "https://dl.k8s.io/release/v1.21.0/bin/darwin/amd64/kubectl"
2) 바이너리 검증(선택 사항)
- 동일한 버전의 바이너리와 체크섬을 다운로드합니다.
2-1) kubectl 체크섬 파일을 다운로드합니다.
#curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl.sha256"
2-2) kubectl 바이너리를 체크섬 파일을 통해 검증합니다.
#echo "$(<kubectl.sha256) kubectl" | shasum -a 256 --check
kubectl: OK가 출력되는 경우 검증에 성공했습니다.
실패한 경우 shasum이 0이 아닌 상태로 종료되며 kubectl: Failed를 출력합니다.
2-3) kubectl 바이너리를 실행 가능하게 합니다.
#chmod +x ./kubectl
2-4) kubectl 바이너리를 시스템 PATH의 파일 위치로 옮깁니다.
#sudo mv ./kubectl /usr/local/bin/kubectl && \
sudo chown root: /usr/local/bin/kubectl
2-5) 설치한 버전이 최신 버전인지 확인합니다.
#kubectl version --client
kubectl v1.21.1이 설치되었습니다.
연습삼아 curl을 이용한 설치를 해보았는데요,
Homebrew, Macports, Google Cloud SDK를 이용하면 훨씬 간편하게 설치할 수 있습니다.
3. MacOS에 Docker desktop을 이용한 kubernetes 활성화
지난번 포스팅에서 MacOS에서 Docker desktop을 설치해보았습니다.
그때 설치했던 Docker desktop을 이용해 k8s를 활성화하여 kubectl 명령어를 확인해보겠습니다.
1) Docker desktop 실행
Docker desktop 실행 후 오른쪽 상단에 있는 톱니 바퀴 모양의 Preferences를 클릭합니다.
2) Kubernetes 활성화
Kubernetes 탭을 누르면 Kubernetes 버전과 몇 가지 설정들을 확인 할 수 있습니다.
Enable Kubernetes를 체크한 수 Apply & Restart 버튼을 클릭합니다.
최초로 활성화 시 시간이 다소 소요됩니다.
Enable이 완료되면 왼쪽 하단에 K8S 상태를 확인 할 수 있고
정상적으로 활성화되었다면 kubectl 명령어를 사용할 수 있습니다.
4. kubectl 명령어
4.1 버전 확인
- 클라이언트와 서버 버전 확인
$ kubectl version --output yaml
4.2 컨텍스트 확인
$kubectl config get-contexts
4.3 노드 확인
- 쿠버네티스에서 워커 머신(작업 장비)을 의미하며 클러스터에 따라 가상 또는 물리 머신일 수 있습니다.
각 노드는 마스터에 의해 관리되며 하나의 노드는 여러 개의 파드를 가질 수 있고,
K8S 마스터는 클러스터 내 노드를 통해 파드에 대한 스케쥴링을 자동으로 처리합니다.
$kubectl get nodes
4.4 파드 확인
- 파드란 단일 노드에 배포된 하나 이상의 컨테이너 그룹으로 파드에 있는 모든 컨테이너는 IP 주소, IPC, 호스트 이름, 기타 리소스를 공유하며 기본 컨테이너에서 네트워크와 스토리지를 추상화합니다.
하단의 명령어는 모든 파드를 일반 텍스트 출력 형식으로 나열합니다.
$kubectl get pods --all-namespaces
5. 인용 및 참고 자료
쿠버네티스, 위키백과, https://ko.wikipedia.org/wiki/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4
쿠버네티스 : KUBERNETES 1.20 부터 DOCKER 사용을 중단합니다., https://www.openmaru.io/%ec%bf%a0%eb%b2%84%eb%84%a4%ed%8b%b0%ec%8a%a4-%ec%99%80-%eb%8f%84%ec%bb%a4/?fbclid=IwAR1FTavA3X65cf0J3fmJFm_bda0keRlgGNyto0zq2Gs-vczo9TVZmaKBIPg_aem_ATe3QPa_yfcj0m_5MyrazXYt5dk9D0SY6paiZTaSPRgnc0hQXSW4SxKPQtpjXxSqdTbGFrGRSYYjhxNthqvyXlqrf-F0UAhig5Lb3i_PK2-Xuw
쿠버네티스 Documentation, https://kubernetes.io/
도커(Docker), 쿠버네티스(Kubernetes) 통합 도커 데스크톱을 스테이블 채널에 릴리즈, https://www.44bits.io/ko/post/news--release-docker-desktop-with-kubernetes-to-stable-channel
'공부 > web' 카테고리의 다른 글
MacOS에서 Docker 사용해보기 (0) | 2021.04.30 |
---|---|
Docker란 무엇인가? (0) | 2021.03.31 |