개발용 싱글 AZ용 NKS이다.
game 서비스 만들어보자.
비용상 NAT를 구성하지 않는다.
클러스터는 Private에 구성한다.
DB 서브넷은 구성하지 않는다.
1
public 서브넷에 로키 리눅스로 개발자 명령서버 1대를 만들자.
명령을 내릴 서버에 로그온해 명령툴을 설치하자.
# 명령서버 네트워크 생성
ncp-game4-vpc
192.168.0.0/21
ncp-game4-pub1
192.168.0.0/24
# 명령서버 생성
Rocky Linux 8.10
Standard (필수)
vCPU 2개 , 메모리8GB 선택 (필수)
ncp-game4-com
새로운 공인 IP 할당
인증키 관리는 서버 관리 및 설정 변경 > 인증키 관리 에서 가능합니다.
불필요한 인증키는 삭제하세요. 리스트에 보여서 불편합니다.
Server 메뉴에 없어서 찾는 분이 있을거 같아 알려드립니다.
# 서버 로그인
root
passwd
g1!!
2
# 명령툴들 설치하기
1) 네이버 클라우드에 권한이 있어야 한다.- access-key,secret-key
2) ncloud configure
3) ncloud CLI 다운로드
4) # NKS 사용을 위한 인증 - ncp-iam 설치
5) # kubectl 명령어 설치
6) # alials 단축 명령어
7) 테라폼 유틸 설치
3
네이버 클라우드에 권한이 있어야 한다.
access-key , secret-key를 알아야 한다.
오른쪽 위 본인 계정 > 이용관리 > 계정 관리 > 인증키 관리
https://www.ncloud.com/mypage/status/usage
Access Key ID , Secret Key 복사해 두기
ncp_iam_xxxxxxxxxxx
ncp_iam_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
4
# ncloud CLI 다운로드
# 신규버전
wget https://www.ncloud.com/api/support/download/files/cli/CLI_1.1.23_20241121.zip
unzip CLI_1.1.23_20241121.zip
cd CLI_1.1.23_20241121/
cd cli_linux/
cp ncloud /usr/bin/
ncloud help
최신버전
https://cli.ncloud-docs.com/docs/guide-clichange
5
# ncloud 권한 설정 - Access-key , Secret-key 입력
ncloud configure
Ncloud Access Key ID []: ncp_iam_BPAMKR4
Ncloud Secret Access Key []: ncp_iam_BPKMKR6EFfmXGEJ
Ncloud API URL (default:https://ncloud.apigw.ntruss.com) []: (그냥 엔터)
# 리전에 서버 리스트 확인하기
ncloud vserver getRegionList
https://cli.ncloud-docs.com/docs/cli-vserver-server-common-getregionlist
# MacOS를 사용할 때 자바 바이너리 파일이 실행이 안되는 문제도 발생해서 jdk17버전으로 수정하는 방법
https://hgk5722.tistory.com/560
# 다음 오류시 아래 경로에서 실행해야 한다.
[root@agame-web01-dev ~]# ncloud vserver getRegionList
/usr/bin/ncloud: line 2: ./jre8/bin/java: No such file or directory
cd /root/CLI_1.1.20_20240620/cli_linux
ncloud vserver getRegionList
# CLI 명령어들
https://brunch.co.kr/@topasvga/2054
6
# 사용을 위한 인증 = ncp-iam 설치
curl -o ncp-iam-authenticator -L https://github.com/NaverCloudPlatform/ncp-iam-authenticator/releases/latest/download/ncp-iam-authenticator_linux_amd64
chmod +x ./ncp-iam-authenticator
mkdir -p $HOME/bin && cp ./ncp-iam-authenticator $HOME/bin/ncp-iam-authenticator &&
export PATH=$PATH:$HOME/bin
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bash_profile
ncp-iam-authenticator help
cd
매뉴얼
https://guide.ncloud-docs.com/docs/k8s-iam-auth-ncp-iam-authenticator
# NKS 클러스터 생성후 실행 , 클러스터의 ClusterUUID 필요함
# -clusterUuid는 콘솔에서 확인하자. 쿠버네티스 클러스터 UUID이다.
cd
ncp-iam-authenticator create-kubeconfig --region KR --clusterUuid b01xxxxxxxxxx --output kubeconfig.yaml
7
# kubectl 명령어 설치
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
8
# alials 단축 명령어
vi ~/.bash_profile
# 맨 아래줄에 아래 내용 추가
alias k='kubectl --kubeconfig="/root/kubeconfig.yaml"'
alias kw='watch -d kubectl get deploy,svc,pods --kubeconfig="/root/kubeconfig.yaml"'
alias kwn='watch -d kubectl get no,deploy,svc,pods --kubeconfig="/root/kubeconfig.yaml"'
source ~/.bash_profile
kubectl get nodes
# 동작하지 않음. 아직 클러스터 생성전
9
# 하시코프 테라폼 설치하기 (선택) , 테라폼 사용시만 설치
sudo yum install -y yum-utils shadow-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo
sudo yum -y install terraform
terraform -version
10
# 터미널 2 - 모니터링 하기
kw
kwn
# 클러스터 생성전이라 동작하지 않음.
1
테라폼 코드 다운로드
[root@ncp-game44-com ~]# more *.tf
::::::::::::::
main.tf
::::::::::::::
provider "ncloud" {
support_vpc = true
region = "KR"
access_key = var.access_key
secret_key = var.secret_key
}
resource "ncloud_login_key" "key_vpc" {
key_name = var.name_vpc
}
resource "ncloud_vpc" "vpc_vpc" {
name = var.name_vpc
ipv4_cidr_block = "10.0.0.0/21"
}
resource "ncloud_subnet" "subnet_pri1" {
name = var.name_pri1
vpc_no = ncloud_vpc.vpc_vpc.id
subnet = cidrsubnet(ncloud_vpc.vpc_vpc.ipv4_cidr_block,2 ,0 )
zone = "KR-1"
network_acl_no = ncloud_vpc.vpc_vpc.default_network_acl_no
subnet_type = "PRIVATE"
// PUBLIC(Public) | PRIVATE(Private)
}
resource "ncloud_subnet" "subnet_pub-lb1" {
name = var.name_pub-lb1
vpc_no = ncloud_vpc.vpc_vpc.id
subnet = cidrsubnet(ncloud_vpc.vpc_vpc.ipv4_cidr_block,3 , 5)
zone = "KR-1"
network_acl_no = ncloud_vpc.vpc_vpc.default_network_acl_no
subnet_type = "PUBLIC"
usage_type = "LOADB"
// PUBLIC(Public) | PRIVATE(Private)
}
resource "ncloud_subnet" "subnet_pri-lb1" {
name = var.name_pri-lb1
vpc_no = ncloud_vpc.vpc_vpc.id
subnet = cidrsubnet(ncloud_vpc.vpc_vpc.ipv4_cidr_block,3 , 6)
zone = "KR-1"
network_acl_no = ncloud_vpc.vpc_vpc.default_network_acl_no
subnet_type = "PRIVATE"
// PUBLIC(Public) | PRIVATE(Private)
usage_type = "LOADB"
}
::::::::::::::
nks.tf
::::::::::::::
resource "ncloud_nks_cluster" "cluster" {
cluster_type = "SVR.VNKS.STAND.C002.M008.NET.SSD.B050.G002"
k8s_version = data.ncloud_nks_versions.version.versions.0.value
login_key_name = ncloud_login_key.loginkey.key_name
name = "sample-cluster"
lb_private_subnet_no = ncloud_subnet.subnet_pri-lb1.id
lb_public_subnet_no = ncloud_subnet.subnet_pub-lb1.id
kube_network_plugin = "cilium"
subnet_no_list = [ ncloud_subnet.subnet_pri1.id ]
vpc_no = ncloud_vpc.vpc_vpc.id
zone = "KR-1"
log {
audit = true
}
}
data "ncloud_nks_server_images" "image"{
hypervisor_code = "XEN"
filter {
name = "label"
values = ["ubuntu-20.04"]
regex = true
}
}
data "ncloud_nks_server_products" "nks_products"{
software_code = data.ncloud_nks_server_images.image.images[0].value
zone = "KR-1"
filter {
name = "product_type"
values = [ "STAND"]
}
filter {
name = "cpu_count"
values = [ "2"]
}
filter {
name = "memory_size"
values = [ "8GB" ]
}
}
resource "ncloud_nks_node_pool" "node_pool" {
cluster_uuid = ncloud_nks_cluster.cluster.uuid
node_pool_name = "pool1"
node_count = 1
software_code = data.ncloud_nks_server_images.image.images[0].value
product_code = data.ncloud_nks_server_products.nks_products.products[0].value
subnet_no_list = [ncloud_subnet.subnet_pri1.id]
autoscale {
enabled = true
min = 1
max = 2
}
}
data "ncloud_nks_versions" "version" {
filter {
name = "value"
values = [var.nks_version]
regex = true
}
}
resource "ncloud_login_key" "loginkey" {
key_name = var.login_key
}
::::::::::::::
variables.tf
::::::::::::::
variable name_vpc {
default = "agame-dev-vpc8"
}
variable name_pub1 {
default = "agame-dev-pub1"
}
variable name_pri1 {
default = "agame-dev-pri1"
}
variable name_pub-lb1 {
default = "agame-dev-pub-lb1"
}
variable name_pri-lb1 {
default = "agame-dev-pri-lb1"
}
variable client_ip {
default = "3.3.3.3"
}
variable access_key {
default = "ncp_iam_BPCsZXt2Ng"
}
variable secret_key {
default = "ncp_iam_BPKM6gFVJ0mFbGTc5"
}
variable nks_version {
default = "1.29"
}
variable name_scn_02 {
default = "tf-scn02"
}
variable login_key {
default = "agame11"
}
::::::::::::::
versions.tf
::::::::::::::
terraform {
required_providers {
ncloud = {
source = "navercloudplatform/ncloud"
}
}
required_version = ">= 0.13"
}
2
파일 5개중 4개만 사용 - 개발환경이라 nat는 비용 발생으로 제외
main.tf
nat.tf (생성하지 않음)
nks.tf
variables.tf
versions.tf
vi variables.tf
login 키 이름 수정 필요!!
terraform init
terraform plan
terraform apply -auto-approve
# 삭제
terraform destroy -auto-approve
# 여러번 실행시 로그인키 중복 오류 함.
vi variables.tf
login 키 이름 수정 필요!!
terraform apply -auto-approve
# 클러스터 생성에 17분 , 노드 생성에 11분 , 총 28분 걸린다.
ncloud_nks_cluster.cluster: Still creating... [16m51s elapsed]
ncloud_nks_cluster.cluster: Still creating... [17m1s elapsed]
ncloud_nks_cluster.cluster: Creation complete after 17m10s [id=60ef54df-1487-42f1-b71a-b17d7f89b729]
ncloud_nks_node_pool.node_pool: Still creating... [10m40s elapsed]
ncloud_nks_node_pool.node_pool: Still creating... [10m50s elapsed]
ncloud_nks_node_pool.node_pool: Creation complete after 10m51s [id=9d946de5-4337-465b-a885-547e92cc626a:pool1]
https://vclock.kr/timer/#countdown=00:10:00&enabled=0&seconds=0&sound=xylophone&loop=1
3
결과
VPC 생성
클러스터 생성
4
인증
cd
ncp-iam-authenticator create-kubeconfig --region KR --clusterUuid ce88e483-b057-4b92-b0cb-2cdb14101c28 --output kubeconfig.yaml
k get nodes
NAME STATUS ROLES AGE VERSION
pool1-w-65ff Ready <none> 55s v1.29.9
1
콘솔에서
네트워크 구축 확인 - NAT 구축 안함. 비용 절감.
2
NKS 구축 확인
1) 상세정보
2) 노드풀
3) 노드
4) 노드 서버는 Private 에 생성됨.
NAT가 되어야 인터넷이 됨. 참조.
현재 서비스 가능한 네트워크는 아니다.
3
k get nodes
NAME STATUS ROLES AGE VERSION
pool1-w-5082 Ready <none> 3m41s v1.29.9
pool1-w-65ff Ready <none> 18m v1.29.9
1
전체 NAT 까지 있는 테라폼 코드 (참조)
전체 네트워크를 구성하고, 서비스까지 올려보자.
https://brunch.co.kr/@topasvga/4060
0
cat <<EOF | k create -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-2048
spec:
selector:
matchLabels:
app.kubernetes.io/name: app-2048
replicas: 2
template:
metadata:
labels:
app.kubernetes.io/name: app-2048
spec:
containers:
- image: alexwhen/docker-2048
name: app-2048
ports:
- containerPort: 80
EOF
k expose deployment deployment-2048 --port=80 --type=LoadBalancer
클래식 로드 밸런서 연결
외부에서 접속
kubectl expose deployment deployment-2048 --port=80 --type=LoadBalancer
2
콘솔에서 사설 라우팅 테이블에 0.0.0.0/0 NAT1 설정을 하면 pod들이 서비스 가능해진다.
3
kw로 모니터링하기
모니터링 상태
5
# 서버 20대로 늘리기
# pod 증가 시키기
k scale deployment deployment-2048 --replicas=20
6
# 애플리케이션 삭제
k delete deployment.apps/deployment-2048
k delete service/deployment-2048
1
https://brunch.co.kr/@topasvga/2230
2
https://brunch.co.kr/@topasvga/2228
3
https://brunch.co.kr/@topasvga/2229
1
웹서비스 삭제
kube-ops-view 삭제
NKS와 네트워크는 테라폼으로 삭제
terraform destroy -auto-approve
2
NKS 노드 삭제
클러스터 삭제
로드 밸런서 삭제
NATGW 삭제
프라이빗 라우팅테이블에 0.0.0.0/0 NAT1 삭제
서브넷 삭제
VPC 삭제
3
# 전체 다시 보기
https://brunch.co.kr/@topasvga/4193
다음
https://brunch.co.kr/@topasvga/4209
감사합니다.