brunch

You can make anything
by writing

C.S.Lewis

by Master Seo May 22. 2024

NCP 20탄-6. 테라폼1 -2024


<24> 환경- Pub1 서브넷에 로키나 우분트로 테러폼 설치된 명령서버 1대 생성



목표

테라폼으로 네이버 네트워크와 쿠버네티스를 생성해보자. 






진행

명령서버 1대 만들자.

명령서버에 쿠버네티스를 만들수 있는 권한과 테라폼으로 쿠버네티스를 만들자.



운영

첫째, 테라폼으로 네이버 클라우드 네트워크만 1회성으로만 생성하여 운영 하는 방법이 있다.

둘째, 테라폼으로 네이버 클라우드 서비스를 생성하고 계속 운영 하는 방법이 있다.




여기서는 명령서버 만들자~

퍼블릭 서브넷 서버에, 콘솔로 테러폼 설치된 명령서버 1대 생성



1

Pub1 서브넷에 로키 리눅스나 우분트로 서버를 생성한다.

로키 리눅스에서는 테라폼 Amazon Linux 버전으로 설치해야 동작한다.

centos도 가능하나 네이버 클라우드에서 Centos자체가 내려감

passwd



2

access-key , secret-key 생성해 준비한다.


콘솔 로그인 > 계정 관리 > 인증키 관리에서 access-key , secret-key 생성해 메모장에 복사해둔다.


https://www.ncloud.com/



3

서버에 로그인

passwd



4

ncloud CLI 다운로드


wget https://www.ncloud.com/api/support/download/files/cli/CLI_1.1.19_20240321.zip


unzip CLI_1.1.19_20240321.zip

cd CLI_1.1.19_20240321/

cd cli_linux/

cp ncloud /usr/bin

ncloud help


최신 버전

https://cli.ncloud-docs.com/docs/guide-clichange




5

네이버 클라우드 리소스 만들수 있도록 권한 받기

Access키, 시크리키로 권한 받기


ncloud configure




6

권한 부여 확인

ncloud server getRegionList



7

테라폼 설치 ?

로키 리눅스의 경우 - 아마존 리눅스 버전 설치하면 동작 한다.

Linux - Amazon Linux 


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




8

쿠버네티스 API에 명령을 내리는 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

kubectl version



9

TF 소스 받아 쿠버네티스 클러스터 생성



테라폼 쿠버네티스  소스


cd

wget  https://github.com/NaverCloudPlatform/terraform-provider-ncloud/archive/refs/heads/master.zip

unzip master.zip



cd /root/terraform-provider-ncloud-main/examples/nks



10  

네이버 쿠버네티스 서비스의 권한을 받기 위한 툴 설치


ncp-iam-authenticator  설치



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


메뉴얼

https://guide.ncloud-docs.com/docs/k8s-iam-auth-ncp-iam-authenticator



//

인증

cd

ncp-iam-authenticator create-kubeconfig --region KR --clusterUuid   a2143bde-4e6f-44d8-bfaf-075ede2a452f --output kubeconfig.yaml




11

테라폼으로 쿠버네티스 생성해 보자



아래 3과정을 거친다.

terraform init

terraform plan

terraform apply -auto-approve



# 테라폼 시작하기 - 네트워크 부터 만들어보자 (선택) , 기초 공부

https://brunch.co.kr/@topasvga/3594




12

변수 파일~~~~

값을 넣어야 한다!!!!


vi variables.tf


[root@command1 nks]# more variables.tf

variable name {

  default = "tf-nks"

}

variable nks_version {

  default = "1.27"

}

variable client_ip {

  default = "YOUR_CLIENT_IP"

}

variable access_key {

  default = "YOUR_ACCESS_KEY"

}

variable secret_key {

  default = "YOUR_SECRET_KEY"

}

variable login_key {

  default = "YOUR_LOGIN_KEY"

}

[root@command1 nks]#




13

[root@command1 nks]# terraform plan

Planning failed. Terraform encountered an error while generating this plan.

│ Error: Status: 401 Unauthorized, Body: {"error":{"errorCode":"200","message":"Authentication Failed","details":"This account is not allowed."}}

│   with provider["registry.terraform.io/navercloudplatform/ncloud"],

│   on main.tf line 4, in provider "ncloud":

│    4: provider "ncloud" {

[root@command1 nks]#


테라폼으로 쿠버네티스를 생성하려니 권한이 없다는 것이다.

테라폼 변수 파일에 Access-key나 Secret-key를 입력해야 권한이 생긴다.






14

terraform plan


ncloud_nks_cluster.cluster: Creating...

│ Error: Status: 400 Bad Request, Body: {"error":{"errorCode":400,"message":"Bad Request","details":"Require lbPublicSubnetNo"},"timestamp":"2024-06-01T11:10:53.147Z"}

│   with ncloud_nks_cluster.cluster,

│   on main.tf line 48, in resource "ncloud_nks_cluster" "cluster":

│   48: resource "ncloud_nks_cluster" "cluster" {

[root@command1 nks]#





15

public lb 추가 필요


vi main.tf


resource "ncloud_subnet" "lb_subnet2" {

  vpc_no         = ncloud_vpc.vpc.id

  subnet         = "10.0.102.0/24"

  zone           = "KR-1"

  network_acl_no = ncloud_vpc.vpc.default_network_acl_no

  subnet_type    = "PUBLIC"

  name           = "lb-subnet2"

  usage_type     = "LOADB"

}




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.lb_subnet.id

  lb_public_subnet_no        = ncloud_subnet.lb_subnet2.id




16

  taint  부분 삭제~



  label {

    key = "foo"

    value = "bar"

  }

  taint {

    key = "foo"

    value = "bar"

    effect = "NoExecute"

  }


https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/




17

terraform apply -auto-approve


35분 후






16

생성된 쿠버네티스 권한 등록


cd

ncp-iam-authenticator create-kubeconfig --region KR --clusterUuid   b01xxxxxxxxxx --output kubeconfig.yaml


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




17

콘솔에서 확인






테라폼 시작하기


https://brunch.co.kr/@topasvga/3598



https://brunch.co.kr/@topasvga/3587



18


vi  ~/.bash_profile  


맨 아래줄에 아래 내용 추가

alias k='kubectl --kubeconfig="/root/kubeconfig.yaml"'

alias kw='watch -d kubectl get deploy,svc,pods --kubeconfig="/root/kubeconfig.yaml"'



source ~/.bash_profile

k get nodes



참고사이트

https://medium.com/naver-cloud-platform/cbe27e197a97





19


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



클래식 로드 밸런서 연결

외부에서 접속




20

kw




21


cd /root/terraform-provider-ncloud-main/examples/nks



pub1.tf

::::::::::::::

resource "ncloud_subnet" "pup1_subnet" {

  vpc_no         = ncloud_vpc.vpc.id

  subnet         = "10.0.0.0/24"

  zone           = "KR-1"

  network_acl_no = ncloud_vpc.vpc.default_network_acl_no

  subnet_type    = "PUBLIC"

  name           = "pub1-subnet"

  usage_type     = "GEN"

}



terraform plan

terraform apply -auto-approve



22

명령서버를  Server Image 로 만들자.


Server Image를 이용해 pub1에 명령서버를 만들자~




다음

https://brunch.co.kr/@topasvga/3828




감사합니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari