【Deis文档】使用Deis之使用 Dockerfiles

DockOne 发表了文章 • 0 个评论 • 2820 次浏览 • 2014-12-02 21:52 • 来自相关话题

注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。 Deis 支持通过 Dockerfiles 部署应用程序。一个 [Dockerfile][1] 能自动化制作一个 [Docker 镜像][2]的步骤。Dockerfil ...查看全部
注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。

Deis 支持通过 Dockerfiles 部署应用程序。一个 [Dockerfile][1] 能自动化制作一个 [Docker 镜像][2]的步骤。Dockerfiles 是难以置信的强大,但是要求一些额外的工作来定义你需要的应用程序运行环境。
预先准备应用程序
如果你没有一个已经存在的应用程序,你可以 clone 一个示例应用程序来证明 Dockerfile 工作流。
```
$ git clone https://github.com/deis/helloworld.git
$ cd helloworld
```
# Dockerfile 要求
为了部署 Dockerfile 应用程序,它们必须是的以下的需求一致:
    []Dockerfile 必须暴露(EXPOSE)仅仅一个端口[/][]暴露的端口必须是一个 HTTP 服务,可以连接到一个 HTTP router[/][]必须为正在运行的容器规定一个默认的 CMD[/]
[quote] 注意Dockerfiles 暴露超过一个端口将在 issue 1156 讨论(hit)。 创建一个应用程序使用 `deis create ` 在 [Controller][3] 创建一个应用程序。```$ deis createCreating application... done, created folksy-offshootGit remote deis added``` 使用 push 部署使用 `git push deis master` 部署你的应用程序。
$ git push deis masterCounting objects: 13, done.Delta compression using up to 8 threads.Compressing objects: 100% (13/13), done.Writing objects: 100% (13/13), 1.99 KiB | 0 bytes/s, done.Total 13 (delta 2), reused 0 (delta 0)-----> Building Docker imageUploading context 4.096 kBUploading contextStep 0 : FROM deis/base:latest ---> 60024338bc63Step 1 : MAINTAINER OpDemand  ---> Using cache ---> 2af5ad7f28d6Step 2 : RUN wget -O /tmp/go1.2.1.linux-amd64.tar.gz -q https://go.googlecode.com/files/go1.2.1.linux-amd64.tar.gz ---> Using cache ---> cf9ef8c5caa7Step 3 : RUN tar -C /usr/local -xzf /tmp/go1.2.1.linux-amd64.tar.gz ---> Using cache ---> 515b1faf3bd8Step 4 : RUN mkdir -p /go ---> Using cache ---> ebf4927a00e9Step 5 : ENV GOPATH /go ---> Using cache ---> c6a276eded37Step 6 : ENV PATH /usr/local/go/bin:/go/bin:$PATH ---> Using cache ---> 2ba6f6c9f108Step 7 : ADD . /go/src/github.com/deis/helloworld ---> 94ab7f4b977bRemoving intermediate container 171b7d9fdb34Step 8 : RUN cd /go/src/github.com/deis/helloworld && go install -v . ---> Running in 0c8fbb2d2812github.com/deis/helloworld ---> 13b5af931393Removing intermediate container 0c8fbb2d2812Step 9 : ENV PORT 80 ---> Running in 9b07da36a272 ---> 2dce83167874Removing intermediate container 9b07da36a272Step 10 : CMD ["/go/bin/helloworld"] ---> Running in f7b215199940 ---> b1e55ce5195aRemoving intermediate container f7b215199940Step 11 : EXPOSE 80 ---> Running in 7eb8ec45dcb0 ---> ea1a8cc93ca3Removing intermediate container 7eb8ec45dcb0Successfully built ea1a8cc93ca3-----> Pushing image to private registry[/quote]       Launching... done, v2-----> folksy-offshoot deployed to Deis       http://folksy-offshoot.local.deisapp.com       To learn more, use `deis help` or visit http://deis.ioTo ssh://git@local.deisapp.com:2222/folksy-offshoot.git * [new branch]      master -> master$ curl -s http://folksy-offshoot.local.deisapp.comWelcome to Deis!See the documentation at http://docs.deis.io/ for more information.
因为一个 Dockerfile 应用程序被检测到,在第一次部署的时,`cmd` 进程类型被自动扩展成 1。 定义进程类型Docker 容器有默认的命令,通常由 [CMD 指令][4]规定。Deis 使用 `cmd` 进程类型引用这个默认命令。Deis 也支持扩展其他的进程类型(process types)定义在一个 [Procfile][5]。为了使用这个功能,你必须:[list=1][]使用你的 repository root 目录的 Procfile 定义进程类型(process types)[/][]包含一个 start 可执行程序,可以使用 `start ` 调用[/]



[1]: https://docs.docker.com/reference/builder/
[2]: https://docs.docker.com/introduction/understanding-docker/
[3]: http://docs.deis.io/en/latest/reference/terms/controller/#controller
[4]: https://docs.docker.com/reference/builder/#cmd
[5]: https://devcenter.heroku.com/articles/procfile

【Deis文档】使用Deis之使用 Buildpacks

DockOne 发表了文章 • 0 个评论 • 3777 次浏览 • 2014-12-02 21:49 • 来自相关话题

注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。 Deis 支持通过 [Heroku Buildpacks][1] 部署应用程序。如果你对 遵循 Heroku 构建应用程序的最佳实践有兴趣或是你正在部署一个已经运行在 ...查看全部
注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。

Deis 支持通过 [Heroku Buildpacks][1] 部署应用程序。如果你对 遵循 Heroku 构建应用程序的最佳实践有兴趣或是你正在部署一个已经运行在 Heroku 上的应用程序,那么 Buildpacks 是非常有用的。
预先准备应用程序
如果你没有一个已经存在的应用程序,你可以 clone 一个示例应用程序,证明 Heroku Buildpack 工作流。
```
$ git clone https://github.com/deis/example-ruby-sinatra.git
$ cd example-ruby-sinatra
```
创建一个应用程序
使用 `deis create` 在 [Controller][2] 创建一个应用程序。
```
$ deis create
Creating application... done, created unisex-huntress
Git remote deis added
```
使用 push 来部署
使用 `git push deis master` 来部署你的应用程序:
$ git push deis master
Counting objects: 95, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (52/52), done.
Writing objects: 100% (95/95), 20.24 KiB | 0 bytes/s, done.
Total 95 (delta 41), reused 85 (delta 37)
-----> Ruby app detected
-----> Compiling Ruby/Rack
-----> Using Ruby version: ruby-1.9.3
-----> Installing dependencies using 1.5.2
Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
Fetching gem metadata from http://rubygems.org/..........
Fetching additional metadata from http://rubygems.org/..
Using bundler (1.5.2)
Installing tilt (1.3.6)
Installing rack (1.5.2)
Installing rack-protection (1.5.0)
Installing sinatra (1.4.2)
Your bundle is complete!
Gems in the groups development and test were not installed.
It was installed into ./vendor/bundle
Bundle completed (8.81s)
Cleaning up the bundler cache.
-----> Discovering process types
Procfile declares types -> web
Default process types for Ruby -> rake, console, web
-----> Compiled slug size is 12M
-----> Building Docker image
Uploading context 11.81 MB
Uploading context
Step 0 : FROM deis/slugrunner
---> 5567a808891d
Step 1 : RUN mkdir -p /app
---> Running in a4f8e66a79c1
---> 5c07e1778b9e
Removing intermediate container a4f8e66a79c1
Step 2 : ADD slug.tgz /app
---> 52d48b1692e5
Removing intermediate container e9dfce920e26
Step 3 : ENTRYPOINT ["/runner/init"]
---> Running in 7a8416bce1f2
---> 4a18f93f1779
Removing intermediate container 7a8416bce1f2
Successfully built 4a18f93f1779
-----> Pushing image to private registry

Launching... done, v2

-----> unisex-huntress deployed to Deis
http://unisex-huntress.local.deisapp.com

To learn more, use `deis help` or visit http://deis.io

To ssh://git@local.deisapp.com:2222/unisex-huntress.git
* [new branch] master -> master

$ curl -s http://unisex-huntress.local.deisapp.com
Powered by Deis!

因为一个 Heroku 风格的应用程序被检测到了,web 进程类型第一次部署自动被扩展到 1。
已经包含的 Buildpacks
为了方便起见,许多 buildpacks 与 Deis 捆绑在一起:
- [Ruby Buildpack][3]
- [Nodejs Buildpack][4]
- [Java Buildpack][5]
- [Gradle Buildpack][6]
- [Grails Buildpack][7]
- [Play Buildpack][8]
- [Python Buildpack][9]
- [PHP Buildpack][10]
- [Clojure Buildpack][11]
- [Scala Buildpack][12]
- [Go Buildpack][13]
- [Multi Buildpack][14]
Deis 将重复循环每个 buildpack 的 `bin/detect` 脚本来匹配你正在发布的代码。
使用定制的 Buildpack
为了使用一个定制的 buildpack,设置 ` BUILDPACK_URL` 环境变量。
```
$ deis config:set BUILDPACK_URL=https://github.com/dpiddy/heroku-buildpack-ruby-minimal
Creating config... done, v2
=== humble-autoharp
BUILDPACK_URL: https://github.com/dpiddy/heroku-buildpack-ruby-minimal
```
在你下一步的 `git push`,定制的 buildpack 将被使用。



[1]: https://devcenter.heroku.com/articles/buildpacks
[2]: http://docs.deis.io/en/latest/reference/terms/controller/#controller
[3]: https://github.com/heroku/heroku-buildpack-ruby
[4]: https://github.com/heroku/heroku-buildpack-nodejs
[5]: https://github.com/heroku/heroku-buildpack-java
[6]: https://github.com/heroku/heroku-buildpack-gradle
[7]: https://github.com/heroku/heroku-buildpack-grails
[8]: https://github.com/heroku/heroku-buildpack-play
[9]: https://github.com/heroku/heroku-buildpack-python
[10]: https://github.com/deis/heroku-buildpack-php
[11]: https://github.com/heroku/heroku-buildpack-clojure
[12]: https://github.com/heroku/heroku-buildpack-scala
[13]: https://github.com/kr/heroku-buildpack-go
[14]: https://github.com/heroku/heroku-buildpack-multi

【Deis文档】使用Deis之部署应用程序

DockOne 发表了文章 • 0 个评论 • 3500 次浏览 • 2014-12-02 21:43 • 来自相关话题

注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。 使用 `git push` 或者是 deis 客户端 部署应用程序到 Deis。 支持的应用程序 Deis 可以部署任何能运行在 Docker ...查看全部
注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。

使用 `git push` 或者是 deis 客户端 部署应用程序到 Deis。
支持的应用程序
Deis 可以部署任何能运行在 Docker 容器中应用程序或服务。为了可以水平的扩展,应用程序必须遵循 Heroku 的[十二要素方法学][1](twelve-factor methodology)并在外部的后台服务存储状态。
例如,如果你的应用程序状态持久化在本地文件系统 -- 通用的内容管理系统像 Wordpress 和 Drupal -- 它不可能使用 `deis` 水平扩展。
幸运地是,大部分现代应用程序的特性是无状态的,可以在 Deis 中水平的扩展。
登录 Controller
在部署一个应用程序前,用户首先必须对 `Deis Controller` 做身份校验。
```
$ deis login http://deis.example.com
username: deis
password:
Logged in as deis
```

注意:对于 Vagrant 集群:deis login http://deis.local3.deisapp.com



选择一个构建方法
Deis 支持三种不同的方式构建应用程序:
1. Heroku Buildpacks
2. Dockerfiles
3. Docker Images
# Buildpacks
如果你想遵循关于 Heroku 部署程序的最佳实践或者你想从 Heroku 移植一个应用程序,Heroku buildpacks 是非常有用的。
学习在 Deis 上怎样[使用 Buildpacks][2] 部署应用程序。
# Dockerfiles
Dockerfiles 是一种强大的用来定义一个基于你选择的 OS 的便携式执行环境的方式。
学习在 Deis 上怎样[使用 Dockerfiles][3] 部署应用程序。
# Docker 镜像
部署一个 Docker 镜像到 Deis 上,允许你不论是从公有或是私有的 registry 获取一个 Docker 镜像并复制它。确保你在开发环境或是你的 CI pipeline 运行着相同的镜像,如同你是在生产环境一样。
学习在 Deis 上怎样[使用 Docker 镜像][4]部署应用程序


[1]: http://12factor.net/
[2]: http://docs.deis.io/en/latest/using_deis/using-buildpacks/#using-buildpacks
[3]: http://docs.deis.io/en/latest/using_deis/using-dockerfiles/#using-dockerfiles
[4]: http://docs.deis.io/en/latest/using_deis/using-docker-images/#using-docker-images

【Deis文档】使用Deis之注册用户

DockOne 发表了文章 • 0 个评论 • 2726 次浏览 • 2014-12-02 21:36 • 来自相关话题

注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。 为了使用 Deis,你必须首先在 [Controller][1] 上注册一个用户。 注册一个 Controller 使用 `deis regi ...查看全部
注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。

为了使用 Deis,你必须首先在 [Controller][1] 上注册一个用户。
注册一个 Controller
使用 `deis register` 和 [Controller][2] URL(你的 Deis administrator 支持的) 来创建一个新账号。你将自动登录。
你使用的域应该与你使用 `deisctl config platform` 中设置的 `domain=` 相匹配。注意你需要一直使用 `deis.` 来与你的 controller 通信。
```
$ deis register http://deis.example.com
username: myuser
password:
password (confirm):
email: myuser@example.com
Registered myuser
Logged in as myuser
```

注意
对于 Vagrant 集群: deis register http://deis.local3.deisapp.com
----
[quote] 重要
注册到 Deis 的第一个用户拥有“superuser”权限
上传你的 SSH 公钥
如果你计划使用 `git push` 来部署你的应用程序到 Deis,你必须提供的 SSH 公钥。使用 `deis keys:add` 命令来上传你默认的 SSH 公钥,通常是其中之一:

    []~/.ssh/id_rsa.pub[/][]~/.ssh/id_dsa.pub[/]
```
$ deis keys:add
Found the following SSH public keys:
1) id_rsa.pub
Which would you like to use with Deis? 1
Uploading /Users/myuser/.ssh/id_rsa.pub to Deis... done
```
从 Controller 退出
使用 `deis logout` 从一个已经存在的 controller 会话退出。
```
$ deis logout
Logged out as deis
```
登录 Controller
如果你已经有一个账号,使用 ` deis login` 来校验身份登录 Deis [Controller][3]。
```
$ deis login http://deis.example.com
username: deis
password:
Logged in as deis
```
> 注意
对于 Vagrant 集群:deis login http://deis.local3.deisapp.com
---
> 重要
Deis 会话(session)信息是存储在你的用户的 `~/.deis` 目录。

[/quote]



[1]: http://docs.deis.io/en/latest/reference/terms/controller/#controller
[2]: http://docs.deis.io/en/latest/reference/terms/controller/#controller
[3]: http://docs.deis.io/en/latest/reference/terms/controller/#controller

【Deis文档】使用Deis之安装客户端

DockOne 发表了文章 • 0 个评论 • 3006 次浏览 • 2014-12-02 21:33 • 来自相关话题

注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。 Deis 命令行接口(CLI),或者客户端,允许你与 Deis [Controller][1] 交互。你必须通过安装客户端来使用 Deis。 安装 Dei ...查看全部
注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。

Deis 命令行接口(CLI),或者客户端,允许你与 Deis [Controller][1] 交互。你必须通过安装客户端来使用 Deis。
安装 Deis 客户端
在 Linux 或 Mac OS X 上安装最新版的 `Deis` 客户端:
```
$ curl -sSL http://deis.io/deis-cli/install.sh | sh
```
安装程序把 `Deis` 放在你的当前目录,但是你应该把它移到你的 `$PATH`。
代理支持
设置 `http_proxy or https_proxy` 环境变量开启代理支持:
```
$ export http_proxy="http://proxyip:port"
$ export https_proxy="http://proxyip:port"
```
综合帮助
Deis 客户端为每个命令自带综合的文档,使用 `deis help` 帮助你查看可用的命令:
$ deis help
The Deis command-line client issues API calls to a Deis controller.
Usage: deis [...]
Auth commands::
register register a new user with a controller
login login to a controller
logout logout from the current controller
Subcommands, use ``deis help [subcommand]`` to learn more::
...

为了获取子命令的帮助信息,使用 `deis help [subcommand]`:
$ deis help apps
Valid commands for apps:

apps:create create a new application
apps:list list accessible applications
apps:info view info about an application
apps:open open the application in a browser
apps:logs view aggregated application logs
apps:run run a command in an ephemeral app container
apps:destroy destroy an application
Use `deis help [command]` to learn more




[1]: http://docs.deis.io/en/latest/reference/terms/controller/#controller

【Deis文档】管理Deis之添加和删除主机

DockOne 发表了文章 • 0 个评论 • 3660 次浏览 • 2014-11-26 21:48 • 来自相关话题

注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。 大多数的组件都能很好的处理新机器加入的情况。然而当机器从集群中被移除的时候需要我们留意,因为deis的存储(store)组件充当着后端存储的作用,Deis所有有状态性的 ...查看全部
注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。

大多数的组件都能很好的处理新机器加入的情况。然而当机器从集群中被移除的时候需要我们留意,因为deis的存储(store)组件充当着后端存储的作用,Deis所有有状态性的数据都存在其中,这些数据是Deis正常运行的保障。
请留意这些说明遵循Ceph文档中的删除监控(removing monitors)和删除OSD(removing OSDs)的部分。假如这些说明与Ceph的文档有明显的出入,应该优先以Ceph的文档为准,并且我们十分感激你能给我们提交一个更新文档的pull request。
因为Ceph使用的时Paxos算法,在集群中有足够多的监控器(monitors)以达到大多数(majority)的状态至关重要。可以是1:1,2:3, 3:4, 4:6等等。推荐尽可能在删除一个老的节点之前,先把新的节点添加进集群。
本文档将会假定一个三节点集群的情况。我们将会添加第四个节点到集群中,然后删除第一个节点。
检测健康状态
----------
在我们开始之前,我们应该检查Ceph集群的状态,保证其状态是正常的。我们可以登录到集群中的任意机器上,进入一个存储(store)容器,然后查询Ceph的状态:
```shell
core@deis-1 ~ $ nse deis-store-monitor
root@deis-1:/# ceph -s
cluster 20038e38-4108-4e79-95d4-291d0eef2949
health HEALTH_OK
monmap e3: 3 mons at {deis-1=172.17.8.100:6789/0,deis-2=172.17.8.101:6789/0,deis-3=172.17.8.102:6789/0}, election epoch 16, quorum 0,1,2 deis-1,deis-2,deis-3
mdsmap e10: 1/1/1 up {0=deis-2=up:active}, 2 up:standby
osdmap e36: 3 osds: 3 up, 3 in
pgmap v2096: 1344 pgs, 12 pools, 369 MB data, 448 objects
24198 MB used, 23659 MB / 49206 MB avail
1344 active+clean
```
从pgmap那一部分可以看到我们有1344个安置组(placement groups),并且全部都处于active(激活)+clean(干净)的状态。好极了!
添加一个节点
-----------
要添加一个节点到Deis集群,只需要配置一个新的CoreOS机器,在cloud-config文件中制定同样的etcd探索路径。你可以运行`fleetctl list-machines`来进行确认。
因为存储(store)组件是全局的单元(unit),他们会自动的在新的节点上启动。
一旦新的机器开始运行,我们可以再次检测Ceph集群的健康状态:
```bash
root@deis-1:/# ceph -s
cluster 20038e38-4108-4e79-95d4-291d0eef2949
health HEALTH_WARN 4 pgs recovering; 7 pgs recovery_wait; 31 pgs stuck unclean; recovery 325/1353 objects degraded (24.021%); clock skew detected on mon.deis-4
monmap e4: 4 mons at {deis-1=172.17.8.100:6789/0,deis-2=172.17.8.101:6789/0,deis-3=172.17.8.102:6789/0,deis-4=172.17.8.103:6789/0}, election epoch 20, quorum 0,1,2,3 deis-1,deis-2,deis-3,deis-4
mdsmap e11: 1/1/1 up {0=deis-2=up:active}, 3 up:standby
osdmap e40: 4 osds: 4 up, 4 in
pgmap v2172: 1344 pgs, 12 pools, 370 MB data, 451 objects
29751 MB used, 34319 MB / 65608 MB avail
325/1353 objects degraded (24.021%)
88 active
7 active+recovery_wait
1245 active+clean
4 active+recovering
recovery io 2302 kB/s, 2 objects/s
client io 204 B/s wr, 0 op/s
```
留意我们处在`HEALTH_WARN`的状态,并且我们有安置组正在修复。Ceph正在向新节点拷贝数据。在它完成之前我们可以一直查询其状态。然后,我们会看到如下状态:
```bash
root@deis-1:/# ceph -s
cluster 20038e38-4108-4e79-95d4-291d0eef2949
health HEALTH_OK
monmap e4: 4 mons at {deis-1=172.17.8.100:6789/0,deis-2=172.17.8.101:6789/0,deis-3=172.17.8.102:6789/0,deis-4=172.17.8.103:6789/0}, election epoch 20, quorum 0,1,2,3 deis-1,deis-2,deis-3,deis-4
mdsmap e11: 1/1/1 up {0=deis-2=up:active}, 3 up:standby
osdmap e40: 4 osds: 4 up, 4 in
pgmap v2216: 1344 pgs, 12 pools, 372 MB data, 453 objects
29749 MB used, 34324 MB / 65608 MB avail
1344 active+clean
client io 409 B/s wr, 0 op/s
```
状态又恢复成了`HEALTH_OK`,并且注意以下的部分:
```bash
monmap e4: 4 mons at {deis-1=172.17.8.100:6789/0,deis-2=172.17.8.101:6789/0,deis-3=172.17.8.102:6789/0,deis-4=172.17.8.103:6789/0}, election epoch 20, quorum 0,1,2,3 deis-1,deis-2,deis-3,deis-4
mdsmap e11: 1/1/1 up {0=deis-2=up:active}, 3 up:standby
osdmap e40: 4 osds: 4 up, 4 in
```
我们有四个监控器,OSD,和元数据服务器!Hooray!
注意:
如果你用了自定义的防火墙脚本,你应该再次运行这个脚本,并且重启你的节点以让iptables删除重复的条目。
删除一个节点
----------
当从一个运行着deis存储组件的集群中删除一个节点的时候,你应该告诉Ceph这个主机上的存储服务即将从集群中移除。在这个例子中,我们将会把第一个节点deis-1移除。该主机的IP地址为172.17.8.100。
# 删除一个OSD
在我们通知Ceph去移除一个OSD之前,我们需要得到OSD的ID。我们可以通过从etcd中得到:
```bash
core@deis-2 ~ $ etcdctl get /deis/store/osds/172.17.8.100
2
```
注意:在一些情形下,我们可能不知道主机的IP地址或者主机名,如果这样我们可以使用`ceph osd tree`来查看当前集群的状况。这会列出集群中所有的OSD,并且报告出哪些主机已经离线。
现在我们有了OSD的ID,让我们开始移除的工作吧。我们需要处在集群中的一个存储容器的终端(除开我们正要移除的这个主机)。在这个例子中,我将使用`deis-2`主机。
```bash
core@deis-2 ~ $ nse deis-store-monitor
root@deis-2:/# ceph osd out 2
marked out osd.2.
```
这会让Ceph开始把安置组从哪个OSD移动到另外一个主机上。我们可以使用`ceph -w`查看这个过程:
```shell
root@deis-2:/# ceph -w
cluster 20038e38-4108-4e79-95d4-291d0eef2949
health HEALTH_WARN 4 pgs recovery_wait; 151 pgs stuck unclean; recovery 654/1365 objects degraded (47.912%); clock skew detected on mon.deis-4
monmap e4: 4 mons at {deis-1=172.17.8.100:6789/0,deis-2=172.17.8.101:6789/0,deis-3=172.17.8.102:6789/0,deis-4=172.17.8.103:6789/0}, election epoch 20, quorum 0,1,2,3 deis-1,deis-2,deis-3,deis-4
mdsmap e11: 1/1/1 up {0=deis-2=up:active}, 3 up:standby
osdmap e42: 4 osds: 4 up, 3 in
pgmap v2259: 1344 pgs, 12 pools, 373 MB data, 455 objects
23295 MB used, 24762 MB / 49206 MB avail
654/1365 objects degraded (47.912%)
151 active
4 active+recovery_wait
1189 active+clean
recovery io 1417 kB/s, 1 objects/s
client io 113 B/s wr, 0 op/s
```
```
2014-11-04 06:45:07.940731 mon.0 [INF] pgmap v2260: 1344 pgs: 142 active, 3 active+recovery_wait, 1199 active+clean; 373 MB data, 23301 MB used, 24757 MB / 49206 MB avail; 619/1365 objects degraded (45.348%); 1724 kB/s, 0 keys/s, 1 objects/s recovering
2014-11-04 06:45:17.948788 mon.0 [INF] pgmap v2261: 1344 pgs: 141 active, 4 active+recovery_wait, 1199 active+clean; 373 MB data, 23301 MB used, 24757 MB / 49206 MB avail; 82 B/s rd, 0 op/s; 619/1365 objects degraded (45.348%); 843 kB/s, 0 keys/s, 0 objects/s recovering
2014-11-04 06:45:18.962420 mon.0 [INF] pgmap v2262: 1344 pgs: 140 active, 5 active+recovery_wait, 1199 active+clean; 373 MB data, 23318 MB used, 24740 MB / 49206 MB avail; 371 B/s rd, 0 B/s wr, 0 op/s; 618/1365 objects degraded (45.275%); 0 B/s, 0 keys/s, 0 objects/s recovering
2014-11-04 06:45:23.347089 mon.0 [INF] pgmap v2263: 1344 pgs: 130 active, 5 active+recovery_wait, 1209 active+clean; 373 MB data, 23331 MB used, 24727 MB / 49206 MB avail; 379 B/s rd, 0 B/s wr, 0 op/s; 572/1365 objects degraded (41.905%); 2323 kB/s, 0 keys/s, 4 objects/s recovering
2014-11-04 06:45:37.970125 mon.0 [INF] pgmap v2264: 1344 pgs: 129 active, 4 active+recovery_wait, 1211 active+clean; 373 MB data, 23336 MB used, 24722 MB / 49206 MB avail; 568/1365 objects degraded (41.612%); 659 kB/s, 2 keys/s, 1 objects/s recovering
2014-11-04 06:45:40.006110 mon.0 [INF] pgmap v2265: 1344 pgs: 129 active, 4 active+recovery_wait, 1211 active+clean; 373 MB data, 23336 MB used, 24722 MB / 49206 MB avail; 568/1365 objects degraded (41.612%); 11 B/s, 3 keys/s, 0 objects/s recovering
2014-11-04 06:45:43.034215 mon.0 [INF] pgmap v2266: 1344 pgs: 129 active, 4 active+recovery_wait, 1211 active+clean; 373 MB data, 23344 MB used, 24714 MB / 49206 MB avail; 1010 B/s wr, 0 op/s; 568/1365 objects degraded (41.612%)
2014-11-04 06:45:44.048059 mon.0 [INF] pgmap v2267: 1344 pgs: 129 active, 4 active+recovery_wait, 1211 active+clean; 373 MB data, 23344 MB used, 24714 MB / 49206 MB avail; 1766 B/s wr, 0 op/s; 568/1365 objects degraded (41.612%)
2014-11-04 06:45:48.366555 mon.0 [INF] pgmap v2268: 1344 pgs: 129 active, 4 active+recovery_wait, 1211 active+clean; 373 MB data, 23345 MB used, 24713 MB / 49206 MB avail; 576 B/s wr, 0 op/s; 568/1365 objects degraded (41.612%)
```
最终,集群将会恢复成干净的状态。同时状态也会显示为`HEALTH_OK`。然后我们可以停止守护进程。因为存储单元是全局的单元,我们不能指定某一个让它停止,我们而是应该登进该主机并且告诉Docke停止该容器。
小提示:请确保你登陆进的是你要从集群中移除的那个主机。
```bash
core@deis-1 ~ $ docker stop deis-store-daemon
deis-store-daemon
```
回到deis-2主机上的存储容器,我们终于可以移除OSD了:
```bash
core@deis-2 ~ $ nse deis-store-monitor
root@deis-2:/# ceph osd crush remove osd.2
removed item id 2 name 'osd.2' from crush map
root@deis-2:/# ceph auth del osd.2
updated
root@deis-2:/# ceph osd rm 2
removed osd.2
```
同时作为清理工作,我们也应该吧OSD从etcd中删除。
```bash
core@deis-2 ~ $ etcdctl rm /deis/store/osds/172.17.8.100
```
搞定!如果我们现在检测健康状态,我们可以看到现在又有三个osd了。并且所有的安置组都是active+clean的状态。
```bash
core@deis-2 ~ $ nse deis-store-monitor
root@deis-2:/# ceph -s
cluster 20038e38-4108-4e79-95d4-291d0eef2949
health HEALTH_OK
monmap e4: 4 mons at {deis-1=172.17.8.100:6789/0,deis-2=172.17.8.101:6789/0,deis-3=172.17.8.102:6789/0,deis-4=172.17.8.103:6789/0}, election epoch 20, quorum 0,1,2,3 deis-1,deis-2,deis-3,deis-4
mdsmap e11: 1/1/1 up {0=deis-2=up:active}, 3 up:standby
osdmap e46: 3 osds: 3 up, 3 in
pgmap v2338: 1344 pgs, 12 pools, 375 MB data, 458 objects
23596 MB used, 24465 MB / 49206 MB avail
1344 active+clean
client io 326 B/s wr, 0 op/s
```
## 移除一个监控器(monitor)
移除一个监控器容易的多。首先我们需要移除etcd中的条目,这样任何使用Ceph的客户端将不会使用该监控器来进行连接:
```bash
$ etcdctl rm /deis/store/hosts/172.17.8.100
```
在5秒内,confd将会在所有的存储客户端上运行,并且把该监控器从ceph.conf配置文件中删除。
```
core@deis-1 ~ $ docker stop deis-store-monitor
deis-store-monitor
```
回到另一个主机,我们又可以进入一个存储容器然后移除这个监控器:
```bash
core@deis-2 ~ $ nse deis-store-monitor
root@deis-2:/# ceph mon remove deis-1
removed mon.deis-1 at 172.17.8.100:6789/0, there are now 3 monitors
2014-11-04 06:57:59.712934 7f04bc942700 0 monclient: hunting for new mon
2014-11-04 06:57:59.712934 7f04bc942700 0 monclient: hunting for new mon
```
注意接下来可能会报错,这种情形很正常,当Ceph客户端无法与一个监控器进行通信。重要的是我们需要看到`removed mon.deis-1 at 172.17.8.100:6789/0, there are now 3 monitors.`一行。
最后,让我们检测集群的健康状态:
```bash
root@deis-2:/# ceph -s
cluster 20038e38-4108-4e79-95d4-291d0eef2949
health HEALTH_OK
monmap e5: 3 mons at {deis-2=172.17.8.101:6789/0,deis-3=172.17.8.102:6789/0,deis-4=172.17.8.103:6789/0}, election epoch 26, quorum 0,1,2 deis-2,deis-3,deis-4
mdsmap e17: 1/1/1 up {0=deis-4=up:active}, 3 up:standby
osdmap e47: 3 osds: 3 up, 3 in
pgmap v2359: 1344 pgs, 12 pools, 375 MB data, 458 objects
23605 MB used, 24455 MB / 49206 MB avail
1344 active+clean
client io 816 B/s wr, 0 op/s
```
搞定了!
# 移除一个元数据(metadata)服务器
和守护进程一样,我们将会停止元数据服务的容器。
小提示:确保你登进去的主机是你要从集群中移除的主机。
```bash
core@deis-1 ~ $ docker stop deis-store-metadata
deis-store-metadata
```
这就是唯一需要的一步。ceph提供了一个`ceph mds rm`命令。但是没有提供其文档,参见:
http://docs.ceph.com/docs/giant/rados/operations/control/#mds-subsystem
# 将主机从etcd中移除
etcd集群仍然有我们已经删除的主机的条目,因此我们需要删除该条目。这可以通过像etcd API发送请求来完成。详情参考“移除主机(removing machines)”。

【Deis文档】Deis安装之安装Deis平台

DockOne 发表了文章 • 0 个评论 • 3312 次浏览 • 2014-11-25 21:54 • 来自相关话题

注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。 我们将使用deisctl工具来开通具有SSH访问权限的CoreOS主机或工作站上的Deis平台。 首先检查一下你已经安装了deisctl,并且版本正确。 ...查看全部
注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。

我们将使用deisctl工具来开通具有SSH访问权限的CoreOS主机或工作站上的Deis平台。
首先检查一下你已经安装了deisctl,并且版本正确。
```shell
$ deisctl --version
1.0.1
```
如果不是,则请遵循“安装deisctl”的指示。
确保你的SSH客户端正在运行,并选择你的CoreOS节点所添加的SSH密钥对应的私钥。
```shell
$ eval `ssh-agent -s`
$ ssh-add ~/.ssh/deis
```

注意

对于Vagrant集群:ssh-add ~/.vagrant.d/insecure_private_key


找出节点之一的公有IP地址,并设置到DEISCTL_TUNNEL环境变量中(使用你自己的IP地址替换):
```shell
$ export DEISCTL_TUNNEL=104.131.93.162
```
如果你设置了“方便的”DNS记录,你可以这样引用
```shell
$ export DEISCTL_TUNNEL="deis-1.example.com"
```

注意

对于Vagrant集群:export DEISCTL_TUNNEL=172.17.8.100



这是deisctl将尝试与集群进行通讯的IP地址。你可以通过运行deisctl list测试看是否正常工作。如果你看到一行输出,则表明控制工具正在与节点通讯。

在开通平台前,我们需要将SSH密钥添加到Deis中以便它能在运行时连接到远程主机:

```shell
$ deisctl config platform set sshPrivateKey=~/.ssh/deis
```
我们还需要通知控制器正在部署的应用所在的域名:
```shell
$ deisctl config platform set domain=example.com
```

注意

对于Vagrant集群:deisctl config platform set domain=local3.deisapp.com


完成后,运行以下命令来开通Deis平台:
```shell
$ deisctl install platform
```
你将看到类似下面的输出,这说明运行Deis所需要的单元已经被加载到CoreOS集群中:
```
● ▴ ■
■ ● ▴ Installing Deis...
▴ ■ ●
Scheduling data containers...
...
Deis installed.
Please run `deisctl start platform` to boot up Deis.
```
运行以下命令来启动Deis平台:
```shell
$ deisctl start platform
```
当看到“Deis started.”时,你的Deis平台就运行在一个集群上了!你可通过运行以下命令来确认所有的Deis单元已经被加载并激活:
```shell
$ deisctl list
```
所有的单元应该都激活了。

现在,你已经完成了集群开通,请参阅“使用Deis”来开始使用这个平台。

【Deis文档】Deis安装之安装deisctl

DockOne 发表了文章 • 0 个评论 • 3188 次浏览 • 2014-11-25 21:54 • 来自相关话题

注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。 Deis控制工具,简称deisctl,是一个用于配置和管理Deis平台的命令行客户端。 从安装程序构建 -------- 要安装最新 ...查看全部
注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。

Deis控制工具,简称deisctl,是一个用于配置和管理Deis平台的命令行客户端。
从安装程序构建
--------
要安装最新版本的deisctl,切换到要安装此程序的目录。然后,通过以下命令下载和运行安装脚本来安装Deis控制工具:
```shell
$ cd ~/bin
$ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.0.1
```
这将安装deisctl到当前目录,并更新用于调度组件的Deis systemd单元文件。将它链接到/usr/local/bin以便将其纳入你的PATH中:
```shell
$ sudo ln -fs $PWD/deisctl /usr/local/bin/deisctl
```
要修改安装选项,直接保存安装程序:
[](https://s3-us-west-2.amazonaws.com/opdemand/deisctl-1.0.1-linux-amd64.run) [](https://s3-us-west-2.amazonaws.com/opdemand/deisctl-1.0.1-darwin-amd64.run)
然后将下载的文件作为命令行脚本运行。添加--help来查看可用的选项。

重要说明

永远使用与Deis版本相符的deisctl。这可通过deisctl --version验证。


构建版本使用以下URL格式存放在S3目录中:
`https://s3-us-west-2.amazonaws.com/opdemand/deisctl---amd64.run`
比如,Deis 1.0.1版本的deisctl可以在此下载:
[](https://s3-us-west-2.amazonaws.com/opdemand/deisctl-1.0.1-linux-amd64.run) [](https://s3-us-west-2.amazonaws.com/opdemand/deisctl-1.0.1-darwin-amd64.run)
通过源码构建
--------
如果你想通过源码安装,确保你安装了godep,然后运行:
```shell
$ make -C deisctl build
```
然后你可以移动或链接客户端到你的路径中:
```shell
$ sudo ln -fs $PWD/deisctl/deisctl /usr/local/bin/deisctl
```

Kubernetes上master无法找到minion

jasko 回复了问题 • 3 人关注 • 10 个回复 • 5009 次浏览 • 2014-11-25 18:05 • 来自相关话题

【Deis文档】Deis安装之裸机

DockOne 发表了文章 • 0 个评论 • 3320 次浏览 • 2014-11-25 09:18 • 来自相关话题

注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。 Deis集群可以在任何CoreOS能运行的地方开通,包括你自己的硬件。 请在阅读本文时,获取源码并参考contrib/bare-metal中的脚本。 ...查看全部
注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。

Deis集群可以在任何CoreOS能运行的地方开通,包括你自己的硬件。
请在阅读本文时,获取源码并参考contrib/bare-metal中的脚本。
为了让CoreOS运行在基础硬件上,你需要通过PXEiPXE启动——这将完全在内存中启动一台CoreOS机器。然后,你可以将CoreOS安装到硬盘中

重要说明

Deis需要CoreOS 472.0.0或更新版本。


检查系统需求
--------
请在选择运行Deis的机器规格时参考“系统需求”中的资源要求。
生成SSH密钥
--------
deisctl工具使用SSH通道与远程主机进行通讯。如果你没有SSH密钥,以下命令将生成一个名为deis的密钥对:
```shell
$ ssh-keygen -q -t rsa -f ~/.ssh/deis -N '' -C deis
```
自定义user-data
--------
# 生成新的发现URL
发现URL将节点的地址和元数据保存在一个唯一的标识下,以此协助etcd实例连接在一起。在仓库根目录下运行以下命令来生成一个带有新的发现URL的contrib/coreos/user-data文件:
```shell
$ make discovery-url
```
user-data中包含了必要的脚本,因此不要在未运行make discovery-url前开通Deis集群。
# SSH密钥
将第一步生成的SSH密钥里的公钥部分添加到user-data文件中:
```ini
ssh_authorized_keys:
- ssh-rsa AAAAB3... deis
```
# 更新$private_ipv4
裸机上的CoreOS无法准确的检测$private_ipv4。请使用该节点的(私有)IP地址替换在user-data文件中它出现的所有位置。
# 添加环境
由于CoreOS无法检测私有和公有IP地址,/etc/environment在启动时未被写入。请将其加入到user-data文件的write_files部分:
```ini
    []path: /etc/environment[/]
permissions: 0644 content: | COREOS_PUBLIC_IPV4=<你的公有IP> COREOS_PRIVATE_IPV4=<你的私有IP>```安装CoreOS到硬盘中--------假设你已经启动裸机服务器进入CoreOS,你现在可以进行硬盘安装。# 为安装程序提供配置文件将user-data保存到你的裸机里。本示例假定你将配置保存到/tmp/config文件。# 开始安装```shellcoreos-install -C alpha -c /tmp/config -d /dev/sda```这将安装最新的CoreOS Alpha版本到硬盘中。要指定CoreOS版本,请在安装命令后添加-V参数,比如-V 494.0.0。等安装完成后,重启你的服务器。一旦主机上线,你就可以通过deis的ssh密钥作为核心用户登录。配置DNS--------参考“配置DNS”获取正确设置Deis相关DNS记录的更多信息。安装Deis平台--------现在你已经完成了集群开通,请参考“安装Deis平台”开始平台安装。已知问题--------# 主机名是localhost如果在安装到硬盘后后你的主机名是localhost,则请在安装前在user-data中设置hostname:```inihostname: your-hostname```hostname千万不要使用域名全称!# 名称解析缓慢有些DNS服务器和防火墙存在glibc并行发送IPv4和IPv6地址请求的问题。解决办法是在/etc/resolv.conf里设置single-request选项。这可在安装CoreOS到硬盘时通过user-data文件完美解决。```ini
    []path: /etc/resolv.conf[/]
permissions: 0644
content: |
nameserver 8.8.8.8
nameserver 8.8.4.4
domain your.domain.name
options single-request
```