How to create and manage a K8sCluster (kubernetes cluster) #1614
sykim-etri
started this conversation in
Show and tell
Replies: 3 comments 3 replies
-
@sykim-etri |
Beta Was this translation helpful? Give feedback.
1 reply
-
https://k8slens.dev/ 등 잘 알려진 외부 오픈소스 솔루션에서, .AccessInfo.endpoint 값과 .AccessInfo.kubeconfig 값을 활용하여, 클러스터에 접속하는 방법도 공유되면 좋을 것 같습니다. |
Beta Was this translation helpful? Give feedback.
1 reply
-
|
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
How to create and manage a K8sCluster (kubernetes cluster)
0) 사전 준비 사항 등
지원 CSP 및 리전
(not yet released)
Recommended
드라이버이슈
CSP/리전별 지원 쿠버네티스 버전 확인
GET /availableK8sClusterVersion를 활용하여 대상 CSP(providerName)과 대상 리전(regionName)에서 지원하는 K8sClsuter 버전을 확인할 수 있다.
상기 요청에 대해 CB-TB는 assets/k8sclusterinfo.yaml에 저장된 해당 CSP(providerName)와 해당 리전(regionName)에서 지원하는 K8sCluster 버전을 조회하여 아래와 같이 응답한다.
사전 준비 사항 및 유의 사항
K8sCluster API를 통해 K8sCluster 생성을 위해서 다음과 같이 미리 준비해야 하는 자원 및 수동 작업이 일부 존재한다.
CB-TB내 사전 준비 자원
Namespace
VNet/Subnet
SecurityGroup
SSHKey
Image
Spec
Role 설정
CSP별 서비스 접근을 위한 Role 설정 등을 진행해야 하는 경우가 있다.
자세한 사항은 링크의
Role 추가 필요시 추가 가이드
에서 확인 가능함.인터넷 접근
K8sCluster에서 인터넷에 접근하여 도커 이미지를 다운로드 받거나 외부에서 K8sCluster API Server로의 접근을 위해서, 앞서 생성한 VNet가 인터넷 접근이 가능해야 한다. 이를 위해 수동 작업이 필요한 경우가 있다.
1) CB-TB의 K8sCluster 생성
POST /ns/{nsId}/k8scluster를 활용하여 해당 Namespace(nsId)에 K8sCluster를 생성할 수 있다.
CB-TB에서 제공하는 다른 API들과는 달리 (부분적) 비동기 방식으로 동작하기 때문에 생성 요청 이후 K8sCluster 상태 조회를 통해 생성 진행 현황 등을 확인할 수 있다.
K8sCluster 생성시 CSP에 따라 1개 이상의 노드그룹을 포함해야 하는 경우(Type-II)와 그렇지 않은 경우(Type-I)로 구분되며,
상세한 내용은 PMKS 드라이버 개발 노트에서 확인할 수 있다. 한편, K8sCluster가 생성된 이후 노드그룹을 추가하거나 삭제할 수 있다.
이에 따라 다음과 같이 2가지 형태로 K8sCluster 생성을 요청할 수 있다.
노드그룹 없이 클러스터 생성 요청 및 응답
클러스터 생성 요청은 다음과 같으며,
접속 정보(connectionName)과 K8sCluster 이름(id), availableK8sClusterVersion로 확인한 버전 ID(version), 사전 생성한 자원들의 ID들로 구성된다.
이에 대한 클러스터 생성 응답은 다음과 같다.
1개의 노드그룹을 포함하여 클러스터 생성 요청 및 응답
2) K8sCluster 상태 조회
GET /ns/{nsId}/k8scluster/{k8sClusterId}를 활용하여 해당 Namespace(nsId) 내 K8sCluster(k8sclusterId)의 상태를 조회할 수 있다.
상태 조회 요청
상태 조회 응답
3) K8sCluster 활용 (접속 방법)
사전 준비 사항
일부 CSP의 경우 인증을 위해 kubectl을 실행하는 장비에 별도 프로그램의 추가 설치가 필요하다.
AWS
GCP
Endpoint와 Kubeconfig 확인
K8sCluster에 접속하기 위해서는 Endpoint와 Kubeconfig가 필요한데, 다음과 같이 확인할 수 있다.
GET /ns/{nsId}/k8scluster/{k8sClusterId}를 통해
.CspViewK8sClusterDetail.Status
가Active
임을 확인한 후.CspViewK8sClusterDetail.AccessInfo.Endpoint
값과.CspViewK8sClusterDetail.AccessInfo.Kubeconfig
값을 활용하면 된다.이때 Kubeconfig 값에 개행문자(\n)가 문자열로 포함되어 있으므로, 이를 실제 개행 처리하도록 해야 정상적인 kubeconfig 포맷으로 인식하니 주의가 필요하다. (터미널에 따라 해당 내용을 복사할 때 공백 등의 문자가 포함되므로 확인 필요)
<notepad++ 사용시 변환 방법>
해당 내용 복사 후 바꾸기(Ctrl+H) 기능 활용하여 찾을 내용에
\\n
을 입력하고 바꿀 내용에\n
을 입력후모두 바꾸기
를 선택하여 손쉽게 해결OpenLens에서 접속하기
OpenLens를 활용하여 생성한 K8sCluster에 접속하는 방법을 설명한다.
OpenLens를 실행하고 좌측 상단의 메뉴 - File - Add Cluster 를 선택하고 앞서 확인한 Kubeconfig 내용을 복사하여 붙여넣고 하단의
Add cluters
버튼을 클릭한다. 상세 방법<OpenLens에서 클러스터 추가 메뉴 화면>
붙여넣은 Kubeconfig 내용이 포맷에 맞지 않으면
Add clusters
버튼이 활성화되지 않으므로, 개행문자(\n)나 공백이 있는지 확인이 필요합니다.<OpenLens에서 Kubeconfig 추가 화면>
Kubeconfig가 정상적으로 등록되면 좌측 위에서 두번째 아이콘인 Catalog - CATEGORIES - Clusters에 등록한 K8sCluster가 나타나며, 해당 K8sCluster를 선택하면 자동 접속하여 상태를 확인할 수 있다.
Cluster 화면에는 모니터링 정보가 출력되는데, 생성 초기에는 등록된 Metrics가 없으므로 단지
No issues found
정도만 확인할 수 있다. 이외 Nodes 화면과 Namespaces 화면 등을 확인할 수 있다.<Cluster 화면>
<Nodes 화면>
<Namespace 화면>
OpenLens에서 예제 응용 실행하기
OpenLens에서 제공하는 Terminal을 통해 응용을 배포할 수 있으며, 다음은 쿠버네티스의 시각화 및 모니터링 도구인 weavescope 앱을 배포하고 정상 동작을 확인하는 방법에 관한 예시이다.
OpenLens의 Terminal에서 아래 명령을 실행하면 weavescope 앱이 배포되고, LoadBalancer를 통해 해당 앱의 웹페이지에 접근할 수 있다.
<OpenLens의 Termian을 통해 weavescope 앱 배포>
LoadBalancer가 할당되기를 기다린 후 다음 명령으로 LoadBalancer의 주소를 확인한 후 웹 브라우저로 해당 주소에 접근할 수 있다.
<실행된 weavescope 앱의 LoadBalancer 주소 확인>
결과로 출력된 내용 중 LoadBalancer의 외부 접근 주소(EXTERNAL-IP)로 접근하면 정상적으로 실행되는 weavescope 앱을 확인할 수 있으며, weavescope 앱을 통해 실행 중인 K8sCluster의 상태도 간단히 확인해 볼 수 있다.
<실행된 weavescope 앱 접근>
4) K8sCluster 업그레이드
PUT /ns/{nsId}/k8scluster/{k8sClusterId}/upgrade를 통해 기존 K8sCluster의 버전을 업그레이드할 수 있다.
5) K8sCluster 삭제
DELETE /ns/{nsId}/k8scluster/{k8sClusterId}를 통해 더 이상 사용하지 않는 K8sCluster를 삭제할 수 있다.
요청
응답
6) K8sCluster 노드그룹 추가
POST /ns/{nsId}/k8scluster/{k8sClusterId}/k8snodegroup를 활용하여 해당 Namespace(nsId)에 K8sCluster를 생성할 수 있다.
노드그룹 추가 요청은 다음과 같으며,
노드그룹 이름(name), 노드 이미지 ID(imageId), 목표 노드 수(desiredNodeSize), 최소 노드 수(minNodeSize), 최대 노드 수(maxNodeSize), 오토스케일링 여부(onAutoScaling), 워커노드의 루트 디스크 종류와 크기(rootDiskType, rootDiskSize), 워커노드의 스펙(specId), 워커노드 접근 키(sshKeyId)로 구성된다.
8) K8sCluster 노드그룹 설정 변경
운영 중인 K8sCluster 노드그룹의 설정 내용 중 오토스케일링 여부와 오토스케일 크기를 설정하거나 변경할 수 있다.
오토스케일링 여부 설정
PUT /ns/{nsId}/k8scluster/{k8sClusterId}/k8snodegroup/{k8sNodeGroupName}/autoscalesize를 활용하여 해당 노드그룹의 오토스케일링 여부를 설정할 수 있다.
요청
관련 테스트 스크립트
오토스케일 크기 변경
PUT /ns/{nsId}/k8scluster/{k8sClusterId}/k8snodegroup/{k8sNodeGroupName}/autoscalesize를 활용하여 해당 노드그룹의 오토스케일링 크기를 변경할 수 있다.
요청
관련 테스트 스크립트
9) K8sCluster 노드그룹 삭제
DELETE /ns/{nsId}/k8scluster/{k8sClusterId}/k8snodegroup/{k8sNodeGroupName}를 활용하여 해당 노드그룹을 삭제할 수 있다.
요청
관련 테스트 스크립트
Beta Was this translation helpful? Give feedback.
All reactions