230623 - K8S

soo·2023년 6월 24일
0

K8S

목록 보기
1/1

Volume, Replecaset

cluster ip, nodeport, loadbalance(metalib 사용), external name


service를 yml파일로 만들기

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의 Replicaset 생성

다수의 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


연습

조건

  1. 1개의 pod를 mysql5.7로 생성
  2. wordpress5.6을 depolyment로 생성해서 3개의 rep pod 생성
  3. nodeport => 32080로 외부에 서비스
  4. 개별 pod의 ip 접속, clusterip접속, node의 ip 접속

해설

  1. mysql pod 생성을 위한 yml 파일 작성

  2. wordpress service 하는 yml 파일 작성

  3. 각 yml 파일을 순서대로 실행 후 kubectl get 명령어로 확인

  4. kubectl describe로 wordpress service 상태 확인

  5. pod 상태 확인

  6. curl 명령어로 ip 접속. 오류 메세지가 나오지는 않지만, wordpress container를 배포하기 때문에 apache나 nginx와 달리 출력값이 나오지 않음.

  7. 보다 확실한 접속 확인을 위해 lynx 설치 후 lynx로 pod, cluster ip 접속

  1. 웹 브라우저에서 Host IP 접속

nginx공부: https://nginxstore.com/training/

cni 비교

참조 자료: https://ykarma1996.tistory.com/179
weaveNet: 같은 lan으로 인식
calico: 라우팅 가능
dummy0 = docker0: weav랑 datapath가 기능을 대신하기 때문에 사용되지 않음.


Volume

참고: https://virtualtech.tistory.com/339

k8s Volume은 크게 세가지로 분류.

  • emptydir: life cycle이 pod와 동일
  • hostpath:node 단위로 관리
  • persistent Volume: cluster 단위로 관리
  1. 마운트 경로를 /usr/sharenginx/html 디렉토리로 지정

  2. 위 코드에서 alpine 이미지 실행을 포함시킨 코드. nginx 컨테이너와 달리 alpine의 마운트 경로는 아직 존재하지 않는 디렉토리인 /test로 설정.

  3. Volume Mount를 존재하지 않는 경로로 지정하면 상태 값이 ContainerCreating에서 멈추고 정상 동작하지 못한다.

  4. 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


Ingress

설치 사이트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 의 화면을 다르게 출력함

  1. Ingress-nginx 설치

  2. ingress-nginx에 포함된 yml 파일의 내용

  3. 필요한 것들이 설치 됐는지 확인

  4. ingress를 사용하는 yml 파일 작성

  5. ingress 실행 확인

....

profile
이것저것 공부하는

0개의 댓글