1. 기본 설정 (VPC 생성/서브넷 생성/NAT Gateway 생성)
  2. 쿠버네티스 클러스터 생성
  3. Bastion 서버 생성
  4. 도커 설치
  5. 쿠버네티스 설치
  6. ncp-iam-authenticator 설치
  7. Container Registry 생성
  8. 네이버 클라우드에서 쿠버네티스 서비스(NKS) 사용 설정 - 7 (쿠버네티스와 NAS 연결)

네이버 클라우드에서 NAS 볼륨 생성 후 Pod에 마운트 할 때 사용하는 yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: static-nks-nas-csi
provisioner: nas.csi.ncloud.com
parameters:
  server: __NAS_IP__
  share: __NAS_PATH__
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
mountOptions:
  - hard
  - nolock
  - nfsvers=3
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: static-pvc
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 500Gi
  storageClassName: static-nks-nas-csi

 

'__NAS_IP__' 와 ' __NAS_PATH__' 찾는 방법 

  • 네이버 클라우드 콘솔에 접근 (https://console.ncloud.com/)
  •  NAS(아래 그림 1)  ->  Volume (아래 그림 2) -> 왼쪽 메뉴에서 아래 화살표 클릭 (아래 그림 3)

 

  • '마운트 정보'에서 확인 가능 (아래 그림 1)

 

  •   마운트 정보 형태: xxx.xxx.xxx.xxx:/path ( ':'을 기준으로 IPdhk PATH가 나뉨)
  • __NAS_IP__: xxx.xxx.xxx.xxx
  • __NAS_PATH__: /path

 

네이버 클라우드 문서: https://guide-fin.ncloud-docs.com/docs/k8s-k8suse-nascsi

 

NAS 볼륨 마운트 확인

NAS에 접근해 보면 아래와 비슷한 폴더가 생성된 것을 볼 수 있습니다.

만약 Pod에서 NAS에 있는 소스 코드를 활용하여 서비스를 실행할 경우 마운트된 폴더(위의 경우 'pvc64680cbd0bc74a448') 아래 소스코드를 저장해야 Pod에서 접근할 수 있음

  1. 기본 설정 (VPC 생성/서브넷 생성/NAT Gateway 생성)
  2. 쿠버네티스 클러스터 생성
  3. Bastion 서버 생성
  4. 도커 설치
  5. 쿠버네티스 설치
  6. ncp-iam-authenticator 설치
  7. Container Registry 생성
  8. 네이버 클라우드에서 쿠버네티스 서비스(NKS) 사용 설정 - 7 (쿠버네티스와 NAS 연결)

 

7.  Container Registry 생성

Container Registry를 사용하기 위해서는 다음과 같은 설정이 필요합니다.

  1. Object Storage 및 버킷 생성
  2. Container Registry 생성

 

Object Storage 및 버킷 생성 방법

  1. 네이버 클라우드 플랫폼 콘솔에 접속
  2. Services > Storage > Object Storage 메뉴를 차례대로 클릭
  3. 이미 Object Storage를 사용 중이 아닐때만 아래 2개 항목 실행 
    1. [이용 신청] 버튼 클릭
    2. 이용 신청 팝업 창에서 안내 사항을 확인한 후 [적용] 버튼을 클릭해 서비스 이용 신청 완료
  4. Bucket Management 메뉴에서 [버킷 생성] 버튼 클릭
  5. 버킷 이름을 입력한 후 [다음] 버튼 클릭
    1. 여기서의 버킷 이름: nks-docker-img-bucket
  6. 객체 잠금 설정(WORM) 여부를 설정한 후 [다음] 버튼 클릭
    1. 특별한 상황이 아니면 그냥 [다음] 버튼 클릭
  7.  
  8. 권한 관리는 공개 안함으로 선택 후 하단의 다음 버튼 클릭

  9. 최종 확인한 후 [버킷 생성] 버튼 클릭

 

Container Registry 생성 방법

  1. 네이버 클라우드 플랫폼 콘솔에 접속
  2. Services > Containers > Container Registry 메뉴를 차례대로 클릭
  3. [레지스트리 생성] 버튼을 클릭해 주십시오.
  4. 레지스트리 이름을 입력해 주십시오.
    • 레지스트리 이름은 중복될 수 없습니다.
    • 3~30자 이내로 작성해야 하며, 영어 소문자와 숫자, 특수문자 '-' 만 사용할 수 있습니다.
    • 소문자로 시작해야 하며, 특수문자 '-' 로 끝날 수 없습니다.
    • 여기서의 리지스트리 이름: nks-docker-img-reg
  5. 생성할 레지스트리와 연동할 버킷을 선택해 주십시오.
    • 레지스트리와 이미 연동한 버킷은 선택할 수 없습니다.
    • 연동할 버킷이 없으면 Object Storage 메뉴에서 버킷을 생성해 주십시오.
    • 위에서 만든 버킷: nks-docker-img-bucket
  6. [생성] 버튼을 클릭해 주십시오.

 

- 네이버 클라우드 Container Registry 시작 : https://guide.ncloud-docs.com/docs/containerregistry-start

  1. 기본 설정 (VPC 생성/서브넷 생성/NAT Gateway 생성)
  2. 쿠버네티스 클러스터 생성
  3. Bastion 서버 생성
  4. 도커 설치
  5. 쿠버네티스 설치
  6. ncp-iam-authenticator 설치
  7. Container Registry 생성
  8. 네이버 클라우드에서 쿠버네티스 서비스(NKS) 사용 설정 - 7 (쿠버네티스와 NAS 연결)

 

6. ncp-iam-authenticator 설치

Kubernetes Service ncp-iam-authenticator 통해 IAM 인증을 제공한다. IAM 인증을 통해 kubectl 명령을 사용하려면 ncp-iam-authenticator 설치하고 이를 인증에 사용하도록 kubectl 설정 파일을 수정해야 한다.

 

ncp-iam-authenticator 설치

# Ncp-iam-authenticator 바이너리 파일을 홈디렉토리에 다운로드
cd ~
curl -o ncp-iam-authenticator https://kr.object.ncloudstorage.com/nks-download/ncp-iam-authenticator/v1.0.0/linux/amd64/ncp-iam-authenticator

#바이너리에 실행권한 추가
chmod +x ./ncp-iam-authenticator

# $HOME/bin/ncp-iam-authenticator를 생성하고 $PATH에 추가
mkdir -p $HOME/bin && mv ./ncp-iam-authenticator $HOME/bin/ncp-iam-authenticator && export PATH=$PATH:$HOME/bin

#Shell Profile에 PATH를 추가 후 명령어가 잘 작동하는지 확인
echo 'export PATH=$PATH:.:$HOME/bin' >> ~/.bashrc

잘 설치되었는지 확인 방법

ncp-iam-authenticator help

- 네이버 클라우드 ncp-iam-authenticator 설치: https://guide.ncloud-docs.com/docs/k8s-iam-auth-ncp-iam-authenticator

IAM 인증 kubeconfig 생성

사용자 환경 홈 디렉터리의 '.ncloud' 폴더에 configure 파일 생성

mkdir .ncloud
vi ~/.ncloud/configure

아래 코드를 복사하여 붙여 넣으면 됩니다.

[DEFAULT]
ncloud_access_key_id = ACCESSKEYACCESSKEYAC
ncloud_secret_access_key = SECRETKEYSECRETKEYSECRETKEYSECRETKEYSECR
ncloud_api_url = https://ncloud.apigw.ntruss.com

[project]
ncloud_access_key_id = ACCESSKEYACCESSKEYAC
ncloud_secret_access_key = SECRETKEYSECRETKEYSECRETKEYSECRETKEYSECR
ncloud_api_url = https://ncloud.apigw.ntruss.com

 

위의 1번과 2번은 다음과 같이 네이버 클라우드 계정에서 찾아서 변경해줘야 한다.

    • ncloud_access_key_id: "마이페이지 -> 계정관리 -> 인증키 관리 -> Access Key ID"에 있는 값을 넣음
    • ncloud_secret_access_key:  "마이페이지 -> 계정관리 -> 인증키 관리 -> Secret Key -> 보기"를 통해 나온 값을 넣음

 

 

ncp-iam-authenticator create-kubeconfig 명령을 사용하여 kubeconfig 생성

ncp-iam-authenticator create-kubeconfig --region KR --clusterUuid <cluster-uuid> --output kubeconfig.yaml

- <cluster-uuid>: Products & Services > Kubernetes Service에서 생성한 Cluster를 클릭하면 클러스터 이름 옆에서 확인 가능

 

 

생성된 kubeconfig 파일로 kubectl 명령 테스트

kubectl get namespaces --kubeconfig kubeconfig.yaml

 

 

- 네이버 클라우드 IAM 인증 kubeconfig 생성: https://guide.ncloud-docs.com/docs/k8s-iam-auth-kubeconfig

  1. 기본 설정 (VPC 생성/서브넷 생성/NAT Gateway 생성)
  2. 쿠버네티스 클러스터 생성
  3. Bastion 서버 생성
  4. 도커 설치
  5. 쿠버네티스 설치
  6. ncp-iam-authenticator 설치
  7. Container Registry 생성
  8. 네이버 클라우드에서 쿠버네티스 서비스(NKS) 사용 설정 - 7 (쿠버네티스와 NAS 연결)

 

5. 쿠버네티스 설치

다음 명령어로 쿠버네티스(kubectl) 설치

sudo apt-get update

sudo apt-get install -y apt-transport-https ca-certificates curl

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt-get update

sudo apt-get install -y kubectl

 

설치 확인

kubectl version --client

다음을 실행하여 더 자세한 정보를 볼 수 있다.

kubectl version --client --output=yaml

- 쿠버네티스 설치 : https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

  1. 기본 설정 (VPC 생성/서브넷 생성/NAT Gateway 생성)
  2. 쿠버네티스 클러스터 생성
  3. Bastion 서버 생성
  4. 도커 설치
  5. 쿠버네티스 설치
  6. ncp-iam-authenticator 설치
  7. Container Registry 생성
  8. 네이버 클라우드에서 쿠버네티스 서비스(NKS) 사용 설정 - 7 (쿠버네티스와 NAS 연결)

 

4. 도커 설치

- 왼쪽 메뉴에서 'Server' -> 'Server' 클릭

- 생성된 서버의 가장 오른쪽의 다운 화살표(∨) 클릭하면 서버 정보 확인 가능

- '공인 IP (instance ID)'를 확인하여 서버에 접속

- 도커 설치

sudo apt update

sudo apt install -y ca-certificates curl gnupg lsb-release

sudo mkdir -p /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/nul

sudo chmod a+r /etc/apt/keyrings/docker.gpg

sudo apt update

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

 

도커 설치 확인

1. 도커 버전 확인

docker version

위의 명령어를 실행하면 아래와 같은 정보가 나오며, 이때 도커 Client와 Server가 설치된 것을 확인한다.

 

2. 도커 상태 확인

systemctl status docker

위의 명령어를 실행하면 아래와 같은 정보가 나오며, 이때 도커의 상태가 'active (running)'인지 확인한다.

- 도커 설치: https://docs.docker.com/engine/install/ubuntu/

  1. 기본 설정 (VPC 생성/서브넷 생성/NAT Gateway 생성)
  2. 쿠버네티스 클러스터 생성
  3. Bastion 서버 생성
  4. 도커 설치
  5. 쿠버네티스 설치
  6. ncp-iam-authenticator 설치
  7. Container Registry 생성
  8. 네이버 클라우드에서 쿠버네티스 서비스(NKS) 사용 설정 - 7 (쿠버네티스와 NAS 연결)

 

2. 쿠버네티스 클러스터 생성

- 왼쪽에서 'Services' -> 검색창에 'Kubernetes Service' 입력 -> 'Kubernetes Service' 클릭

 

- '생성하기' 클릭

 

- 생성한 VPC, Subnet 등 입력

클러스터 이름 nks-cluster
Kubernetes 버전 1.23.9
CNI Plugin cilium
VPC nks-vpc | 172.16.0.0/16
가용 Zone KR-2
네트워크 타입 Private
Subnet nks-cluster-sub | KR-2 | 172.16.1.0/24 | private
LB Private 서브넷 nks-lb-sub | KR-2 | 172.16.2.0/24 | private
최대 노드 수 10
Audit Log 미설정

 

- 노드풀 설정 -> '추가' 클릭 -> '다음' 클릭

노드풀 이름 서버 이미지 이름 서버 타입 노드 수 Subnet
nks-ndpool 이미 선택된 것 이미 선택된 것 1 nks-cluster-sub | KR-2 | 172.16.1.0/24 | private

 

- 인증키 설정

    - 인증키를 보유하고 있는 경우: '보유하고 있는 인증키 이용' 선택

    - 인증키를 보유하고 있지 않은 경유: '새로운 인증키 생성' 선택

 

- 확인 후 '생성하기' 클릭

 

- 네이버 클라우드 Kubernetes Service: https://guide.ncloud-docs.com/docs/ko/k8s-k8soverview

 

3. Bastion 서버 생성

- 왼쪽에서 'Services' -> 검색창에 'Server' 입력 -> 'Server' 선택

- '서버 생성' 클릭

 

- 서버 정보 선택 -> 서버 이미지 선택 : 여기서는 우분투 리눅스 사용

부팅 디스크 크기 이미지타입 OS 이미지타입 서버 타입
50GB OS Ubuntu Standard

- 아래 '서버 이미지 이름'에서 'ubuntu-20.04' 선택

- 서버 설정

VPC
Subnet 스토리지 종류 서버 세대 서버 타입 요금제 선택 서버 개수
nks-vpc nks-bastion-sub | KR-2 | 172.16.3.0/24 | public  SSD g2 Standard
[Standard] vCPU 2개, 메모리 8GB
시간 요금제 1
서버 이름 Network Interface 공인 IP 물리 배치 그룹 반납 보호 메모 Script 선택
nks-bation '추가' 클릭 새로운 공인 IP 할당 체크 안함 해제   선택없음

 

- 인증키 설정

    - 인증키를 보유하고 있는 경우: '보유하고 있는 인증키 이용' 선택

    - 인증키를 보유하고 있지 않은 경유: '새로운 인증키 생성' 선택

 

- 네트워크 접근 설정

eth0 nks-vpc-default-agc

※ 서버 접속을 위해 'AGC'를 변경해 줘야 한다. 

 

- 최종 확인 및 서버 생성

 

- 네이버클라우드 서버 생성 사용자 가이드: https://guide.ncloud-docs.com/docs/server-create-vpc

  1. 기본 설정 (VPC 생성/서브넷 생성/NAT Gateway 생성)
  2. 쿠버네티스 클러스터 생성
  3. Bastion 서버 생성
  4. 도커 설치
  5. 쿠버네티스 설치
  6. ncp-iam-authenticator 설치
  7. Container Registry 생성
  8. 네이버 클라우드에서 쿠버네티스 서비스(NKS) 사용 설정 - 7 (쿠버네티스와 NAS 연결)

 

1. 기본 설정 (VPC 생성/서브넷 생성/NAT Gateway 생성)

1.1 VPC 생성

- 왼쪽 메뉴의 'VPC' -> 'VPC Management'

- 'VPC 생성' 클릭

- VPC 이름(여기서는 'nks-vpc')과 IP 주소 범위(여기서는 '172.16.0.0/16' 사용)를 입력하여 VPC를 생성

- 네이버 클라우드 VPC Management: https://guide.ncloud-docs.com/docs/vpc-manage-vpc

 

1.2 서브넷(Subnet) 생성

- 왼쪽 메뉴의 'VPC'-> 'Subnet Management'

- 'Subnet 생성' 클릭

- 3개의 서브넷 생성 (쿠버네티스 클러스터(private), 로드밸런서(private), Bastion 서버(public))

쿠버네티스 클러스터 서브넷 설정 - Subnet 이름: nks-cluster-sub
- VPC: nks-vpc (172.16.0.0/16)
- IP 주소 범위: 172.16.1.0/24
- 가용 Zone: KR-2
- Network ACL: nks-vpn-default-network-acl
- Internet Gateway 전용 여부: N (Private)
- 용도: 일반
로드밸런서 서브넷 설정 - Subnet 이름: nks-lb-sub
- VPC: nks-vpc (172.16.0.0/16)
- IP 주소 범위: 172.16.2.0/24
- 가용 Zone: KR-2
- Network ACL: nks-vpn-default-network-acl
- Internet Gateway 전용 여부: N (Private)
- 용도: LoadBalancer
Bastion 서버 서브넷 설정 - Subnet 이름: nks-bastion-sub
- VPC: nks-vpc (172.16.0.0/16)
- IP 주소 범위: 172.16.3.0/24
- 가용 Zone: KR-2
- Network ACL: nks-vpn-default-network-acl
- Internet Gateway 전용 여부: Y (Public)
- 용도: 일반

- 네이버 클라우드 Subnet Management: https://guide.ncloud-docs.com/docs/vpc-subnetmanage-vpc

 

1.3 NAT Gateway 생성

- 왼쪽 메뉴의 'VPC' ->  'NAT Gateway'

- 'NAT Gateway 생성' 클릭

 

NAT Gateway 생성 - NAT Gateway 이름: nks-natgw
- VPC: nks-vpc 
- Zone: KR-2

- 네이버 클라우드 NAT Gateway : https://guide.ncloud-docs.com/docs/networking-vpc-vpcdetailenatgw

 

Route Table 설정

  1.  왼쪽 메뉴의 'VPC' ->  'Route Table'
  2.  'Route Table'에서 'nks-vpc-default-private-table' 선택
  3.  위의 메뉴 중 ‘Routes 설정’ 클릭

Route Table 설정 - Destination: 0.0.0.0/0
- Target Type: NATGW
- Target Name: nks-natgw

- 위의 내용 입력 후 오른쪽 '생성' 클릭

- 아래의 '확인' 클릭

- 네이버 클라우드 Route Table : https://guide.ncloud-docs.com/docs/networking-vpc-vpcdetailedroutetable

빠르게 Docker Hub에서 nignx 이미지를 가져와서 컨테이너를 실행/중지/삭제하고 최종적으로 이미지를 삭제하는 방법은 다음과 같다.

# 도커 이미지가 무엇이 있는지 확인
docker images

# Docker Hub에서 nginx 가져오기
docker pull nginx

# 가져온 nginx 이미지 확인
docker images

# 컨테이너 실행
docker run --name web -d -p 80:80 nginx

# nginx 실행 확인 (아래 명령어 입력 또는 웹브라우저에서 현재 서버에 접속) 
curl localhost:80

# 실행중인 컨테이너 중단(중단 후에 위의 nginx 실행 확인을 하면 더이상 접속할 수 없음)
docker stop web

# 실행중인 컨테이너 삭제
docker rm web

# 이미지 삭제
docker rmi nginx

# 이미지가 무엇이 있는지 확인
docker images

 

아래 내용은 위의 내용에 대해 좀 더 자세하게 설명한 내용이다.


  1. 현재 내가 가지고 있는 이미지 검색
  2. Docker Hub에서 컨테이너 이미지 검색
  3. Docker Hub에서 컨테이너 이미지 가져오기
  4. 컨테이너 실행
  5. 컨테이너 중지
  6. 컨테이너 삭제
  7. 이미지 삭제

실행은 root 계정이 아니고 도커를 사용할 수 있는 계정이면 됩니다. root가 아닌 다른 사용자에게 도커를 사용할 수 있도록 하는 방법은 이전 글('도커(Docker)를 사용할 수 있는 사용자 추가하기')에서 확일 할 수 있습니다. 

하지만 편의를 위해 root계정에서 실행하도록 하겠습니다.

 

1. 현재 내가 가지고 있는 이미지 검색

현재 내가 가지고 있는 이미지를 검색하는 명령어는 'docker images'이다.

docker images

현재 도커이미지가 없기 때문에 다음과 같이 제목만 표시된다. 만약, 이미지가 있다면 이미지 리스트가 보일 것이다.

 

2. Docker Hub에서 컨테이너 이미지 검색 

원하는 이미지를 Docker Hub에서 'docker search 이미지_이름' 명령어로 검색할 수 있다.

여기서는 nginx를 검색해 보겠다. nginx대신 원하는 이미지를 검색하면 된다.

docker search nginx

결과는 다음과 같다. 리스트 중에 official 버전의 nginx를 볼 수 있다.

 

3. Docker Hub에서 컨테이너 이미지 가져오기

이미지를 가져오기 위해서는 'docker pull 이미지_이름' 명령어를 수행하면 된다. 

아래 그림의 빨간색 박스의 의미는 nginx이미지 안을 보면 6개의 구성요소가 들어 있다는 의미이다. (자세한 설명은 나중에 하도록 하겠다.)

docker pull nginx

 

이미지를 잘 가져왔는지는 알아보기 위해 다음 명령어를 수행하면 nginx 이미지를 받아온 것을 볼 수 있다.

docker images

 

4. 컨테이너 실행

컨테이너 실행은 다음과 같이 실행한다.

  • 'web'은 컨테이너 이름으로 원하는 이름을 정하면 된다.
  • '80:80'은 앞의 80은 컨테이너에 접속할 때 사용하는 port이며, 이를 뒤의 80으로 전달한다는 의미이다. 
    • 현재는 웹 브라우저에서 80으로 접속하면 되지만, 만약 '4000:80'이라고 작성하면 웹 브라우저에서 4000번 port를 사용해서 접속해야 한다.
docker run --name web -d -p 80:80 nginx

 

nginx 컨테이너의 동작확인은 웹브라우저에서 서버의 주소를 통해 접속하거나, 아래 명령어를 수행한다.

curl localhost:80

 

5. 컨테이너 중지

컨테이너를 더 이상 사용하지 않는다면 'docker stop 컨테이너_이름'으로  중지할 수 있다.

여기에서 'web'은 실행한 컨테이너 이름이다. 다른 이름을 사용했다면 사용한 이름을 여기에 작성하면 된다.

docker stop web

 

6. 컨테이너 삭제

컨테이너를 삭제하고자 하면 'docker rm 컨테이너_이름' 명령어를 사용하면 된다.

docker rm web

 

7. 이미지 삭제

 이미지를 더 이상 사용하지 않는 다면 'docker rmi 이미지_이름' 명령어로 삭제하면 된다. 

# 현재 이미지 확인
docker images

# nginx 이미지 삭제
docker rmi nginx

# 현재 이미지 확인
docker images

+ Recent posts