brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Apr 17. 2023

NCP 5탄-0. 쿠버네티스 서비스-2024-05

네이버 클라우드 쿠버네티스 클러스터 생성은 다음과 같은 내용을 만든다.

네트워크 만들기 - 로드밸런서 용으로  Public LB + Private LB서브넷을 만들어야 한다.

콘솔로 쿠버네티스 클러스터 생성

명령 서버 생성

명령 서버에서 서비스 올리기

cname 으로 dns연결하기

접속 확인



테스트 환경 구성 

- 테스트 환경이라 Worker Node를 Public에 구축한다.

서비스 환경에서는 Worker Node를 Private에 구축하는것이 보안적인 측면에서 좋다.


네이버 클라우드 플랫폼 로그인

https://www.ncloud.com/



<1> VPC , LB 서브넷 만들기

<2> 콘솔로 쿠버네티스 클러스터 생성

<3> 명령 내릴  리눅스 서버 하나 생성.

<4> 각종 툴 설치

<5> 쿠버네티스에  game2048 서비스 올리기

<6> 정리




<1> VPC , LB 서브넷 만들기


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





<2> 콘솔로 쿠버네티스 클러스터 생성


1

쿠버네티스 클러스터 만들기


Containers  >  Kubernetes Service > 생성 하기

 game2048-naver-ks

소문자만 가능합니다.

최소 3글자 이상, 최대 20 자까지만 입력이 가능합니다.

버전은 1개 지원한다.

CNI Plugin : cilium

VPC 선택

네트워크 타입을 선택 - 여기서는 우선 Public으로 한다.

 Subnet = public 선택  (선택)

LB Private서브넷 필수

LB Public서브넷 필수




2

노드풀?


game2048-naver-np

노드풀은 우분트 이미지만 가능하다.

노드수 2개로 변경

추가 

다음



3

새인증키

game2048-naver-ks1-key



4

총 20분 정도 걸린다.


EC2 생성은 10분정도 걸린다.

Kubernetes Service > Clusters 에서 완료는 20분 정도 걸린다.





<3>  명령 내릴  리눅스 서버 하나 생성.


1

로키 리눅스 생성

game2048-naver-command1

공인 IP : 새로운 공인 IP 할당




2

보안 그룹  확인 (디폴트 사용)

Server > ACG

game2048-naver-vpc-default-acg

디폴트

0.0.0.0/0 3389

0.0.0.0/0 22


공인ip 확인

110.165.19.17




3

새로운 인증키

game2048-naver-command1-key



4

putty로 접속

계정 암호 방식이다.

root

g1!




5

ncp-iam-authenticator 설치 ?

https://guide.ncloud-docs.com/docs/k8s-iam-auth-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




6

IAM 인증 kubeconfig 생성/업데이트 ?

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



[마이 페이지]>[계정 관리]>[인증키 관리]  확인하여 변수로 입력하자.


export NCLOUD_ACCESS_KEY=EQC

export NCLOUD_SECRET_KEY=3z0x

export NCLOUD_API_GW=https://ncloud.apigw.ntruss.com




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

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



ncloud configure



ncloud server getRegionList



또는


mkdir -p ~/.ncloud

vi ~/.ncloud/configure  



$ vi ~/.ncloud/configure

[DEFAULT]

ncloud_access_key_id = EQCy

ncloud_secret_access_key =3z0x

ncloud_api_url = https://ncloud.apigw.ntruss.com


[project]

ncloud_access_key_id = EQC

ncloud_secret_access_key =3z0x

ncloud_api_url = https://ncloud.apigw.ntruss.com




9

ncp-iam-authenticator update-kubeconfig --region <region-code> --clusterUuid <cluster-uuid>




cd

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


b01xxxxxxxxxxx 부분은 콘솔에서 확인하여 입력이 필요함.







10

kubectl get namespaces --kubeconfig kubeconfig.yaml


[root@s1878e155d51 ~]# kubectl get namespaces --kubeconfig kubeconfig.yaml

NAME              STATUS   AGE

default           Active   57m

kube-node-lease   Active   57m

kube-public       Active   57m

kube-system       Active   57m




11

kubectl get nodes --kubeconfig kubeconfig.yaml


[root@s1878e155d51 ~]# k get nodes --kubeconfig kubeconfig.yaml

NAME                       STATUS   ROLES    AGE   VERSION

game2048-naver-np-w-2nlc   Ready    <none>   58m   v1.24.10

game2048-naver-np-w-2nld   Ready    <none>   58m   v1.24.10




12

vi  ~/.bash_profile  


맨 아래줄에 아래 내용 추가

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

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



13

source ~/.bash_profile




14

k get nodes

NAME                       STATUS   ROLES    AGE   VERSION

game2048-naver-np-w-2nlc   Ready    <none>   59m   v1.24.10

game2048-naver-np-w-2nld   Ready    <none>   59m   v1.24.10





15

모니터링  kw


Every 2.0s: kubectl get deploy,svc,pods --kubeconfig=/root/kubeconfig.yaml 


NAME                              READY   UP-TO-DATE   AVAILABLE   AGE

deployment.apps/deployment-2048   2/2     2            2           14h


NAME  TYPE      CLUSTER-IP       EXTERNAL-IP            PORT(S)        AGE

service/deployment-2048   LoadBalancer   198.19.137.168   default-deployment-2048-47c63-17999181-541a47536216.kr.lb.naverncp.com   80:31620/TCP   14h

service/kubernetes  ClusterIP      198.19.128.1     <none>                443/TCP        15h


NAME                                                           READY   STATUS    RESTARTS   AGE

pod/deployment-2048-8445476958-slx5w   1/1     Running   0          14h

pod/deployment-2048-8445476958-wf7ln   1/1     Running   0          14h




16

툴설치, 인증 설치


Install Tools

https://kubernetes.io/docs/tasks/tools/#install-kubectl



ncp-iam-authenticator 설치

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






<4> 각종 툴 설치 (선택)


1

kubectl 자동 완성 기능과 alias 사용하기(중복)


# 자동 완성 및 alias 축약 설정

source <(kubectl completion bash)

echo 'source <(kubectl completion bash)' >> ~/.bashrc

echo 'alias k=kubectl' >> ~/.bashrc

echo 'complete -F __start_kubectl k' >> ~/.bashrc


bash


[root@kops-ec2 ~]# k get nodes

NAME                  STATUS   ROLES           AGE   VERSION

i-002186eeab26ccd9a   Ready    node            27m   v1.24.10

i-00d730519589b5519   Ready    control-plane   29m   v1.24.10

i-0c3ef584d2e10254b   Ready    node            27m   v1.24.10




2

krew ?


kubectl cli 플러그인 매니저, 쿠버네티스 크루(krew) 설치

macOS의 brew, Ubuntu의 apt와 비슷한 역할

Krew를 통해 현재 90가지 이상의 플러그인을 설치할 수 있다.


# 설치

curl -fsSLO https://github.com/kubernetes-sigs/krew/releases/download/v0.4.3/krew-linux_amd64.tar.gz

tar zxvf krew-linux_amd64.tar.gz

./krew-linux_amd64 install krew



# PATH 추가

export PATH="${PATH}:/root/.krew/bin"

echo 'export PATH="${PATH}:/root/.krew/bin"' >>~/.bashrc


# krew 확인

kubectl krew update

kubectl krew search

kubectl krew list

kubectl krew install pluginxxxxxx



3

krew로 kube-ctx, kube-ns 설치 및 사용

kube-ctx : 쿠버네티스 콘텍스트 사용


# 설치

kubectl krew install ctx


# 콘텍스트 확인

kubectl ctx

masterseo0.link


# 콘텍스트 사용

kubectl ctx <각자 자신의 콘텍스트 이름>



4

kube-ns : 네임스페이스(단일 클러스터 내에서 가상 클러스터) 사용


# 설치

kubectl krew install ns


# 네임스페이스 확인

[root@kops-ec2 ~]# kubectl ns

default

kube-node-lease

kube-public

kube-system



# 터미널 1

watch kubectl get pod


# kube-system 네임스페이스 선택 사용

kubectl ns kube-system


# default 네임스페이스 선택 - 디폴트로 변경.

kubectl ns -

혹은

kubectl ns default



설치된 리스트 확인

[root@kops-ec2 ~]# kubectl krew list

PLUGIN  VERSION

ctx     v0.9.4

krew    v0.4.3

ns      v0.9.4



5

krew로 기타 플러그인 설치 및 사용 : df-pv get-all ktop neat oomd view-secret


# 설치

kubectl krew install df-pv get-all ktop neat oomd view-secret


# get-all 사용

kubectl get-all -n kube-system

kubectl get-all


# ktop 사용

kubectl ktop




# oomd 사용

kubectl oomd


[root@kops-ec2 ~]# k oomd

No out of memory pods found in default namespace.




# df-pv 사용

kubectl df-pv


[root@kops-ec2 ~]# kubectl df-pv

INFO[2023-03-13T19:22:57+09:00] Either no volumes found in namespace/s: 'all' or the storage provisioner used for the volumes does not publish metrics to kubelet



# view-secret 사용 : 시크릿 복호화

kubectl view-secret



6

kube-ps1 설치 및 사용- 프롬프트에 Context와 Namespace를 표시


# 설치 및 설정


git clone https://github.com/jonmosco/kube-ps1.git /root/kube-ps1


cat <<"EOT" >> /root/.bash_profile

source /root/kube-ps1/kube-ps1.sh

KUBE_PS1_SYMBOL_ENABLE=true

function get_cluster_short() {

  echo "$1" | cut -d . -f1

}

KUBE_PS1_CLUSTER_FUNCTION=get_cluster_short

KUBE_PS1_SUFFIX=') '

PS1='$(kube_ps1)'$PS1

EOT


# 적용

sudo su -


# default 네임스페이스 선택

(⎈|default:default) [root@2048game-nhn-web01 ~]# kubectl ns default

Context "default" modified.

Active namespace is "default".



7

helm 설치

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




<5> 쿠버네티스에  game2048 서비스 올리기


1

모니터링

 watch -d kubectl get all


Every 2.0s: kubectl get all                                                                                                                      Mon Apr 17 17:38:54 2023

NAME                                   READY   STATUS    RESTARTS   AGE

pod/deployment-2048-546d54cfbc-r5x74   1/1     Running   0          2m1s

pod/deployment-2048-546d54cfbc-rbn2n   1/1     Running   0          2m1s

NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE

service/kubernetes   ClusterIP   198.19.128.1   <none>        443/TCP   69m

NAME                              READY   UP-TO-DATE   AVAILABLE   AGE

deployment.apps/deployment-2048   2/2     2            2           2m1s

NAME                                         DESIRED   CURRENT   READY   AGE

replicaset.apps/deployment-2048-546d54cfbc   2         2         2       2m1s



2

cat <<EOF | kubectl create -f -


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




3

클래식 로드 밸런서 연결

외부에서 접속

k expose deployment deployment-2048 --port=80 --type=LoadBalancer


kubectl expose deployment deployment-2048 --port=80 --type=LoadBalancer




4

k get all


kubectl get all


 watch -d kubectl get all --kubeconfig="/root/kubeconfig.yaml"



Every 2.0s: kubectl get all                                         


NAME                                   READY   STATUS    RESTARTS   AGE

pod/deployment-2048-546d54cfbc-blkln   1/1     Running   0          2m30s

pod/deployment-2048-546d54cfbc-kpjbh   1/1     Running   0          2m30s


NAME                      TYPE           CLUSTER-IP       EXTERNAL-IP                                                              PORT(S)        AGE

service/deployment-2048   LoadBalancer   198.19.199.169   default-deployment-2048-bc187-16887970-f85bfaa0fd29.kr.lb.naverncp.com   80:30856/TCP   2m13s

service/kubernetes    ClusterIP      198.19.128.1     <none>         443/TCP        80m


NAME                              READY   UP-TO-DATE   AVAILABLE   AGE

deployment.apps/deployment-2048   2/2     2            2           2m30s


NAME                                         DESIRED   CURRENT   READY   AGE

replicaset.apps/deployment-2048-546d54cfbc   2         2         2       2m30s




5

kw




6

로드 밸런서 접속



 



6

콘솔에서 LB 확인





7

global dns 서비스에서 cname으로 지정

2048  cname    lb이름


http://2048.serverup11.com/




8

삭제

kubectl delete deploy,svc deployment-2048





<5> 정리


쿠버네티스 클러스터 생성은 다음과 같은 내용을 만든다.

네트워크 만들기

쿠버네티스 클러스터 생성

명령 서버 생성

명령서버에서 서비스 올리기

cname 으로 dns연결하기



참고

1

네이버 클라우드 NKS 지원 릴리즈

https://guide.ncloud-docs.com/docs/k8s-k8srelease



2

네이버 클라우드 NKS  - 테라폼

https://d2.naver.com/helloworld/3612055



3

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



다음

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



감사합니다.

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