클라우드 48일차 : mid project

soso·2024년 8월 15일

클라우드 부트캠프

목록 보기
50/77
post-thumbnail

첫날에 발생했던 calico node driver 오류 해결

calico를 cilium으로 변경 후 설치

cilium 설치

[master에서 수행]
sudo yum update -y

sudo yum install -y kernel kernel-tools kernel-tools-libs

sudo reboot

helm uninstall cilium -n kube-system

helm install cilium cilium/cilium --namespace kube-system --set nodeinit.enabled=true

ssh root@worker1
-> worker쪽 이름으로 변경해서 입력

sudo yum update -y

sudo yum install -y kernel kernel-tools kernel-tools-libs

sudo reboot

watch kubectl get pods -n kube-system -o wide
-> 잘 돌아가는지 확인

아마 calico에서도 패키지 업데이트 후 kernel, kernel-tools, kernel-tools-libs 설치하면 해결될 것 같음

NFS 서버 설정

NFS 서버 설치 (마스터 노드에서)

sudo dnf install nfs-utils
sudo systemctl enable --now nfs-server

공유 디렉토리 생성

sudo mkdir -p /share
sudo chmod 1777 /share

NFS 설정 파일 수정

sudo vi /etc/exports

파일에 다음 줄 추가

/share *(rw,sync,no_root_squash,subtree_check)

NFS 설정 적용

sudo exportfs -ra

워커 노드에서 NFS 클라이언트 설치

sudo dnf install nfs-utils

NFS SC 구축

helm client tool 설치

curl -sSL https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

pkg repo 추가

helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

helm repo list 후 확인

NAME                           	URL                                                                                         
nfs-subdir-external-provisioner	https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

helm repo update 후 확인

Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "nfs-subdir-external-provisioner" chart repository
...Successfully got an update from the "bitnami" chart repository
Update Complete. ⎈Happy Helming!⎈

helm search repo nfs-subdir-external-provisioner 후 확인

NAME                                              	CHART VERSION	APP VERSION	DESCRIPTION                                       
nfs-subdir-external-provisioner/nfs-subdir-exte...	4.0.18       	4.0.2      	nfs-subdir-external-provisioner is an automatic...

nfs provisioner 설치

helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner  --set nfs.server=cp  --set nfs.path=/share

설치 후 확인

[root@master1 vol]# kubectl get po,sc
NAME                                                   READY   STATUS    RESTARTS            AGE
pod/nfs-subdir-external-provisioner-68c5b66dd6-qxfjl   1/1     Running   0                   15m
pod/test-pd                                            2/2     Running   3 (9m45s ago)       60m
pod/test-pd2                                           2/2     Running   3 (<invalid> ago)   60m


NAME                                     PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
storageclass.storage.k8s.io/nfs-client(default)   cluster.local/nfs-subdir-external-provisioner   Delete          Immediate           true                   15m

SC default 설정

kubectl edit sc nfs-clientstorageclass.kubernetes.io/is-default-class: "true"를 추가

  annotations:
    meta.helm.sh/release-name: nfs-subdir-external-provisioner
    meta.helm.sh/release-namespace: default
    storageclass.kubernetes.io/is-default-class: "true"

워커 노드에서 마스터 노드의 NFS 서버 마운트

워커 노드에서 마운트 할 디렉토리 생성

sudo mkdir -p /mnt/nfs

워커 노드에서 마스터 노드 디렉토리로 마운트

sudo mount -t nfs <nfs 서버 ip>:/share /mnt/nfs

마스터 노드에서 nfs 서버를 구축했으니 마스터 노드의 ip주소를 사용, /share는 NFS 서버에서 공유된 디렉토리

이 작업이 완료되면, 워커 노드의 /mnt/nfs 디렉토리에서 마스터 노드의 /share 디렉토리에 접근할 수 있음

사설 저장소 구축

Docker Private Registry 사용

master (docker private registry) 서버 세팅

/etc/docker/daemon.json 파일 생성

{ "insecure-registries": ["<master node의 사설 IP 주소>:5000"]}

재시작

systemctl restart docker.service

설정 변경 확인

[root@master ~]# docker info
 
 ...

 Insecure Registries:
  <master node의 사설 IP 주소>:5000
  127.0.0.0/8

worker 서버 세팅

/etc/docker/daemon.json 파일 생성

{ "insecure-registries": ["<master node의 공인 IP 주소>:5000"]}

master node에서 curl icanhazip.com로 공인 IP 확인

재시작

systemctl restart docker.service

설정 변경 확인

[root@worker ~]# docker info
 
 ...

 Insecure Registries:
  <master node의 공인 IP 주소>:5000
  127.0.0.0/8

registry 설치

컨테이너 띄우기

docker run -d -p 5000:5000 --restart=always --name registry registry:2

태그 달기

docker tag internet-banking-frontend <master node의 사설 IP 주소>:5000/test

이미지 등록 확인

[root@master ~]# docker images
REPOSITORY                   TAG       IMAGE ID       CREATED         SIZE
<master node의 사설 IP 주소>:5000/test    latest    07d13849a1bd   36 hours ago    1.26GB
internet-banking-frontend    latest    07d13849a1bd   36 hours ago    1.26GB
internet-banking-backend     latest    9b8a00315c40   36 hours ago    970MB
bank-backend                 latest    12832be74dc0   37 hours ago    243MB

registry에 push

docker push <master node의 사설 IP 주소>:5000/test

registry web ui 붙이기

컨테이너 띄우기

docker run -itd --name=web-registry -p 8080:8080 -e REGISTRY_URL=http://<master node의 사설 IP 주소>:5000/v2 -e REGISTRY_NAME=<master node의 공인 IP 주소>:5000 --link registry hyper/docker-registry-web

trouble shooting

web-registry 이미지를 컨테이너에 run 할 시 OOM으로 Exited(137)이 뜨면서 종료되는 오류

해결 : hyper/docker-registry-web 대신 joxit/docker-registry-ui 이미지 사용

registry에 이미지를 push했지만 web ui에서 확인이 불가능

해결 : CORS 설정을 추가

#config.yaml

version: 0.1
log:
  fields:
    service: registry
storage:
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    Access-Control-Allow-Origin: ['http://<master node 사설 ip>:사용할 포트번호']
    Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS']
    Access-Control-Allow-Credentials: ['true']

config.yaml 저장 후 registry 실행

docker run -d \
  -p 5000:5000 \
  --name registry \
  -v $(pwd)/config.yml:/etc/docker/registry/config.yml \
  registry:2

docker registry ui 실행 시 CORS 설정 추가

docker run -d \
  -e REGISTRY_TITLE="My Docker Registry" \
  -e REGISTRY_URL="http://<master node 사설 ip>:5000" \
  -e CORS_ALLOWED_ORIGINS="http://<master node 사설 ip>:사용할 포트번호" \
  -p 사용할 포트번호:80 \
  joxit/docker-registry-ui:latest

참조
docker private registry : https://velog.io/@zuckerfrei/Docker-Private-Registry-1
nginx-ingress : https://velog.io/@dhkim1522/k8s-%EC%9D%B8%EA%B7%B8%EB%A0%88%EC%8A%A4-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC-ingress-controller-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0
https://velog.io/@hj_/CICD-Docker-%EC%99%80-Github-Actions-%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-CICD-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95-1-%ED%99%88%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95

0개의 댓글