첫날에 발생했던 calico node driver 오류 해결
calico를 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 서버 설치 (마스터 노드에서)
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
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
kubectl edit sc nfs-client 후 storageclass.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"
워커 노드에서 마운트 할 디렉토리 생성
sudo mkdir -p /mnt/nfs
워커 노드에서 마스터 노드 디렉토리로 마운트
sudo mount -t nfs <nfs 서버 ip>:/share /mnt/nfs
마스터 노드에서 nfs 서버를 구축했으니 마스터 노드의 ip주소를 사용, /share는 NFS 서버에서 공유된 디렉토리
이 작업이 완료되면, 워커 노드의 /mnt/nfs 디렉토리에서 마스터 노드의 /share 디렉토리에 접근할 수 있음
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
/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
컨테이너 띄우기
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
컨테이너 띄우기
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
해결 : hyper/docker-registry-web 대신 joxit/docker-registry-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