출처 : 따배쿠 4 (Youtube)
1. Container image를 구성하고 이를 hub 저장(docker-compose...)
2. 실행시키고 싶은 image를 control plane(master)의 API에게 전달(kubectl create, kubectl run...)
3. control plane의 scheduler가 container를 실행시킬 적당한 워커노드를 찾음
4. 해당 worker node의 kublet에게 container 실행 요청을 전달
5. kubelet은 docker에게 요청 전달
6. docker는 hub의 이미지를 끌어와 container를 run
pod
: 쿠버네티스 포드는 Linux 컨테이너를 하나 이상 모아 놓은 것으로, 쿠버네티스 애플리케이션의 최소 단위입니다.
replicaset
: 동일한 역할을 하는 하나 이상의 pod(scale out 의 관점)
deployment
: Pod, replicaset 의 desired state이며 deployment controller
는 actual state를 desired state로 유지시켜주는 역할을 함
1. master 컴포넌트
2. 워커 노드 컴포넌트
k8s 컨테이너 실행 시나리오
addon
: k8s 기능을 확장하는 역할, base로 설치되는 것도 있음
1. Automated rollouts and rollbacks
변화를 반영할때 instace를 한번에 다 죽이는게 아니라 순차적으로 update함(rollout), update하는 도중 뭔가 잘못되면 rollback
2. Storage orchestration
원하는 storage system에 자동으로 마운트(docker volume 인듯)
3. Secret and configuration management
사용자의 이미지를 다시 빌드하거나 스택 구성의 시크릿을 노출하지 않고 시크릿과 애플리케이션 구성을 배포하고 업데이트한다.
4. Batch execution
쿠버네티스는 서비스 외에도 배치(batch)와 CI 워크로드를 관리할 수 있으며, 원하는 경우 실패한 컨테이너를 교체할 수 있다.
5. IPv4/IPv6 dual-stack
파드와 서비스에 IPv4와 IPv6 주소 할당
6. Service discovery and load balancing
쿠버네티스를 사용하면 익숙하지 않은 서비스 디스커버리 메커니즘을 사용하기 위해 애플리케이션을 수정할 필요가 없다. 쿠버네티스는 파드에게 고유한 IP 주소와 파드 집합에 대한 단일 DNS 명을 부여하고, 그것들 간에 로드-밸런스를 수행할 수 있다.
service discovery
: service client가 service 의 위치(ip,port)를 알아내는 것
7. Self-healing
오류가 발생한 컨테이너를 재시작하고, 노드가 죽었을 때 컨테이너를 교체하기 위해 다시 스케줄하고, 사용자 정의 상태 체크에 응답하지 않는 컨테이너를 제거하며, 서비스를 제공할 준비가 될 때까지 클라이언트에 해당 컨테이너를 알리지 않는다.
8. Automatic bin packing
각 컨테이너에 필요한 CPU, 메모리를 요구사항에 맞게 자동으로 할당해준다
9. Horizontal scaling
간단한 명령어나 UI를 통해서 또는 CPU 사용량에 따라 자동으로 애플리케이션의 스케일을 업 또는 다운한다.
10. Designed for extensibility
Upstream source code 변경없이 kubernetes cluster에 feature를 추가할 수 있다.
클러스터 하나를 여러개의 논리적인 단위로 나눠서 사용하는데 namespace
는 이러한 논리적인 단위를 말한다.
용도에 따라 실행해야하는 앱을 구분할때나
쿠버네티스 클러스터 하나를 여러팀이나 사용자가 함께 공유할때 유용하게 사용할 수 있다.
kubectl get namespaces
default : 기본적으로 생성되는 base namespace
kube-.. : kubenetes 동작에 관련되 namespace
kubectl create namespace 네임스페이스이름 : cli 방법
kubectl create namespace 네임스페이스이름 --dry-run -o yaml > .yaml : yaml 파일 생성해서 kubectl create -f .yaml
kubectl config view
: config 정보 보여줌
kubectl config set-context blue --cluster=minikube --user=minikube --namespace=blue
: minikube cluster 에 minikube 권한을 가지고 blue namespace를 쓰는 blue context를 생성
kubectl config current-context
: 현재 사용중인 context를 보여줌
kubectl config use-context 컨텍스트 이름
: context switch 해줌
kubectl delete namespace blue
: blue namespace 삭제, namespace안에 포함된 것들이 모두 삭제되니 주의
kubectl config delete-context 컨텍스트이름
: 컨텍스트 삭제
사람이 쉽게 읽을 수 있는 데이터 직렬화 양식
#!syntax yaml
name: Rust
on:
push:
branches: [master]
pull_request:
branches: [master]
env:
CARGO_TERM_COLOR: always
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build
run: cargo build --verbose
- name: Run tests
run: cargo test --verbose
출처 : 나무위키
kuberentes object 정의 시 apiVersion이 필요하며 각 Object마다 version이 다를 수 있다.
kubectl api-resources
: object들의 정보
kubectl explain 오브젝트
: 오브젝트에 대한 정보를 보여줌