Volumes
쿠버네티스는 여러 호스트에 걸쳐 Stateless한 컨테이너를 마이크로 서비스로 배포하는 것이 목표이기에 영속성 있는 저장장치(Persistent Volume)를 고려해야 함
Volume은 Pod에 장착되어, 그 Pod에 있는 Container 간에 공유
PVC 에 원하는 volume 사양을 기입해두고 해당하는 PV mount 가능
Volume 생성 -> host path 필요 -> PV(Persistent Volume) 생성 -> PVC(Persistent Volume Claim) 생성 (namespace resource, spec 기재)
Types of Volumes
Pod에 마운트된 디스크를 Volume Type에 따라 사용 유형이 정의
Volume Type에 의해 디스크의 크기, 내용 등의 속성 설정
Volumes: emptyDir
pv, pvc 개념이 없는 디렉토리
default가 emptyDir
Volumes: hostPath
path는 pod가 배포될 host path
같은 hostPath에 있는 볼륨은 여러 Pod 사이에서 공유
pod인데 deamonSet으로 띄운 애들 -> 모든 worker node에 하나씩 들어가는 것 -> hostPath 사용 많이 함
PV & PVC
우리 namespace가 가지는 pvc를 통해서 storage에 PV가 생성됨
pvc는 namespace별로 만든다.
pv는 관리자에 의해 수동으로 생성될 수 있지만, 자동 생성도 가능
storageClass
root@ip-10-0-1-47:~# kubectl get storageclasses.storage.k8s.io
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
gp2 (default) kubernetes.io/aws-ebs Delete WaitForFirstConsumer false 42h
AWS의 EKS로 만들어서 자동으로 storageclass가 설치되어져 있음
실습
ConfigMaps
configMaps는 컨테이너 이미지로부터 설정 정보를 분리할 수 있게 해준다.
etcd key: value 값이 보여지는 것
secret는 etcd의 값이 base64 인코딩 돼서 보임
ConfigMaps 정보가 k8s 관리자에게서 보이는게 싫다면 Secrets으로 작성하면 됨
Secrets
인증서 정도
Liveness Probes & Readiness Probes
container image -> pod status running
container pod / end-point -> service expose <--- http: user 접속 시도 - page not found...
container 의 instance가 생성되면 running이지만, 구동중인 container image에 어떤 오류가 생겨서 port가 열리지 않는 문제가 생겨서 'page not found'가 됨
나는 이 pod가 80 port에 응답이 있으면 살았다(정상) 이라 라고 생각 할 것임!
-> 응답이 없으면 Liveness가 종료시켰다가 다시 시작함
Readiness는 pods가 응답이 없으면 api server 한테 service end-point에서 빼주세요~ 준비되면 다시 넣어주세요!
Probe Types
- command probe
- HTTP code
- TCP code
Ingress
L4 레이어로 traffic을 정책(policy) 기반으로 routing 통해 traffic을 전달해주는 것
- 각각의 서비스들은 하나의 URL로 접속을 하고 싶다면 진행함
- MSA 서비스간 라우팅을 위해 API Gateway를 두는 경우가 많은데 관리 포인트가 생김
- URL 기반의 라우팅 정도라면 L7(Header까지 볼 수 있음) 로드밸런서 정도의 위의 기능을 충족함
- k8s에서 제공하는 L7 로드밸런싱 컴포넌트를 'Ingress'라고 함
k8s.io
Ingress는 인바운드 연결이 클러스터의 service에 라우팅되도록 하는 규칙의 집합
service들의 Inbound Connection을 지원하기 위해 Ingress는 Layer7의 HTTP Load Balancer 기능 제공
Ingress Controller
오픈소스 기반 구현체 및 클라우드 벤더사가 직접 구현체를 개발해 사용하기도 함
k8s에서 제공해주는게 아님
실습
Ingress Controller 설치하기
두개 서비스를 앞단에서 받아줄 ingress 작성
service의 end-point 정보 가져와야하는데,
cluster etdc database - access 할 수 있는 유일한 api-server
API-server 응답 받기 위해서
1. 인증 - certification
2. 권한 - authorization
ingressController가 api-server 접속하기 위해 인증, 권한을 잡기 위해서 service account
StatefulSets
코드가 재시작이 되더라고 이전에 상태를 알고 있는 것
서로의 상태 정보를 알아야하니까 필요
Resource Assign & Management
리소스 단위
requests, limits 지정
Monitoring and Logging
Ingress controller가 생성 필요 5가지
1. ingress가 사용할 serviceAccount
2. serviceAccount에 할당해줄 role
3. role binding
4. controller를 deamonSet
5. service로 열어야함
그 이후에 ingress rule 생성
Helm
helm을 설치하는건
1. 명령어
2. 구성요소 (client, server)
3. 내 helm의 client인 tiller의 serviceAccount가 role 부여 작업
이 차트를 가지고 gowebapp deployment, service 올리는 작업 진행
chart는 원하는 resource가 다 정의된 것
helm chart면 client이면서 server가 됨
누군가가 만든 chart가져와서 실행해도 됨
root@ip-10-0-1-47:~/environment# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "stable" chart repository
Update Complete.
root@ip-10-0-1-47:~/environment# helm repo list
NAME URL
stable https://charts.helm.sh/stable
local http://127.0.0.1:8879/charts
root@ip-10-0-1-47:~/environment# helm install --name db01 stable/mysql
WARNING: This chart is deprecated
NAME: db01
LAST DEPLOYED: Fri Jan 15 07:23:28 2021
NAMESPACE: hobi
STATUS: DEPLOYED
RESOURCES:
==> v1/ConfigMap
NAME DATA AGE
db01-mysql-test 1 0s
==> v1/Deployment
NAME READY UP-TO-DATE AVAILABLE AGE
db01-mysql 0/1 1 0 0s
==> v1/PersistentVolumeClaim
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
db01-mysql Pending gp2 0s
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
db01-mysql-795bc47584-k6jlm 0/1 Pending 0 0s
==> v1/Secret
NAME TYPE DATA AGE
db01-mysql Opaque 2 0s
==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
db01-mysql ClusterIP 10.100.125.53 <none> 3306/TCP 0s
'Study > kubernetes' 카테고리의 다른 글
kubernetes 강의 #3 (0) | 2021.01.14 |
---|---|
kubernetes 강의 #2 (0) | 2021.01.13 |
kubernetes 강의 #1 (1) | 2021.01.13 |