CF for K8s

Posted by Just Do It ! 행동하지 않으면 성공도 실패도 없다 on Friday, May 15, 2020

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