cloudfoundry & diego

introduction

cloudfoundry 现已支持 diego,目前官方有两种部署方式

  • cf-deployment (较新)
  • cf-release (将被弃用,不过相对充分验证<包括 openstack>)

部署过程太复杂,翻开官网一看,我靠

撸起袖子开搞

环境描述

stemcell 和其他需要的 release 使用其推荐的兼容版本,如下:

name version url
cf release v280 https://bosh.io/d/github.com/cloudfoundry/cf-release?v=280
Diego release v1.30.0 https://bosh.io/d/github.com/cloudfoundry/diego-release?v=1.30.0
Garden-Runc release v1.9.6 https://bosh.io/d/github.com/cloudfoundry/garden-runc-release?v=1.9.6
cflinuxfs2 release v1.168.0 https://bosh.io/d/github.com/cloudfoundry/cflinuxfs2-release?v=1.168.0
etcd release v117 https://bosh.io/d/github.com/cloudfoundry-incubator/etcd-release?v=117
stemcell 3468.5 https://s3.amazonaws.com/bosh-core-stemcells/openstack/bosh-stemcell-3468.5-openstack-kvm-ubuntu-trusty-go_agent-raw.tgz

openstack 环境准备

不具体描述,参考 http://docs.cloudfoundry.org/deploying/cf-release/openstack/index.html, 主要步骤包括

  • 设置安全组
  • 设置 DNS(用于解析 cf app)
  • 确认设置 flavor

部署 bosh

bosh 是一种部署工具,cf 可以通过 bosh 来部署。通常 bosh 包括两部分

  • bosh director(这里是在 openstack 中的一个虚拟机,用来接受 bosh client 的命令,并操作集群,如 cf)
  • bosh client(任意可访问 openstack 的一个机器,安装 bosh cli 工具,后续的部署工作都是在该机器进行)

准备 openstack 环境

这里的准备工作不冲突之前的,这是为部署 bosh director 准备,不具体描述,参考 https://bosh.io/docs/init-openstack-v1.html

准备 bosh director 的配置文件

根据需求修改,如 openstack 环境认证、虚拟机的密码等,参考 https://gist.github.com/ly798/624c964dffcbd86d4f9fa01a7d5c4dba

部署

安装 bosh-init,参考 https://bosh.io/docs/install-bosh-init.html, 用来部署 bosh director

部署 bosh director

1
bosh-init deploy ./bosh.yml

安装 bosh-cli,参考 https://bosh.io/docs/bosh-cli.html, 用来操作 bosh director

登陆到 bosh director

1
bosh target 173.81.16.12 #该 ip 是在配置文件中配置的 director 的 floatingip
bosh vms #查询集群的 vm,现在为空

部署 cloud foundry

准备 cf 的配置文件

参考 http://docs.cloudfoundry.org/deploying/cf-release/openstack/cf-stub.html

cf 的配置文件(暂命令为 cf-deployment.yml)非常庞大,所以使用脚本工具来生成,不过也需要一个基本的 manifest stub 配置文件(咱命令为 cf-stub.yml)

首先获取 cf-release 代码仓库

1
git clone https://github.com/cloudfoundry/cf-release.git
git checkout v258
https://github.com/cloudfoundry/diego-release.git
git checkout v1.30.0

新建配置文件 cf-stub.yml,参考 https://gist.github.com/ly798/1a393a7450b54a6e78bf62ba6c00a249, 根据自己的环境配置,另外由于 bug 需要注意的地方

1
properties:
 etcd:
 require_ssl: false

关于上述配置文件中的 cert、key 需要使用仓库中 script 目录下脚本实现,可以参考 https://github.com/cloudfoundry/cf-release/blob/master/on-tls-certificates.md, 这些脚本有依赖,安装如下(ubuntu 为例):

1
git clone https://github.com/square/certstrap
cd certstrap
./build
sudo cp ./bin/certstrap-v1.1.1-linux-amd64 /usr/bin/certstrap
sudo apt install golang
mkdir ~/go
export GOPATH=~/go

关于上述配置文件中的 dns 配置暂时使用内部解析的 dns 服务器,可以使用 dnsmasq,将配置文件中的 domain 与 floatingip 进行解析

使用脚本工具生成 cf-deployment.yml

1
cd cf-release
./scripts/generate_deployment_manifest openstack ../cf-stub.yml ../diego-release/stubs-for-cf-release/enable_diego_ssh_in_cf.yml > ../cf-deployment.yml

生成的 cf-deployment.yml 还需要一些修改(由于 bug)

1
uaa:
 require_https: false

替换虚拟机镜像

1
sed -i 's/bosh-openstack-kvm-ubuntu-trusty-go_agent/bosh-openstack-kvm-ubuntu-trusty-go_agent-raw/g' ../cf-deployment.yml

部署

参考 http://docs.cloudfoundry.org/deploying/cf-release/common/deploy.html

上传 cf-release、stemcell

1
bosh upload release ~/cf-release-v280.zip
bosh upload stemcell ~/bosh-stemcell-3468.5-openstack-kvm-ubuntu-trusty-go_agent-raw.tgz

一切准备就绪,开始 装逼 安装

1
bosh deployment ../cf-deployment.yml
bosh deploy

验证

验证 cf 服务信息

1
curl api.INCORRECT-SYSTEM-DOMAIN/info # INCORRECT-SYSTEM-DOMAIN 死在 cf-stub.yml 中的配置

登陆 cf

1
cf login –skip-ssl-validation -a https:/INCORRECT-SYSTEM-DOMAIN -u admin
cf a

部署 diego

diego 在 openstack 上配置资料较少,翻遍官网和网络都 emmmm..

准备配置文件

参考 diego-release 代码仓库 aws 和 bosh-lite 的配置文件整理了一份,具体如下

1
cd diego-release
mkdir myop_config
cp manifest-generation/examples/openstack/iaas-settings.yml .
cp manifest-generation/bosh-lite-stubs/property-overrides.yml .
cp ./manifest-generation/bosh-lite-stubs/postgres/diego-sql.yml .
cp ./manifest-generation/bosh-lite-stubs/instance-count-overrides.yml .

需要根据自己环境配置这四个文件,需要注意

  • property-overrides.yml 中的 cert 等还是需要参考部署 cf 是使用的 cert 等
  • property-overrides.yml 中的 etcd.ssl 相关设置为 false(部署 cf 是也使用了 false)
  • iaas-settings.yml 中 stemcell 使用部署 cf 的即可(raw)
  • diego-sql 的信息取自 cf 配置文件

生成配置文件 diego-deployment.yml

1
cd diego-release
./scripts/generate-deployment-manifest -c ../../cf-deployment.yml \
 -i ./myop_config/iaas-settings.yml \
 -p ./myop_config/property-overrides.yml \
 -n ./myop_config/instance-count-overrides.yml \
 -s ./myop_config/diego-sql.yml -r > ./diego-deployment.yml

生成的 diego.yml 还需要进行修改(遗漏的 uaa.secret)

1
diego.ssh_proxy.uaa_secret: xxx #取自 cf 部署文件中的

部署

上传 releases

1
bosh upload release garden-runc-release-v1.10.0.zip
bosh upload release cflinuxfs2-release-v1.170.0.zip
bosh upload release diego-release-v1.30.0.zip
bosh upload release etcd-release-v117.zip

部署 diego

1
bosh deployment diego-deployment.yml
bosh -n deploy

验证

打开 docker flag

1
cf enable-feature-flag diego_docker

部署一个 docker

1
# cf push my-app –docker-image daocloud.io/library/nginx:latest
name requested state instances memory disk urls
my-app started 1/1 1G 1G my-app.test.cf-app.com

历时两天跳无数个坑,终于是成功了,我只能说

FAQ

reference