cp, w1, w2 인스턴스 실행
systemctl --now enable containerd && systemctl --now enable kubelet
kubectl get pods -A
kubectl get nodes
톰캣 와스 서버를 통해 구성된 파드를 외부 AWS 로드 밸런서로 접속하되, 노드포트로 연결
vi tomcatdep.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: tomcat labels: app: tomcat spec: replicas: 2 selector: matchLabels: app: tomcat template: metadata: labels: app: tomcat spec: containers: - name: tomcatcontainer image: tomcat:latestkubectl apply -f tomcatdep.yaml
kubectl get deploy
kubectl get pod

파드는 직접적으로 외부와 연결할 수 없음 때문에 아래와 같이 연결하겠음
작업하려는 연결 구조 : ELB - 노드포트 - 디플로이먼트 - 파드
vi nodeport.yaml
apiVersion: v1 kind: Service metadata: name: tc-svc spec: selector: app: tomcat ports: - name: http protocol: TCP port: 8080 targetPort: 8080 nodePort: 30000 type: NodePort
port: 서비스가 연결될 포트
targetport: 파드 내부의 포트
nodeport: 외부 노드에 연결 될 포트
kubectl apply -f nodeport.yaml
kubectl get svc
tc-svc가 연결된 포트 확인 가능

w1 인스턴스의 ip:30000 으로 웹 연결하면 tomcat 페이지가 나옴
(현재는 오류가 나서 404가 뜨지만 우선 연결은 되긴 했음)
(오류나는 이유가 어떤 폴더가 sample로 있어서 그럼 해당 폴더 복사해서 사용하는 걸로 이름 바꿔주면 오류 해결됨)

로드 밸런서 생성
노드 포트 30000과 일치하도록 로드밸런서의 대상 그룹을 w1, w2로 지정하고 포트 30000으로 연결되도록 구성
nfs는 cp 인스턴스에서 생성하기 때문에 cp 인스턴스의 프라이빗 ip 입력
mkdir /nfs_shared
echo '/nfs_shared 10.0.9.184/20(rw,sync,no_root_squash)' >> /etc/exports
systemctl restart nfs-server
systemctl status nfs-server
exportfs -v
vi nfs-pv.yamlapiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv spec: capacity: storage: 100Mi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain nfs: server: 10.0.9.184 path: /nfs_sharedkubectl apply -f nfs-pv.yaml
kubectl get pv

vi nfs-pvc.yaml
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 10Mikubectl apply -f nfs-pvc.yaml
kubectl get pvc
분명 저장 공간을 10M 요청하였더니 결과는 100Mi로 들어갔음
pvc 10Mi는 최소한 이 정도의 PV와 매칭시켜 달라라는 의미
(예를 들어 10억 가진 아저씨하고 만나고 싶어요 했더니 10억 아저씨 없어서 100억 아저씨랑 매칭시켜준것과 같음)

PV는 사용자가 요청할 볼륨 공간을 관리자가 생성
PVC는 사용자(개발자)간 볼륨을 요청한다는것이 차이

vi nfs-pvc-deploy.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: nfs-pvc-deploy spec: replicas: 2 selector: matchLabels: app: nfs-pvc-deploy template: metadata: labels: app: nfs-pvc-deploy spec: containers: - name: httpd image: httpd:latest volumeMounts: - name: nfs-vol mountPath: /usr/local/apache2/htdocs volumes: - name: nfs-vol persistentVolumeClaim: claimName: nfs-pvckubectl apply -f nfs-pvc-deploy.yaml
kubectl get pod
kubectl exec -it nfs-pvc-deploy-7fd7984c8c-bx6vm -- /bin/bash
워커노드 (w1, w2)
mkdir /nfs_client
mount -t nfs 10.0.9.184:/nfs_shared /nfs_client
showmount -e 10.0.9.184
cp 인스턴스에서 생성한걸 다 지우고 지워졌는지 확인
kubectl delete -f nfs-pvc-deploy.yaml
kubectl delete -f nfs-pvc.yaml
kubectl delete -f nfs-pv.yaml
kubectl delete -f nodeport.yaml
kubectl delete -f tomcatdep.yamlkubectl get pod
kubectl get svc
kubectl get deploy
kubectl get pv
kubectl get pvc
nginx_dep 디플로이먼트 내부의 nginx 파드를 생성
nginx 파드 내부의 경로를 pv - pvc를 통해 웹 루트 경로를 영구적으로 보존하도록 구성
pv의 제공 용량 레이블 1G
pvc의 요청 용량 레이블 100M로 설정하여 Bound 확인
(pv - pvc를 통해 디렉터리 연결 후 해당 디렉터리에 배치한 컨텐츠가 외부 ALB 로드 밸런서로 출력되도록 구성)
vi pv.yaml
apiVersion: v1 kind: PersistentVolume metadata: name: nginx-pv spec: capacity: storage: 1Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain nfs: server: 10.0.9.184 path: /nfs_sharedkubectl apply -f pv.yaml
kubectl get pv
vi pvc.yaml
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nginx-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 100Mikubectl apply -f pvc.yaml
kubectl get pvc
vi nginx.yaml
apiVersion: v1 kind: Pod metadata: name: nginx-pod spec: containers: - name: nginx-pod image: nginx volumeMounts: - name: nginx-vol mountPath: /nfs_pod volumes: - name: nginx-vol persistentVolumeClaim: claimName: nginx-pvckubectl apply -f nginx.yaml
kubectl get pod
kubectl exec -it nginx-pod -- /bin/bash