Linux 쿠버네티스(1)
Linux 쿠버네티스(1)
쿠버네티스
쿠버네티스 소개
- 쿠버네티스
- 2014 구글 안에서 사용하던 컨테이너 오케스트레이션 시스템을 오픈 소스 소프트웨어로 공개한 것이다.
- 쿠버네티스 특징
- 선언적
- 컨테이너가 어떤 상태일지 정하면 지속해서 컨테이너 상태가 해당 설정에 부합하는지 확인한다. 만약 설정한 상태가 아니라면 그것에 맞게 맞춘다.
- 워크로드 분리
- 쿠버네티스를 사용하면 분산 시스템을 제공한다. 분산된 프로세스가 점검과 복구처리를 각각 담당한다.
- 어디서나 실행가능
- 개인 컴퓨터에 설치 가능하며, 퍼블릭 클라우드에서도 실행이 가능하고 설치없이 웹에서도 바로 사용이 가능하다.
- 선언적
쿠버네티스 설치
- 온라인상에서 사용하는 쿠버네티스
- play with kubernetes
- killercoda
- 개발자를 위한 간단한 쿠버네티스 설치
- docker desktop
- minikube
- kind
- 클라우드 업체에서 제공하는 쿠버네티스 서비스
- AWS - EKS
- MS Azure -AKS
- google GCP - GKE
- 쿠버네티스 클러스트를 직접 구성하는 도구
- kubeadm CMD 이용한 쿠버네티스 클러스터 구성
- kOps 이용한 쿠버네티스 클러스터 구축
- kubespray 이요한 쿠버네티스 클러스터 구축 (가장 안정적)
쿠버네티스 컨테이너 실행
- 외워야하는 명령어
- 파드 실행
- kubectl run myweb –image-nginx –port=80
- kubectl create svc clusterip mydeploy –clusterip=’10.233.10.10’ –tcp=”80:80”
- kubectl scale deploy web 관련자료
- kubectl exec myewb -it – /bin/bash
- kubectl run backend –image=busybox -l app=backend – sleep 1d
- api 생성
kubectl apply create deploy mydeploy –image –replicas=3
- 포트포워딩
- kubectl port-forward web 8080:80
- 동작중이 아닌 파드를 dry-run=client 옵션을 써서 yaml파일로 저장
- kubectl run myweb –image-nginx –port=80 –dry-run=client -o yaml > myweb.yml
- 동작중인 파드를 yaml파일로 저장
- kubectl get pods myweb -o yaml > myweb.yaml
- 파드 실행
- cka 준비하면서 빨리빨리 yaml파일을 만들고 편집할 줄 알아야한다.
쿠버네티스 아키텍쳐
- 쿠버네티스 아키텍처
- 쿠버네티스 구성 요소
- Control Plane(master-node)
- api-server
- scheduler
- control manager
- etcd
- Worker Node
- kube-proxy
- kubelet
- container engine
- Control Plane(master-node)
- 쿠버네티스 구성 요소
- 네임스페이스(NameSpace)
- NameSpace vs LABEL
- Namespace: 쿠버네티스 클러스터 내에서 자원을 격리하는 용도
- LABEL: 네임스페이스 안에서 자원을 구분하는 용도
- NameSpace
- namespace 설정
kubectl create ns testns
- namespace 목록 확인
kubectl get ns
- namespace 삭제
kubectl delete ns testns
- namespace 설정
- 클러스터의 NameSpace 바꾸기
- 네임스페이스와 이름 확인
kubectl config get-contexts
- 변경
kubectl config set-context NAME(or –current) –namespace=NAME
- 디폴트 값으로 바꾸기
kubectl config set-context NAME(or –current) –namespace=”default”(–namespace=”“로 해도 무관)
- 네임스페이스와 이름 확인
[참고] kubens, kubectx 스크립트 찾아보기
[참고] kubectl krew
- kubectl krew intall ctx ns
- kubectl ns
- kubectl ctx
- 참고사항: YAML 파일
- 앤서블 참고
- API 버전
- 과정
- namespace 변경(실무에서 필요)
- context 변경
kubectl explain pod > pod에 관한 옵션 보여줌 kubectl explain pod.xxx.xxx pod > 옵션 중 하나의 다른 옵션 보여줌
- kube-api-server : 교통정리해주는 서버
- client 요청 > api server > etcd > scheduler daemon > Node > Kubelet: 노드관리 > container engine
kube-control-manage : node 개수를 유지하기 위해 관찰하는 서버
etcd : 모든 정보(상태나 파드 정보 등)의 저장소
스케쥴링 데몬 : 스케쥴링 해주는 데몬
Kubelet : 노드 관리
- 노드안에는 여러 엔진(컨테이너)이 있고 그 위에 파드가 있음
CNI: container network interface
네트워크 플러그인은 CNI 사양을 구현하는 소프트웨어 구성 요소이다. 포트에 IP 주소를 할당하고 클러스터 내에서 서로 통신할 수 있도록 한다
컨텍스트 정보는 무조건 처음에 바꿔줘야한다.
cat ~/.kube/config
하나의 pod에 여러개의 container가 동작가능하다.
파드의 상태
- pending -> running -> Succeeded/Failed
kubectl describe pod {name-of-pod}
모르면 쿠버네티스 공식 문서 보기
This post is licensed under CC BY 4.0 by the author.