<1> nhn NKS 사용해 보자.
<2> NKS 생성 = 클러스터 생성
<3> 각종 툴 설치
<4> 간단한 게임 올려보자.
<5> 정리
한국(평촌) 리전에서 사용
어느 리전이든 상관은 없다.
1
Container > NHN Kubernests Service(NKS) > 클러스터 생성
2
mario-nhn-nks
32자 이내로 작성해 주세요.
소문자와 숫자, '-'만 입력 가능하며 소문자로 시작해야 하고 소문자 또는 숫자로 끝나야 합니다.
v1.25.4 (2023-04월 현재)
노드수 2
키페어 기존 것 사용
오토스케일러 사용으로 변경
최소 2
최대 10
클러스터는 최대 3개까지 생성할 수 있습니다.
// 노드수는 4개도 된다. 클러스터는 최대 3개까지 가능하다.
생성에 10분 걸린다.
Centos등 다양한 OS를 지원한다.
다른 CSP와 다른 점이다.
3
kubeconfig 파일 다운로드 한다.
4
기존에 만들어 놓은 명령 서버 (instance)에 접속하여 node 생성 확인
다운로드한 kubeconfig 파일의 내용을 config 파일에 설정을 넣자.
mkdir ~/.kube
sudo vim ~/.kube/config
cd ~/.kube/
more config
5
명령서버에 우선 kubectl 만 설치
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
kubectl get nodes
최소 2 node라 2개 work node가 보임
[root@mario-nhn-command1 .kube]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
mario-nhn-nks-default-worker-node-1 Ready <none> 29m v1.25.4
mario-nhn-nks-default-worker-node-2 Ready <none> 29m v1.25.4
kube-ps1 설치 및 사용- 프롬프트에 Context와 Namespace를 표시
(⎈|default:default) [root@2048game-nhn-web01 ~]# kubectl ns default
Context "default" modified.
Active namespace is "default".
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
[root@kops-ec2 ~]# k oomd
No out of memory pods found in default namespace.
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
1
마리오 게임을 올려보자
https://brunch.co.kr/@topasvga/3179
1
터미널하나를 더 띠운다. 터미널 2에서 모니터링
watch -d kubectl get ns,svc,deploy,rs,pods
or
watch -d kubectl get all
or
watch -d kubectl get ns,svc,deploy,rs,pods -o wide
2
2048 네임 스페이스 만들기
kubectl create namespace 2048
k ns 2048
(⎈|default:default) [root@2048game-nhn-web01 ~]# k ns 2048
3
디플로이 먼트 생성
cat <<EOF | kubectl 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
4
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
deployment.apps/deployment-2048 2/2 2 2 13s app-2048 alexwhen/docker-2048 app.kubernetes.io/name=app-2048
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/kubernetes ClusterIP 10.254.0.1 <none> 443/TCP 62m <none>
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/deployment-2048-8445476958-6p798 1/1 Running 0 13s 10.200.38.4 game2048-nhn-nks-default-worker-node-1 <none> <none>
pod/deployment-2048-8445476958-h9xxl 1/1 Running 0 13s 10.200.171.204 game2048-nhn-nks-default-worker-node-2 <none> <none>
5
클래식 로드 밸런서 연결
외부에서 접속
kubectl expose deployment deployment-2048 --port=80 --type=LoadBalancer
6
Every 2.0s: kubectl get all Mon Apr 17 18:16:11 2023
NAME READY STATUS RESTARTS AGE
pod/deployment-2048-8445476958-s59bn 1/1 Running 0 4m50s
pod/deployment-2048-8445476958-xvqf7 1/1 Running 0 4m50s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/deployment-2048 LoadBalancer 10.254.151.41 133.186.203.234 80:31320/TCP 39s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/deployment-2048 2/2 2 2 4m50s
NAME DESIRED CURRENT READY AGE
replicaset.apps/deployment-2048-8445476958 2 2 2 4m50s
7
웹 접속
방향키로 사용
8
사용자가 늘어나면 ?
kubectl scale deployment --replicas=10 deployment-2048
9
(선택)
k delete services "deployment-2048"
NodePort 서비스 생성 = 내부에서 접속하는 ip가 나온다.
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Service
metadata:
name: deployment-2048
spec:
ports:
- name: deployment-2048
port: 10000
targetPort: 80
selector:
app.kubernetes.io/name: app-2048
type: NodePort
EOF
10
설정을 변경하면 웹으로 접속 된다.
변경전
port: 10000
type: NodePort
변경후
port: 80
type: LoadBalancer
11
프로세스 확인
kubectl exec deploy/deployment-2048 -it -- ps axf
[root@2048game-nhn-web01 .kube]# kubectl exec deploy/deployment-2048 -it -- ps axf
PID USER TIME COMMAND
1 root 0:00 nginx: master process nginx -g daemon off;
6 nginx 0:00 nginx: worker process
7 root 0:00 ps axf
12
게임 소스 확인
kubectl exec deploy/deployment-2048 -it -- ls -lRa /usr/share/nginx/html
13
게임 웹 주소 확인
GAMENIP=$(kubectl get pod -l app.kubernetes.io/name=app-2048 -o jsonpath='{.items[0].status.hostIP}')
GAMENPORT=$(kubectl get svc deployment-2048 -o jsonpath={.spec.ports[0].nodePort})
echo -e "GAME URL = http://$GAMENIP:$GAMENPORT"
// node 정보
GAME URL = http://10.0.0.33:31320
14
삭제
kubectl delete deploy,svc deployment-2048
nodeport로 타입을 하면 2048이 사설 ip로 서비스가 생긴다.
타입을 로드 밸런서로 해야 외부에서 접속 가능하다!
감사합니다.