Linux 쿠버네티스(2)
Linux 쿠버네티스(2)
Kubbernetes
파드(POD)
- 파드(Pod)
- 컨테이너의 추상화 시켜 놓은 단위
- 쿠버네티스에서 배포하는 최소단위
- 하나의 POD에는 여러개의 Container가 들어갈 수 있다.
- POD는 여러 컨테이너가 들어있어도 하나의 아이피를 갖는다.
다중 컨테이너 파드(Multi-container Pod)
1 2 3 4
vi multi-pod.yaml kubectl create -f multi-pod.yaml kubectl exec multipod -c centos-container -it -- /bin/bash kubectl logs multipod -c centos-container
- 라이브니스 프로브(Liveness Probe)
- Probe 종류
- Liveness Probe
- Readness Probe
- Startup Probe
현재에서는 세개의 차이를 아는 것은 너무 고급 과정이다
- Liveness Probe
httpGet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
# HTTP get livenessProbe: httpGet: path: / port: 80 # TCP SOCKET livenessProbe: tcpSocket: port: 22 # exec livenessProbe: exec: command: - ls - /tmp/datafile
- Liveness Probe parameter
- Probe 종류
초기화 컨테이너(init container)
- 앱 컨테이너(main container)가 동작하기 위한 전초 작업을 위한 컨테이너이다.
- ex. (WEB <-> DB) 환경에서 웹 컨테이너 에서 DB 컨테이너가 기동되었는지를 위한 작업
- (Network) 네트워크 인프라 점검 위한 전초 작업
- main container가 실행되기 전에 사전 작업이 필요할 경우 사용한다.
- 초기화 컨테이너가 모두 실행후에 앱 컨테이너를 실행한다.
- 초기화 컨테이너는 앱 이미지에는 없는 유틸리티 또는 설정 스크립트 등을 포함할 수 있다.
1
2
3
4
5
6
7
8
9
spec:
containers:
- name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox:1.28
command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
파드 인프라 언테이너 (Pause 컨테이너)
- 인프라 컨테이너
- 앱 컨테이너의 인프라를 생성 및 삭제를 담당하는 컨테이너
STATIC POD(중요!)
- 정적 파드
- API 서버 없이 특정 노드에 있는 kubelet 데몬에 의해 직접 관리
- /etc/kubernetes/manifests/ 디렉토리에 k8s yaml 파일을 저장시 적용됨
- 정적 파드 용도
- 각 노드에서 사용해야하는 파드들을 실행할때 사용
- ex. 쿠버네티스 노드를 관리하는 파드
- ex. 데이터를 수집하는 파드
- 각 노드에서 사용해야하는 파드들을 실행할때 사용
- 해당 노드에서만 동작해야하는 파드가 있다. 그럴 경우 사용한다.
- 구성
- /var/lib/kubelet/config.yaml 꼭 확인해주기(노드에 들어가서 작업)
- staticPodPath 경로를 바꾸라고 하면 바꿔주면 된다.
- 그 후 systemctl restart kubelet 해주면 됨!
- 관련 폴더
- /var/lib/kubulet/config.yaml
- staticPodPath: /etc/kubernetes/manifests
- /etc/kubernetes/manifests
- vi /etc/kubernetes/manifests/newpod.yaml
- /var/lib/kubulet/config.yaml
파드 자원 할당
- 자원 할당
- cpu( 단위: 1core/1vCPU = 1000m )
- mem( 단위: 500Mi, 1Gi, ..)
1 2 3 4 5 6 7 8 9 10 11 12
containers: - name: nginx-container image: nginx:1.14 ports: - containerPort: 80 resources: requests: cpu: "200m" memory: "250Mi" limits: cpu: "1" memory: "500Mi"
- 할당된 리소스보다 더 많은 리소스를 가진 파드는 실행 불가(배포불가, pending상태)하다.
request만 줬을 때
limit만 줬을 때
둘 다 줬을 때
파드 환경 변수 (중요)
- 파드의 환경 변수 설정
1
2
3
4
5
6
7
8
9
# vi pod-env.yaml
containers:
- name: mysql-container
image: mysql
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: password
Pod 구성 패턴의 종류
sidecar adaptor ambassador
–dry-run=client -o yaml
apply : 계속 추가해줌 create: 있으면 그냥 에러남
0401 workload resource
deployment : DB 제외 나머지 statefulset : DB
## 리플리케이션 컨트롤러 파드의 개수를 보장
요구하는 pod개수가 부족하면 template을 이용해 pod를 추가 요구하는 pod 수보다 많으면 -> 최근에 생성된 pod 삭제
selector key: value 형식
- Label vs Selector
- label: 분류
- selector : 분류를 선택한다.
template: 컨테이너 정의가 들어감(컨테이너 이름들)
This post is licensed under CC BY 4.0 by the author.