brunch

매거진 kakao cloud

You can make anything
by writing

C.S.Lewis

by Master Seo Feb 13. 2023

카카오 클라우드1탄-7. 쿠버네티스 엔진 클러스터 만들

https://kakaocloud.com/



<1> 쿠버네티스 엔진 클러스터 만들기

<2> 클러스터 클릭하여 세부 정보 확인

<3> 노드 관리하기

<4> Node모니터링, Pod모니터링

<5> 리눅스 서버 1대 만들어 kubectl로 제어 설정하기

<6> 게임 1개 올려보기

<7> 정리



<1> 쿠버네티스 엔진 클러스터 만들기


0

네트워크 구성

VPC 172.16.0.0/16

main Subnet  172.16.0.0/20



1

Container Pack > Kubernetes Engine > 클러스터 만들기


클러스터 이름

dgame-dev-cl

tetris-kakao-dev-k8s

1.24 버전 사용가능 (2023년 4월 현재)

1.23 버전과 2개 가능



2

노트풀이름 입력

dgame-node

노드수 2개로 변경




3

노드풀 확장으로 변경

최소 2

최대 10


4

키페어 생성

tetris-kakao-dev-k8s


3

Cluster 생성 완료






<2> 클러스터 클릭하여 세부 정보 확인



1

세부 정보 확인

vCPU 디폴트 4개

MEM 16 GB

보안그룹





2

노드풀 확인

1.24 버전

노드수 2개



3

상세 노드 호스트명, IP 확인 가능하다.


4

보안그룹 확인


인바운드



아웃 바운드



<3> 노드 관리하기


1

Cluster > 해당 클러스터 클릭 > 노드 풀  


노드풀 탭을 보면 버전과 노드수 확인이 가능하다. 2개

노드풀 설정에서 노드풀을 3개 등으로 변경가능하다.



2

자동 확정 설정은 디폴트는 사용안함이다.

사용 함으로 변경해 설치했다.



참고 자료

https://console.kakaoi.io/docs/posts/k8se/k8se_htg/2022-10-18-k8se_htg_newmanageNode/k8se_htg_newmanageNode#% EB%85% B8% EB%93%9C-%ED%92%80-%EC% 9E%90% EB% 8F%99-%ED%99%95% EC% 9E% A5-%EC%84% A4% EC% A0%95% ED%95%98% EA% B8% B0




<4> Node모니터링, Pod모니터링


1

Node 모니터링


Cluster > 해당 클러스터 클릭 >  노드에서

Node 모니터링



2

해당 호스트 클릭 >  모니터링 탭 > 해당 호스트의 CPU등 사용량 확인가능하다.




Pod 선택시 Pod도 모니터링 가능하다.





<5> 리눅스 서버 1대 만들어 kubectl로 제어 설정하기


https://console.kakaoi.io/docs/posts/k8se/k8se_htg/2021-05-31-k8se_htg_settingKubectl/k8se_htg_settingKubectl#step-3-kubectl-%EB%8F%99%EC%9E%91-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0


1

리눅스 서버 1대 만들기

tetris-kakao-dev-command1

퍼블릭 ip는 인스턴스 생성후 public ip 연결 설정하여 연결한다. Network > VPC > Public ip

디폴트 보안그룹은 모두 막혀 있다.   tcp 22 허용하자.

puttgen으로 ppk로 변환 접속



kubectl download


curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" 


install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl



2

kubectl로 제어 설정하기


Cluster > kubectl 클릭


kubectl 제어 설정 - kubeconfig파일 다운로드

다운로드 폴더에 kubeconfig-dgame-dev-cl.yaml  파일 이름으로 다운로드해 진다.




3

Access-key 받기

카카오 i 클라우드 콘솔 우측 상단에 위치한 프로필에서 사용자 엑세스 키를 클릭

tetris-ka-dev-access


https://console.kakaoi.io/docs/posts/kic_console/2022-06-13-kic_console_setting/kic_console_setting#%EC%84%A4%EC%A0%95-%EA%B0%80%EC%9D%B4%EB%93%9C



4

kubeconfig-dgame-dev-cl.yaml  파일에 access-key , secretkey 입력


vi kubeconfig-dgame-dev-cl.yaml


  name: dgame-dev-cl-admin@dgame-dev-cl

current-context: dgame-dev-cl-admin@dgame-dev-cl

kind: Config

preferences: {}

users:

- name: dgame-dev-cl-admin

  user:

    exec:

      apiVersion: client.authentication.k8s.io/v1beta1

      args: null

      command: kic-iam-auth

      env:

          - name: "OS_AUTH_URL"

            value: "https://iam.kakaoi.io/identity/v3"

          - name: "OS_AUTH_TYPE"

            value: "v3applicationcredential"

          - name: "OS_APPLICATION_CREDENTIAL_ID"

            value: "634f94d54d7394bce01"

          - name: "OS_APPLICATION_CREDENTIAL_SECRET"

            value: "hpjdQZK8VvRMHZ5sS5VCM6yAEIxgIjXCcvg"

          - name: "OS_REGION_NAME"

            value: "kr-central-1"

[root@host-172-16-1-255 ~]#



vi kubeconfig-tetris-kakao-dev-k8s

export KUBE_CONFIG="kubeconfig-tetris-kakao-dev-k8s"



5

export KUBE_CONFIG="kubeconfig-dgame-dev-cl.yaml"



6

kubectl --kubeconfig=$KUBE_CONFIG get nodes
NAME                STATUS   ROLES    AGE     VERSION
host-172-16-0-147   Ready    <none>   4h42m   v1.24.6
host-172-16-1-109   Ready    <none>   5h2m    v1.24.6
host-172-16-2-107   Ready    <none>   5h2m    v1.24.6


7

alias kubectl='kubectl --kubeconfig=$KUBE_CONFIG'

alias k=kubectl

source ~/.bash_profile

k get nodes




<6>게임 1개 올려보기



0

각종 툴 설치


각종 tool을 설치해 유용하게 사용해 보자.


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

k get nodes


[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

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


# 설치 및 설정


yum install git -y


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".



3

krew ?


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

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

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



# 설치



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


yum install -y tree

tree -L 3 /root/.krew/bin



# 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



4

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

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


# 설치

kubectl krew install ctx


# 콘텍스트 확인

kubectl ctx

masterseo0.link


# 콘텍스트 사용

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



5

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


# 설치

kubectl krew install ns


# 네임스페이스 확인

kubectl 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



설치된 리스트 확인

kubectl krew list


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

PLUGIN  VERSION

ctx     v0.9.4

krew    v0.4.3

ns      v0.9.4



6

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





7

helm 설치

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



8

기존에 만들어 놓은 명령 서버 (instance)에 접속하여 필요한 툴을 설치한다.


yum -y install tree jq git htop



wget https://github.com/andreazorzetto/yh/releases/download/v0.4.0/yh-linux-amd64.zip


yum install unzip -y

unzip yh-linux-amd64.zip

mv yh /usr/local/bin/





9

클러스터 와 네임스페이스 변경 유틸?

git clone https://github.com/ahmetb/kubectx /opt/kubectx

ln -s /opt/kubectx/kubens /usr/local/bin/kubens

ln -s /opt/kubectx/kubectx /usr/local/bin/kubectx


kubens



10

watch -d kubectl get ns,svc,deploy,pods


kubectl delete ns sock-shop


kubectl delete deploy --all






테트리스 게임 올리기

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





1

2049 게임  올리기 



cat <<EOF | kubectl --kubeconfig=$KUBE_CONFIG 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


2
lb 생성하기
kubectl --kubeconfig=$KUBE_CONFIG expose deployment deployment-2048 --port=80 --type=LoadBalancer


3
생성 확인
kubectl --kubeconfig=$KUBE_CONFIG get svc,ep
참고 : LB가 사설로 나온다.


4
url 확인
GAMENIP=$(kubectl --kubeconfig=$KUBE_CONFIG get pod -l app=mario -o jsonpath='{.items[0].status.hostIP}')

GAMENPORT=$(kubectl --kubeconfig=$KUBE_CONFIG get svc mario -o jsonpath={.spec.ports[0].nodePort})
echo -e "GAME URL = http://$GAMENIP:$GAMENPORT"

참고 : LB가 사설로 나온다.


5

참고
쿠버네티스 게임

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


다음은

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





<7> 정리


가입시 사업자 등록증 입력이 필요하다.

테트리스등 게임시 로드밸런서가 사설IP로 나온다. 이유를 확인해보자. nhn등은 공인으로 나온다.



감사합니다.

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