네이버 클라우드 쿠버네티스 클러스터 생성은 다음과 같은 내용을 만든다.
네트워크 만들기 - 로드밸런서 용으로 Public LB + Private LB서브넷을 만들어야 한다.
콘솔로 쿠버네티스 클러스터 생성
명령 서버 생성
명령 서버에서 서비스 올리기
cname 으로 dns연결하기
접속 확인
테스트 환경 구성
- 테스트 환경이라 Worker Node를 Public에 구축한다.
서비스 환경에서는 Worker Node를 Private에 구축하는것이 보안적인 측면에서 좋다.
네이버 클라우드 플랫폼 로그인
https://brunch.co.kr/@topasvga/3956
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분 정도 걸린다.
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
1
# 자동 완성 및 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
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
kube-ctx : 쿠버네티스 콘텍스트 사용
# 설치
kubectl krew install ctx
# 콘텍스트 확인
kubectl ctx
masterseo0.link
# 콘텍스트 사용
kubectl ctx <각자 자신의 콘텍스트 이름>
4
# 설치
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
# 설치
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
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이름
8
삭제
kubectl delete deploy,svc deployment-2048
쿠버네티스 클러스터 생성은 다음과 같은 내용을 만든다.
네트워크 만들기
쿠버네티스 클러스터 생성
명령 서버 생성
명령서버에서 서비스 올리기
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
감사합니다.