cluster ip, nodeport, loadbalance(metalib 사용), external name
kubectl get pod,svc,deploy --all-namespaces : 모든 namespace의 pod, service, deployment 확인 가능
---
apiVersion: v1
kind: Service
metadata:
name: svc-nginx
labels:
run: nginx
spec:
type: NodePort
ports:
- port: 8080
targetPort: 80
nodePort: 30080
protocol: TCP
selector:
app: web
replicaset: pod의 복제
deployment: replicaset 관리
외부 서비스는 pod, deployment만 가능, 보통 replicaset 관리가 가능한 deployment를 서비스함
다수의 pod를 생성하기 위해 replica를 사용하는것이므로 템플릿이 필요함.
clusterIP - 일종의 부하 분산 서비스. 어떤 노드에 연결될지 모름. = /ㅍ1
nodeport -
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: dep-apache
labels:
dep: apache
spec:
replicas: 3
selector:
matchLabels:
app: rep-apache
template:
metadata:
name: tem-apache
labels:
app: rep-apache
spec:
containers:
- name: apache
imange: httpd
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
mysql pod 생성을 위한 yml 파일 작성
wordpress service 하는 yml 파일 작성
각 yml 파일을 순서대로 실행 후 kubectl get
명령어로 확인
kubectl describe
로 wordpress service 상태 확인
pod 상태 확인
curl
명령어로 ip 접속. 오류 메세지가 나오지는 않지만, wordpress container를 배포하기 때문에 apache나 nginx와 달리 출력값이 나오지 않음.
보다 확실한 접속 확인을 위해 lynx 설치 후 lynx로 pod, cluster ip 접속
nginx공부: https://nginxstore.com/training/
참조 자료: https://ykarma1996.tistory.com/179
weaveNet: 같은 lan으로 인식
calico: 라우팅 가능
dummy0 = docker0: weav랑 datapath가 기능을 대신하기 때문에 사용되지 않음.
참고: https://virtualtech.tistory.com/339
k8s Volume은 크게 세가지로 분류.
마운트 경로를 /usr/sharenginx/html 디렉토리로 지정
위 코드에서 alpine 이미지 실행을 포함시킨 코드. nginx 컨테이너와 달리 alpine의 마운트 경로는 아직 존재하지 않는 디렉토리인 /test로 설정.
Volume Mount를 존재하지 않는 경로로 지정하면 상태 값이 ContainerCreating에서 멈추고 정상 동작하지 못한다.
describe
명령어로 확인했을 때 출력된 오류 정보
nodeName을 이용해 pod가 실행될 node 지정 가능
type이 Directory인 경우, 위치에 path에서 지정한 디렉토리가 없으면 정상적으로 동작하지 못함.
type을 DirectoryOrCreate로 바꾸면, 디렉토리가 없으면 디렉토리를 생성함.
persistant volume - 다른 노드에 위치해도 vol 사용이 가능해짐
persistant volume yml 파일 실행
deployment yml파일 작성
yml 파일 실행
curl
명령어로 각 노드에 배포된 pod의 IP로 접속. 사전에 index.html 파일을 작성해놓은 노드(나는 node1에 작성함)외의 노드에 존재하는 pod들은 html 파일이 변경되지 않음을 확인할 수 있다.
다른 노드에 /test 디렉토리가 있는지 확인
persistant만 사용하면 node간의 디렉토리 동기화는 되지만, 디렉토리 내부 파일까지 동기화 되지 않음.
디렉토리 내부 Data까지 동기화하기 위해서는 nfs 사용이 필요.
참고 사이트: https://zgundam.tistory.com/179
설치 사이트1: https://github.com/kubernetes/ingress-nginx
설치 사이트2: https://kubernetes.github.io/ingress-nginx/deploy/
설치 순서: 사이트1에서 started 링크 클릭 -> 사이트2로 이동함 -> vmware를 사용중이므로, baremetal 선택 -> 코드 복사 -> kubectl apply -f 를 지우고 wget으로 먼저 설치한 뒤 kubectl apply -f 사용해서 설치
Ingress: Cluster 내의 서비스에 대한 외부 접근을 관리하는 API 오브젝트이며, 일반적으로 HTTP를 관리함. Ingress 는 LoadBalancer, SSL Terminated, Named 기반의 가상 호스팅을 제공할 수 있다.
ex) bsbo.com/svc1과 babo.com/svc2 의 화면을 다르게 출력함
Ingress-nginx 설치
ingress-nginx에 포함된 yml 파일의 내용
필요한 것들이 설치 됐는지 확인
ingress를 사용하는 yml 파일 작성
ingress 실행 확인
....