2. First Steps with Kubernetes
나는 처음에 Docker만 사용할 줄 알고, kubernetes는 이름만 들어본 정도여서,
처음에는 Docker랑 상관없는 별개의 Container system이 기능만 다양해진 거라고 생각했다.
그래서 유료 강의들, 책 앞부분에 항상 docker container에 대해서 다루는 걸 보면서, "아, docker보다는 쿠버네티스에 대해서 다뤄주지..." 같은 멍청한 생각을 했었다.
Kubernetes는 Docker, 혹은 다른 Container 시스템을 사용해서 돌아가는, Container를 대신 다뤄주는 시스템이다.(kubernetes가 별개로 컨테이너 시스템을 갖춘것이 아니다.)
그래서 처음에는 docker에서 쓰는 명령어를 거의 안쓰니까 손대기가 너무 싫었던 기억이 난다.
열심히 공부해서 쌓아올렸는데 쿠버네티스가 대신 써줘서 나는 쓸 일이 없다니까...
이 책도 마찬가지로, 시작 부분은 저자가 만들어 놓은 Docker Container를 실행해 보는 과정을 거치며, docker에 대해 알고 있으면 솔직히 그냥 넘겨도 되는 챕터다. 마지막에 minikube, docker desktop을 통해 간단하게 kubernetes를 실행하지만, 나는 kubernetes 클러스터를 terraform을 통해 만들었으니까 사용해보지 않고 넘어갔다.
3. Getting Kubernetes
쿠버네티스의 간단한 내부구조, 클러스터 구축에 대한 저자의 생각, Managed service 목록들, kubernetes installer들
kube-apiserver : 직접 구축해서 써보고 알았는데, Kubectl 등의 명령어는 마스터 노드에서 실행할 수는 있지만, 내 노트북에서 원격으로 실행하는건 생각보다 불편하고(권한 파일을 노트북으로 옮긴후 각 kubectl 명령 뒤에 key_code 같은걸 일일이 붙여서 실행해야 한다.), 보안상의 문제가 있다. {내가 틀렸을 수도 있다.}
그래서 마스터에 직접 접속할게 아니라면, 보통은 kubernetes의 api server에 api 호출을 통해 명령을 전달한다.
etcd : 쿠버네티스의 전신때 부터 있었던 스토리지, 쿠버네티스의 resourece들의 정보나 명령 들을 저장하는 분산스토리지다.
kube-scheduler : pod의 스케줄링을 책임진다.
kubelet : 컨테이너 런타임(docker 등) 을 실행하는 역할을 맞는다.
쿠버네티스 구축에는 이런 여러가지 내부구조들에 대한 고민도 필요하고, 네트워크 구성이라던지, master, worker의 고가용성 설계 등 management overhead가 큰 편이다.
따라서 저자는 직접 구축하기 보다는 Managed Service를 쓰길 권장한다. 기업에서 수행한다면 개발자가 쿠버네티스를 처음부터 구축하려고 낑낑거리고, 완성 후에도 관리에 코스트가 들어가는 것보다는 비용을 지불하고 fully managed service들을 쓰는게 맞다고 생각한다. (하지만 나는 가난해서... 직접 만들었다... 그래서 지금 Spot instance가 꺼지면서 생기는 master failure를 해결하느라 공부 진행이 더뎌지고 있다...)
# Fully managed Service들 : 이들 중에서도 저자는 쿠버네티스를 만들어낸 구글의 서비스를 제일 높게 평가하고 있다.
구글 - GKE
AWS - EKS
Azure - AKS
OpenShift
IBM cloud kubernetes service
HKS
# Turnky Kubernetes Solutions : 생성을 자동으로 해주는 서비스들
Stackpoint
CKE
# kubernetes installers
kops
kubespray
tk8 : 테라폼 연동이다. 근데 난 이런거 있는 줄도 모르고 terraform으로는 인스턴스, vpc등만 구성하고, kubeadm으로 직접 설치했다...
# 직접 설치 (The Hard Way)
kubeadm
tarmak
RKE
puppet kubernetes module
kubeformation
현재는 일단 Terraform으로 인스턴스들을 생성하고, userdata로 kubernetes 를 설치한 뒤에, python script로 master에 worker들을 이어붙이는 ad-hoc script를 짰다... 그랬다가 master failure에 정신 못차리는 중이다.
=> 다음으로는 s3에 master url을 올리고 worker들에게 읽어와서 연결 시키게 하고, master fault시 새 master가 url을 수정하게 하려고 한다... 나도 완전 관리형 서비스 쓰고 싶다...
'기술서적 > Cloud Native DevOps with Kubernetes' 카테고리의 다른 글
5. Managing Resources (0) | 2023.06.01 |
---|---|
4. Working with Kubernetes Objects (0) | 2023.06.01 |
1. Revolution in the Cloud (0) | 2023.05.31 |