Kubernetes container runtime
: 쿠버네티스 1.24 이후부터 도커 컨테이너 엔진 지원 종료에 따른 컨테이너 엔진 교체
CRI 도커 컨테이너 런타임
: cri-dockerd_0.2.6.3.0.ubuntu-jammy_amd64.deb 파일 사용
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
sudo kubeadm join 10.0.1.212:6443 --token k5yjpk.p4sj5m4zm7c0z4ie \
--discovery-token-ca-cert-hash sha256:aca0eaed572a1fcd37d05ed954e5167174a851f8c53002438e48eaed0d90fc0f --cri-socket "unix:///var/run/cri-dockerd.sock"
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
쿠버네티스에서 하나의 독립적인 서비스를 제공할 수 있는 컨테이너들을 모아서 관리하는 최소 배포 단위
Pod 단위로 컨테이너 작성/시작/정지/삭제 등의 조작 수행
Pod 당 하나의 컨테이너 모델, 가장 일반적인 형태
Pod에 밀접한 연관성을 가진 컨테이너를 배치하여 연관성 있는 컨테이너 간 리소스를 공유하는 형태의 캡슐화된 모델
kubectl run webserver --image=nginx --port=80
: default namespace에 Pod 생성
kubectl run webserver2 --image=nginx --port=80 --namespace myspace
: myspace namespace에 Pod 생성
kubectl get pods -o wide : default namespace Pod 목록 확인
kubectl get pods -o wide --all-namespaces : 모든 namespace의 Pod 목록 확인
kubectl get pods -o wide --namespace myspace : myspace namespace Pod 목록 확인
kubectl describe pod/webserver --namespace myspace
: myspace namespace의 webserver Pod 상세 정보 확인
https://kubernetes.io/ko/docs/tasks/debug/debug-application/_print/
apiVersion: v1
kind: Pod
metadata:
name: webserver
labels:
app: myweb
spec:
containers:
- name: nginx-container
image: nginx:latest
ports:
- containerPort: 80
apiVersion: v1
kind: Pod
metadata:
name: kubetm
spec:
containers:
- name: container1
image: kubetm/p8000
ports:
- containerPort: 8000
- name: container2
image: kubetm/p8080
ports:
- containerPort: 8080
임의의 라벨을 설정하여 클러스터 안에서 편리하게 관리
apiVersion: v1
kind: Pod
metadata:
name: webserver
labels:
type: app
lo: dev
spec:
containers:
- name: nginx-container
image: nginx:latest
ports:
- containerPort: 80
Pod가 생성하여 동작하는 노드(워커 노드)를 결정하는 방법
apiVersion: v1
kind: Pod
metadata:
name: webserver
labels:
app: myweb
spec:
nodeSelector:
kubernetes.io/hostname: worker1.example.com
containers:
- name: nginx-container
image: nginx:latest
ports:
- containerPort: 80
kubectl describe pods <Pod 이름> 명령으로 생명 주기 확인
Pod 생성을 기다리는 상태
컨테이너 이미지 다운로드 등 시간이 걸리는 경우 발생
Pod 정상 작동 중인 상태
Pod 안의 컨테이너가 정상적으로 종료된 상태
Pod 안의 컨테이너 중 하나의 컨테이너가 실패하여 종료된 상태
어떤 이유로 Pod와 통신할 수 없는 상태
모든 초기화 컨테이너가 성공적으로 시작 완료
Pod는 요청 실행 가능; 연결된 모든 서비스의 Load Balancing pool에 추가되어야 함
Pod 안 모든 컨테이너가 준비 상태
Pod가 하나의 노드로 스케쥴 완료했음
스케쥴이 자원부족 또는 다른 제약 등으로 지금 당장 Pod 스케쥴 불가능
Pod의 일부분으로 정의되는 요소, Pod와 동일한 생명주기를 갖는 disk storage
일시적인 데이터 저장시 사용하는 빈 디렉토리
워커 노드의 파일 시스템을 Pod의 디렉토리로 마운트하여 사용
NFS 공유 Pod에 마운트
Amazon EBS, GCE Persistent Disk, Azure Disk Volume
쿠버네티스 리소스나 클러스터 정보를 Pod에 노출하는 데 사용되는 특별한 유형의 볼륨
사전 혹은 동적으로 프로비저닝된 persistent storage 사용하는 방법
apiVersion: v1
kind: Pod
metadata:
name: fortune
labels:
app: exam-volume
spec:
containers:
- image: luksa/fortune
name: html-generator
volumeMounts:
- name: html
mountPath: /var/htdocs
- image: nginx:alpine
name: webserver
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
readOnly: true
ports:
- containerPort: 80
protocol: TCP
volumes:
- name: html
emptyDir: {}
Pod가 실행되는 노드 (워커 노드)에서 수행