본문 은 용기 기술 학습 시리즈 의 문장 총목록 에 수록되어 있다 1. kubernetes 자원 인식 1.1 공통 리소스/객체 workload 작업 부하형 자원:pod,ReplicaSet,Deployment,StatefulSet,daemonset,job... 서버 검색 및 균형: 서비스, Lngress... 구성 및 저장:volume, CSI configmap,secret downwardAPI
클러스터 수준 리소스 namespace,node,role,clusterrole,rolebinding,clusterrolebinding
메타데이터 리소스 HPA,podtemplate,limitrange
1.2 리소스를 만드는 방법 apiserver는 JSON 형식의 자원 정의만 수락합니다. yaml 포맷은 설정 목록을 제공합니다.apiserver는 자동으로 JSON 포맷으로 변환한 다음 제출할 수 있습니다.
1.3 대부분(메인스트림) 리소스의 구성 목록: 5개의 1단계 필드로 구성 apiserver:group/version 현재 지원하는 apiserver 조회: $kubectl api-versions kind: 리소스 범주metadata:메타데이터 name: 이름namespace: 명칭 공간 labels: 레이블annotation: 자원 주석selfLink: 자원별 인용 PATH,/api/GROUP/VERSION/namespaces/NAMESPACE/TYPE/NAME spec: 기대 상태(disired state), 기대 자원은 어떤 특성에 사용해야 하는지status: 현재 상태 (current state), 이 필드는kubernetes 그룹에서 유지보수되며 사용자가 직접 정의할 수 없습니다 1.4 kubectl explain을 사용하여 각 리소스의 구성 방법 조회 (1) 예를 들어pod자원을 어떻게 정의하는지 조회
[root@master ~]# kubectl explain pod
KIND: Pod
VERSION: v1
DESCRIPTION:
Pod is a collection of containers that can run on a host. This resource is
created by clients and scheduled onto hosts.
FIELDS:
apiVersion
... ...
kind
... ...
metadata
[root@master manifests]# kubectl delete -f pod-demo.yaml
pod "pod-demo" deleted
[root@master manifests]# kubectl get pods
No resources found.
2. Pod 리소스 2.1 Pod 리소스 공통 옵션 metadata.label: 태그 key=value 키:문자,숫자,,-,. value: 공백일 수 있으며 알파벳이나 숫자의 시작과 끝만 사용할 수 있으며 중간에 알파벳, 숫자,,-,를 사용할 수 있습니다.
metadata.annotations: 리소스 메모 spec.containers - name: 컨테이너 이름image: 대칭복사imagePullPolicy: 거울을 볼 때 latest 탭을 다운로드하면 기본적으로 Always입니다.그렇지 않으면 기본 IfNotPresen Always는 항상 미러링되며, Never는 미러링을 다운로드하지 않으며, IfNotPresent 로컬에 있는 경우 다운로드하지 않음 ports: 용기에서 공개된 포트 목록 containerPort: Pod의 서비스 포트 번호hostIP: 호스트에 바인딩된 IP 노출hostPort: 호스트에 노출된 포트 번호name: 이 포트의 이름을 노출합니다 args: 매개 변수command: 명령 실행 spec.nodeSelector: 노드 태그 선택기 2.2 데모 (1)pod-demo 수정yaml 파일
[root@master manifests]# kubectl label node node1 disktype=ssd
[root@master manifests]# kubectl get nodes node1 --show-labels
NAME STATUS ROLES AGE VERSION LABELS
node1 Ready 140d v1.11.2 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/hostname=node1
(3)yaml 파일 기반pod 만들기
[root@master manifests]# kubectl create -f pod-demo.yaml
pod/pod-demo created
(4) 검증
--- pod node1 , node1 disktype=ssd
[root@master manifests]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
pod-demo 2/2 Running 0 11s 10.244.1.68 node1
--- -l ,
[root@master manifests]# kubectl get pods --show-labels -l app
NAME READY STATUS RESTARTS AGE LABELS
pod-demo 2/2 Running 0 30s app=myapp,tier=frontend
3. Pod 건강 검사 3.1pod 건강 검진 안내 pod 건강 검측은 생존성 탐지, 준비형 탐지로 나뉜다.이것은 생산 환경에서 거의 반드시 배치해야 한다. 준비형 탐지가 없으면;pod가 시작되면 사용자 데이터가 분배됩니다.만약pod의 서비스가tomcat 등과 같으면 시작할 시간이 필요합니다.일정 시간 동안 사용자가 서비스에 접근하지 못하게 할 수 있다. 만약 생존성 탐지가 없다면:pod에서 서비스가 실패하면 탐지가 없으면 용기를 다시 닫지 않습니다.또한 사용자가 서비스에 액세스하지 못할 수도 있습니다.
3.2pod 상태 점검 옵션 (1) 스펙 필드 아래,containers 필드 설정,explain으로 자세한 사용 방법 보기 $ kubectl explain pod.spec.containers. livenessProbe 생존 탐지 exec: 감지 명령 지정failureThreshold: 연속 실패 횟수는 실패로 간주되며 기본값은 3이고 최소값은 1httpGet: 실행할 http 요청 지정initialDelaySeconds: 용기가 시작된 지 몇 초 후에 다시 검사periodSeconds: 몇 초 간격으로 탐지하기;기본값은 10초입니다.최저 한도는 1 successThreshold: 연속 성공 횟수는 서비스가 정상이라고 판단tcpSocket: TCP 포트에 대한 작업 지정timeoutSeconds: 시간 초과를 탐지하는 초, 기본값은 1초 readinessProbe 준비형 탐지 (livenessProbe 생존성 탐지 옵션과 같음) (2)pod에서 용기가 끊겼습니다.pod를 다시 시작할지 여부 $ kubectl explain pod.spec.restartPolicy. Always: 항상 재부팅(기본값)OnFailure: 컨테이너 상태가 잘못된 경우에만 재부팅Never: 절대 재부팅하지 않음 3.3 시범: exec 방식으로 생존성 탐지 실현 (1) yaml 파일 작성 /tmp/healthy 파일이 존재하지 않을 때 서비스 고장으로 간주하기; 컨테이너 삭제/tmp/healthy 파일 30초 후 실행
[root@master manifests]# kubectl create -f liveness-exec.yaml
pod/liveness-exec-pod created
[root@master manifests]# kubectl get pods
NAME READY STATUS RESTARTS AGE
liveness-exec-pod 1/1 Running 0 6s
(3) 등 30s를 기다리면 용기가 검측에 실패하고pod를 다시 시작합니다.describe를 사용하면 상세한 정보를 볼 수 있습니다
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
readiness-exec-pod 0/1 RunContainerError 1 12s
4、Pod 부팅 전/후면 갈고리 4.1 소개 pod는 시작 전후에 갈고리 훅을 설정할 수 있다.spec.containers에서lifecycle 필드에서 설정하기; postStart: 컨테이너를 만든 후 바로 PostStart 작업을 호출합니다.실패하면 재시작 정책에 따라 종료합니다. preStop: 프로세서가 완료되면 컨테이너가 종료되는 즉시 PreStop 작업을 호출합니다.
4.2 문법 $ kubectl explain pod.spec.containers.lifecycle postStart exec: 실행할 명령을 지정했습니다. httpGet: 실행할 http 요청을 지정합니다. tcpSocket: TCP 포트에 대한 작업 지정 preStop(postStart 명령과 동일) 4.3 설명: exec 설정pod 시작 전 갈고리 사용하기 (1)yaml 파일을 작성하고 시작 용기 만들기 용기를 시작하기 전에 httpd 서비스를 준비하는 메인 파일/tmp/index를 만듭니다.html