Cloudfoundry 는 컨테이너 기반의 애플리케이션을 위한 플랫폼으로 PaaS 시장을 선도하고 있다. Heroku와 더불어 PaaS의 양대 산맥이라 할 수 있을 것이다. Cloudfoundry 는 자체 개발한 Garden이라고 하는 컨테이너 오케스트레이션 툴을 사용하였다. Kubernetes 가 등장하고 나서, 이 컨테이너 오케스트레이션 툴을 Kuberentes 으로 대체하는 프로젝트가 등장하였고, 마침내 cf-for-k8s 가 나왔다. 기존에 애플리케이션을 개발하여 손쉽게 배포하여 테스트하고 운영 하던 경험을 그대로 쿠버네티스에서도 경험할 수 있다.
CloudFoundry for Kubernetes
https://tanzu.vmware.com/developer/guides/kubernetes/cf4k8s-gs/
그 동안 BOSH / Deigo 기반의 Cloudfoundry (이하 CF) 를 Kubernetes 기반으로 사용할 수 있다. 어떠한 Kubernetes 클러스터 에서도 동작한다. 하지만, Tanzu Application Serivce와 기능상의 차이는 존재한다.
OSS에서는 순수한 API부분과 Runtime 부분만 제공한다.
설치 환경
cf4k8s 를 설치하기 위해서는 쿠버네티스 클러스터가 필요하다. EKS, AKS, GKE, DIY Kubernetes, TKG, PKS 등 CNCF표준을 준수하는 어떠한 Kubernetes 라도 상관없이 CF를 설치할 수 있다.
Toosls
- kubectl
- kinD (Kubernetes in Docker)
- Cloud Foundry CLI (v6.5+)
- BOSH CLI
- kapp (v0.21.0+)
- ytt (v0.26.0+)
Kubernetes Cluster Requirements
- Kubernetes version : 1.15x - 1.18.x
- 최소 5 nodes
- 최소 4 CPU, 15GB Memory / node
- LoadBalancer service 지원
- Metrics-server
- default StorageClass
설치
Step1 : cf-for-k8s 가져오기
git clone https://github.com/cloudfoundry/cf-for-k8s.git && cd cf-for-k8s
Step2 : KinD로 쿠버네티스 클러스터 생성
- KinD 클러스터 생성
- KinD 클러스터 정보
Step3 : CF for k8s 배포를 위한 yaml 생성
- 설치에 필요한 인증서와 패스워드 정보를 생성한다.
# cf 설치를 위한 속성값 생성
./hack/generate-values.sh -d jupil.cf > ./cf-install-values.yml
# 어플리케이션의 컨테이너 이미지를 저장하기 위한 레지스트리
cat >> cf-install-values.yml << EOL
app_registry:
hostname: https://index.docker.io/v1/
repository: "namoo4u"
username: "namoo4u"
password: "<dockerhub-password>"
EOL
jupil.cf 는 CF 에서 사용할 도메인이름으로 *.apps.jupil.cf / *.sys.jupil.cf 와 같이 어플리케이션에 접근한다.
Step4 : Metrics-server 설치
- k8s 클러스터에 metrics-server 를 설치한다
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml
Step4.2 : Default Storage Class 설정
kubectl apply -f -<<-EOF
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: fast
namespace: kube-system
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: csi.vsphere.vmware.com
allowVolumeExpansion: true
parameters:
# DatastoreURL: "ds:///vmfs/volumes/vsan:52cdfa80721ff516-ea1e993113acfc77/" # Optional Parameter
# StoragePolicyName: "vSAN Default Storage Policy" # Optional Parameter
DatastoreURL: ds:///vmfs/volumes/5ed6580b-a1527157-93e9-000e1e5759b0/
EOF
Step5 : cf-for-k8s 설치
- 로컬 환경에 설치할 경우, remove-resource-requirements 와 remove-resource-ingressgateway-service 를 추가한다. 실제 외부 K8s 클러스터에 설치할때는 리소스 설정과 Istio Ingressgateway 를 설치하는 것이 좋다.
kapp deploy -a cf -f <(ytt -f config -f ./cf-install-values.yml -f ./config-optional/remove-resource-requirements.yml -f ./config-optional/remove-ingressgateway-service.yml)
- 서버 환경에서는
Step4 : DNS 설정
kapp deploy -a cf -f <(ytt -f config -f ./cf-install-values.yml)
Step6 : DNS 설정
- -d 로 설정한 도메인에 대해서 *. 를 설정한다.
Minibroker for Open Serivce Broker
Minibroker : Open Service Broker API implementation
minibroker 설치
helm repo add minibroker https://minibroker.blob.core.windows.net/charts
helm repo update
helm install minibroker -n minibroker minibroker/minibroker --set deployServiceCatalog=false --set defaultNamespace=minibroker
CF service
cf create-service-broker minibroker user pass http://minibroker-minibroker.minibroker.svc.cluster.local
cf service-brokers
cf service-access
cf enable-service-access redis
cf enable-service-access mongodb
cf enable-service-access mariadb
cf marketplace
cf create-service redis 5-0-7 redis-svc
참고 URL : https://www.youtube.com/watch?v=B-h2yggVk8w&feature=youtu.be