23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
이 글은 EKS와 같은 퍼블릭 클라우드에서 제공되는 매니지드 쿠버네티스가 아닌
EC2 인스턴스 위에 직접 쿠버네티스 클러스터를 구축하고 이를 AWS 인프라와 연동하는 내용을 다루고 있습니다.
seungkyua님이 쓰신 글 에서 Legacy Cloud Provider를 사용하여 AWS Loadbalancer 서비스를 사용하는 방법에 대해 소개를 하신 적이 있습니다.
해당 글에서 언급된 것처럼 퍼블릭/프라이빗 클라우드 인프라와 연동하기 위한 Cloud Provider들이 Kubernetes 에 내장되었다가
현재는 독립적인 형태로 제공되고 사용되고 있습니다.
AWS in-tree Cloud Provider는 v1.27 버전에서 삭제 되었고 이후 버전부터는 External Cloud Provider인 cloud-provider-aws 를 사용해야 합니다.
아래의 순서로 작업을 수행하도록 합니다.
IAM Policy, Role 생성 / VPC 등 인프라 준비 / EC2 인스턴스에 할당
클러스터 생성
Cloud Provider 배포 (RBAC, Controller mananger POD)
추가로 Cluster API를 사용하여 쿠버네티스 클러스터를 구축할 때 Cloud Provider, CSI 등과 같이 클러스터와 같이
배포/구성되어야 할 자원들을 자동 적용해주는 ClusterResourceSet을 사용하는 방법을 소개하겠습니다.
seungkyua님이 쓰신 글에서 소개한 내용과 동일합니다. 당연히 기존 in-tree에서 external로 변화한 것이기 때문이죠.
seungkyua님이 쓰신 글 에서와 차이점이라면 api 서버, controller-manager, kubelet 에 사용하는 클라우드 프로바이더 옵션이 --cloud-provider=external 로 변경해야 한다는 것입니다.
kubeadm으로 클러스터를 구축하는 경우 아래와 같이 설정 파일을 구성하여 kubeadm init or join 명령어를 --config <YOUR CONFIG YAML> 옵션과 같이 실행하면 됩니다.
참고: https://kubernetes.io/docs/reference/config-api/kubeadm-config.v1beta3/
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
# ...생략...
apiServer:
extraArgs:
cloud-provider: external
controllerManager:
extraArgs:
cloud-provider: external
# ...생략...
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
# ...생략...
nodeRegistration:
kubeletExtraArgs:
cloud-provider: external
# ...생략...
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: JoinConfiguration
# ...생략...
nodeRegistration:
kubeletExtraArgs:
cloud-provider: external
# ...생략...cloud-provider-aws 배포는 Helm Chart 를 사용하거나 kustomize를 이용한 명령어
kubectl apply -k 'github.com/kubernetes/cloud-provider-aws/examples/existing-cluster/base/?ref=master'
를 사용해서 설치할 수 있습니다.
cloud-provider-aws 컨트롤러 매니저의 버전은 대상 클러스터의 semantic 버전과 동일하게 사용하시면 됩니다.
기본 차트 및 YAML은 v1.27.1 버전 사용이 기본 값이므로 구축된 클러스터의 버전에 맞추어 변경해주어야 합니다.
현재 수행 중인 과제에서는 Cluster API를 사용하여 쿠버네티스 클러스터를 구축합니다.
Cluster API를 사용해 AWS에서 쿠버네티스 클러스터를 배포하는 것에 대한 내용은 아래의 seungkyua님이 쓰신 글을 참고하시고
이번 글에서는 Cloud Provider와 같이 클러스터를 구축하고 매번 같이 설치/배포가 필요한 자원들을
Cluster API에서 자동으로 적용해 주는 ClusterResourceSet에 대해 간단히 소개하고 사용 방법에 대해 알아보도록 하겠습니다.
apiVersion: addons.cluster.x-k8s.io/v1beta1
kind: ClusterResourceSet
metadata:
name: crs-ccm
spec:
clusterSelector:
matchLabels:
ccm: external
resources:
- kind: ConfigMap
name: cloud-controller-manager-addon
strategy: ApplyOnce위의 예제에서는 Cluster API로 배포되는 Cluster 자원이 ccm: external이라는 레이블을 가지고 있다면
해당 클러스터를 생성한 후에 cloud-controller-manager-addon Configmap 내용을 한번 만 (ApplyOnce) 적용합니다.
따라서, 클러스터 구축과 Cloud Provider, CSI 등의 설치가 동시에 이루어지기 때문에 절차를 단순화 할 수 있습니다.
strategy항목의 값을 Reconcile을 사용한다면 resources로 참조하고 있는 Configmap, Secret의 내용이 변경되었을 때 자동으로 재 반영합니다.
아래가 위 ClusterResourceSet이 적용될 클러스터의 예시입니다.
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
labels:
ccm: external
name: cluster-using-external-cloud-provider
spec:
...생략...
---
apiVersion: v1
kind: ConfigMap
metadata:
annotations:
note: generated
labels:
type: generated
name: cloud-controller-manager-addon
data:
aws-ccm-external.yaml: |
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: aws-cloud-controller-manager
...생략...
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.