[쿠버네티스] 로드밸런서

최동혁·2023년 4월 25일
0

쿠버네티스

목록 보기
3/7

docker에 자신의 이미지가 있다는 전체하에 진행, 그리고 db도 서비스, config, 파드 생성 전제하에 진행
전 게시글에 해당 정보들이 다 있다.

서비스 생성(로드밸런서)

apiVersion: v1
kind: Service
metadata:
  name: httpd-svc
spec:
  selector:
    type: httpd
  ports:
  - port: 80
    targetPort: 80
  type: LoadBalancer

컨피그맵 생성

apiVersion: v1
kind: ConfigMap
metadata:
  name: httpd-cm
data:
  DBNAME: "web"
  DBUSER: "root"
  DBPASS: "qwer1234"
  DBHOST: "db-svc"        
  DBPORT: "3306"
  • 만약 컨피그맵의 환경변수를 파드가 잘 못불러온다면 파드의 터미널로 들어가서 echo $(환경변수이름) 을 쳐보면 된다.
  • 예를 들어 우리는 컨피그맵에서 DBNAME, DBUSER.. 등등을 받았는데, 잘 불러오는지 확인해보려면 echo $DBNAME 으로 web이 뜨는지 확인해야한다.

파드 생성 (4개)

  • 로드 밸런서를 사용할 것이기 때문에 4개를 생성할 것이다.
apiVersion: v1
kind: Pod
metadata:
  name: httpd-pod-1
  labels:
    type: httpd
spec:
  containers:
  - name: httpd-container1
    image: ddarahakit2023/httpd:1.5  
    command: ["/bin/sh", "-c", "python3 manage.py makemigrations && python3 manage.py migrate && httpd-foreground"] 
    envFrom:
    - configMapRef:
        name: httpd-cm
    ports:
    - containerPort: 80
  • name을 1부터 4까지 생성할 것이다.
  • 여기서 command는 이미지를 받아온 후, 쉘 창에 입력해야 하는 명령어들이다.
  • 장고를 실행하는 명령어와 db와 연동하는 명령어들이다.
  • 그리고 envFrom은 configmap을 어떤걸 받아올지 이름으로 접근하는 것이다.
  • 이게 쓰여져 있지 않으면 환경변수를 못 받아온다.

플러그인 설치(로드 밸런서)

  • 쿠버네티스의 파드들끼리는 접근이 가능하지만, 외부에서는 접근이 불가능하다.
  • 그렇기에 로드밸런서를 이용해 외부에서 사용할 공인 ip를 받아야한다.
  • 쿠버네티스를 돌리고 있는 master node에서 진행
# 현재 모드 확인
kubectl get configmap kube-proxy -n kube-system -o yaml | \
grep strictARP

# 위 명령어 실행 시 strictARP: false로 나오는 경우
kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kubectl apply -f - -n kube-system

# MetalLB 설치
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/metallb.yaml

# 정상 설치 확인 - Running
kubectl get pod -n metallb-system
# 처음에는 Running이 바로 안뜬다. 계속 확인해서 모두 Running이 뜰때까지 기다려야한다.

metalb_config.yaml 생성

  • vi metallb_config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.87.60-192.168.87.200  // 가상머신의 IP 대역으로 할당

적용

  • kubectl apply -f (metallb_config.yaml의 경로)
  • pwd를 이용해 경로를 확인하고 집어넣어줘라

결과

  • 이런식으로 외부 엔드포인트가 생긴다.

  • 해당 엔드포인트로 접속하면 웹 페이지가 잘 뜨는 것을 볼 수 있다.
profile
항상 성장하는 개발자 최동혁입니다.

0개의 댓글