0부터 시작하는 Kubernetes 공부 - admin.conf & Ingress-NodePort 구조 & Volume 사용 구조 및 활용

Jaehong Lee·2022년 9월 7일
1
post-thumbnail
post-custom-banner

1. admin.conf

  • K8S 시작 -> 클러스터 생성 -> Kubeadm init -> Token 발행

    • Token 을 발행하면 해당 사용자 계정은 admin 계정의 권한을 가지게 된고, Node 는 master Node 가 된다. 해당 계정 정보는 /etc/kubernetes/admin.conf ( K8S admin 을 나타내는 파일 ) 에 저장된다

    • root 계정이 아닌 사용자 계정이 K8S 에 명령을 내릴려면 이 파일을 ~/.kube/config ( root 를 나타내는 파일 ) 에 복사 붙여넣기 해야 한다

      이를 통해 worker Node 의 등급을 올릴 수 있다. 이때, worker Node 에 master Node 의 컴포넌트들이 생기는 것이 아닌, master Node 에 연결해서 명령을 내리는 것이다

    • 만약, admin 권한이 풀리면, export 를 통해 KUBECONFIG 에 넣어줘야 한다
  • SCP ( SECURE COPY ) : SSH 터널을 이용하여 파일 복사를 진행한다. 이를 통해 원격지 파일을 옮길 수 있다

    • SCP 를 통해 admin.conf 를 다른 Node 에 옮길 수 있다

2. Ingress & NodePort 구조

  • NodePort 는 Node 의 Port 를 겹치지 않게 주어야 한다. 이를 Port, TargetPort 만 작성하여 랜덤으로 부여할 수 있다

Ingress 를 배포하면, 자동적으로 이를 위한 LB 서비스가 Ingress Controller 앞에 준비된다

  • 따라서, MetalLB 가 동작한다면, Ingress 배포시 생성되는 LB 서비스에 외부에서 접근할 수 있는 EXTERNAL IP 를 할당해준다
  • 자원량에서 1000M 은 100 % 가 아닌, CPU 1 개를 의미한다. 따라서 2000M 은 CPU 2개를 사용하는 것이다

Ingress 에서 NodePort 연결시 master 의 etcd 통해 해당 NodePort 서비스가 연결된 Node 의 Port 를 확인하고, 해당 Port 로 연결하여 서비스에 연결한다

NodePort 서비스는 무조건 node 의 Port 하나당 서비스의 Port 하나를 연결해야 한다. 서비스의 Port 하나에 다수의 node 의 Port 를 연결은 불가능 하다

NodePort 서비스 사용시 외부에서 접근할 때, node 의 Ip 와 Port 까지 입력해야 되므로 불편하다. 반면, LB 서비스는 LB 에 할당된 Ip 로만 접근할 수 있으므로 편리하다

  • 이는 앞에 Ingress 를 배치하면 NodePort 서비스만 Ingress 에 연결 가능하다!!! LB 서비스는 뒤에 연결 불가
  • LB 서비스만 사용할 경우, 서비스는 Node 에 Pod 형태로 존재한다. 즉, Node 의 자원을 공유하므로, Node 의 Ip 역시 공유한다. 이를 통해 LB 서비스에서 Pod 에 접속하는 과정은, 사실상 Node 의 Ip 를 타고 LB 서비스에 접속해서, 뒤에 Calico 를 통해서 Pod 에 연결된다

3. Volume 사용 구조

  • index.html 을 update 하고 싶을 때, 스토리지의 디렉토리에 접근하여 일일이 바꿔주는 작업은 불편하다
    • 이를 GIT 과 스토리지를 연결하여, GIT 에 COMMIT 됬을 때, 자동으로 스토리지에 update 해주게 할 수 있다
      이러한 환경을 간편하게 사용할 수 있는 도구로 AWX 가 있다

nfs 는 bind, iscsi 는 mount 이다

4. Volume 활용하기

Metallb yaml 작성 및 배포

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 211.183.3.201-211.183.3.210
    - name: kia
      protocol: layer2
      addresses:
      - 211.183.3.211-211.183.3.220
    - name: sk
      protocol: layer2
      addresses:
      - 211.183.3.221-211.183.3.230
  • 작성해주자
  • 배포해주자

Deployment & SVC yaml 작성

apiVersion: apps/v1
kind: Deployment
metadata: 
  name: nfs-ip
spec: 
  replicas: 3
  selector: 
    matchLabels: 
      app: nfs-ip
  template: 
    metadata: 
      name: my-nfs-ip 
      labels: 
        app: nfs-ip
    spec: 
      containers: 
      - name: webserver
        image: nginx
        ports: 
        - containerPort: 80
        volumeMounts: 
        - name: nfs-vol
          mountPath: /usr/share/nginx/html/lab3/
      volumes: 
      - name: nfs-vol
        nfs: 
          server: 211.183.3.100 
          path: /root/shared
---
apiVersion: v1
kind: Service 
metadata: 
  name: nfslb
spec: 
  ports: 
  - name: nfslb-port
    port: 80
    targetPort: 80
  selector: 
    app: nfs-ip
  type: LoadBalancer
  • 위와 같이 작성하고 배포해주자

Page 가져와서 확인하기

  • EXTERNAL-IP 를 확인하자
  • 페이지를 curl 을 통해 index.html 을 만들어 nfs 공유 디렉토리에 저장하자
  • 잘 적용됬다. 뒤에 lab3 를 붙여야지 lab3 디렉토리 안의 index.html 을 가져와서 출력한다
profile
멋진 엔지니어가 될 때까지
post-custom-banner

0개의 댓글