파드는 생성과 삭제를 반복하는데, 이때 중요한 데이터는 따로 저장해두어야 한다. 또한 데이터를 여러 파드가 공유할 수도 있다. 쿠버네티스에서는 다양한 형태의 볼륨을 제공한다. PV(PersistentVolume) 볼륨을 사용할 수 있게 준비함 apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv spec: capacity: storage: 100Mi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain nfs: server: 192.168.1.10 path: /nfs_shared 여기서 선언한 storage는 단순히 레이블의 의미만 가지며 실제로 사용량을 제한하지 않는다. access..
클라우드 공부/Docker & K8S
가상머신에서 로컬 클러스터를 사용했다. Service 파드는 클러스터 내에서 유동적이기 때문에 새로 생길 때마다 접속 정보가 변경된다. 이에 내/외부에서 파드 접속을 안정적으로 할 수 있게 도와주는 것이 쿠버네티스에서 서비스의 역할이다. 파드가 생성될 때 부여되는 IP를 가지고 연결한다. NodePort yaml에 NodePort type 선언하기 [root@m-k8s ~]# cat _Book_k8sInfra/ch3/3.3.1/nodeport.yaml apiVersion: v1 kind: Service metadata: name: np-svc spec: selector: app: np-pods ports: - name: http protocol: TCP port: 80 targetPort: 80 node..
파드 자체에 문제가 생기거나, 파드 내부에서 동작 중인 컨테이너에 문제가 생길 수 있는데, 두 가지 상황에 대해 자동 복구가 가능하다. 컨테이너 자동 복구 파드에서 동작 중인 컨테이너에 문제 발생 시, 파드가 컨테이너를 자동으로 재시작하거나 교체하여 항상 정상 작동을 유지할 수 있도록 노력한다. self-healing이라고도 한다. [root@m-k8s ~]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES echo-hname-7894b67f-8mb7s 1/1 Running 0 101m 172.16.132.1 w3-k8s echo-hname-7894b67f-kflct 1/1 Runni..
pod 생성 방식 정리 run 쉽게 파드 생성 가능 단일 파드 1개 생성 yaml 파일을 사용한 파드 생성 불가능 create 파드만 생성할 수는 없고 파드를 관리하는 deployment를 생성할 수 있음 yaml 파일을 사용한 오브젝트 생성 가능 apply yaml 파일을 사용한 오브젝트 생성 가능 YAML 문법으로 object spec 파일을 작성하여 원하는 스펙과 상태를 저장한다. # echo-hname.yaml apiVersion: apps/v1 # API 버전 kind: Deployment # 오브젝트 종류 metadata: name: echo-hname labels: app: nginx spec: replicas: 3 # 몇 개의 파드를 생성할지 결정 selector: matchLabels: ..
kubernetes에서 object란 spec과 status 등의 값을 포함한 파드, 디플로이먼트 등을 부르는 단위이다. Pod 쿠버네티스에서 실행되는 최소 단위 독립적인 공간과 사용 가능한 IP를 가짐 하나의 파드는 1개 이상의 컨테이너를 가지지만 보통 파드 1개당 1개의 컨테이너를 적용 run으로 파드를 생성하면 단일 파드 1개만 생성되고, create deployment로 파드를 생성하면 deployment라는 그룹 내에서 파드가 생성되고 deployment에 의해 파드가 관리된다. [root@m-k8s ~]# kubectl run nginx-pod --image=nginx pod/nginx-pod created [root@m-k8s ~]# kubectl get pod NAME READY STATU..
kubernetes에서 object란 spec과 status 등의 값을 포함한 파드, 디플로이먼트 등을 부르는 단위이다. Deployment 파드에 기반을 두고 있으며, 레플리카셋 오브젝트를 합친 상태 API 서버와 컨트롤러 매니저는 단순히 파드가 생성되는 것을 감시하는 것이 아니라 디플로이먼트처럼 레플리카셋을 포함하는 오브젝트의 생성 감시 [root@m-k8s ~]# kubectl create deployment dpy-hname --image=sysnet4admin/echo-hname deployment.apps/dpy-hname created [root@m-k8s ~]# kubectl get pod NAME READY STATUS RESTARTS AGE dpy-hname-59778b9bb-7kcz4..
[kubernetes] kubectl 동작 방식 확인 [kubernetes] kubelet 동작 방식 확인 [kubernetes] kube-proxy 동작 방식 확인 kube-proxy 파드의 통신을 담당한다. 이를 증명하기 위해 파드의 통신에 문제를 발생시켜 본다. 가상머신에서 br_netfilter 모듈을 사용해 네트워크를 연결시킨 로컬 클러스터를 사용중이다. [root@m-k8s ~]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-pod 1/1 Running 0 5s 172.16.132.2 w3-k8s [root@m-k8s ~]# curl 172.16.132.2 We..
[kubernetes] kubectl 동작 방식 확인 [kubernetes] kubelet 동작 방식 확인 [kubernetes] kube-proxy 동작 방식 확인 kubelet kubelet은 쿠버네티스에서 파드의 생성과 상태 관리 및 복구를 담당한다. kubelet에 문제가 생기면 파드가 정상적으로 관리되지 않는다. [root@m-k8s ~]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-pod 1/1 Running 0 16s 172.16.132.4 w3-k8s 마스터 노드에서 pod를 생성한다. pod는 현재 w3-k8s 노드에서 동작 중이다. [root@w3-k..
1. kubectl을 통해 API 서버에 파드 생성 요청 2. 업데이트가 있을 때마다 내용을 API 서버를 통해 etcd에 기록함 3. API 서버에 파드 생성이 요청된 것을 컨트롤러 매니저가 인지하면 컨트롤러 매니저가 파드를 생성하고 상태를 API 서버에 전달, 어떤 워커 노드에 파드를 적용할지는 결정되지 않은 채로 파드만 생성 4. API 서버에 파드가 생성됐다는 정보를 스케줄러가 인지, 스케줄러는 생성된 파드를 어떤 워커 노드에 적용할지 조건을 고려해 결정, 해당 워커 노드에 파드를 띄우도록 요청 5. API 서버에 전달된 정보대로 지정한 워커 노드에 파드가 속해 있는지 스케줄러가 kubelet으로 확인 6. kubelet에서 컨테이너 런타임으로 파드 생성 요청 7. 파드 생성 8. 파드가 사용 가..
[kubernetes] kubectl 동작 방식 확인 [kubernetes] kubelet 동작 방식 확인 [kubernetes] kube-proxy 동작 방식 확인 kubectl 쿠버네티스 클러스터에 명령을 내리는 역할 다른 구성 요소들과 다르게 바로 실행되는 명령 형태인 바이너리로 배포되기 때문에 마스터 노드에 있을 필요는 없음 [vagrant@w3-k8s ~]$ kubectl get nodes The connection to the server localhost:8080 was refused - did you specify the right host or port? 클러스터의 정보가 저장되지 않은 워커 노드에서 클러스터의 정보를 가져오려고 시도할 경우 실패한다. kubectl이 어떤 노드에 있더라도..