0%

问题描述

在查看文档时看到,有一个api调用可以删除pod,有没有办法杀死所有命名空间中的所有pod?

高票回答

没有命令可以完全按照你的要求去做。

可以使用以下命令删除单个命名空间中的所有pod:

1
kubectl delete --all pods --namespace=foo

可以使用以下命令删除所有命名空间以及每个命名空间中的每个对象(但不包括非命名空间的对象,如节点和某些事件):

1
kubectl delete --all namespaces

但是,后一个命令可能不是你想要做的事情,因为它会删除kube-system命名空间中的东西,这会使你的集群无法使用。

此命令将删除除kube-system之外的所有名称空间,这可能很有用:

1
2
3
4
for each in $(kubectl get ns -o jsonpath="{.items[*].metadata.name}" | grep -v kube-system);
do
kubectl delete ns $each
done

原文链接

Command to delete all pods in all kubernetes namespaces

在搭建个人博客时遇到了一个大家都遇到过的坑,那就是在github上托管的博客在百度上是搜索不到的,所以就有了把个人博客同时托管到github和coding之说。

搭建教程网上一搜一大把,不再详述(可参考这里),这里只记录下搭建过程中需要注意的几个地方。

  1. coding账号注册时请选择个人版(如果注册了团队版,你会发现跟网上给的教程不太一样,而且,部署出来的网页地址无法修改成xxx.coding.me)。

1564908572712

1564908744041

  1. 访问地址如果是如下图所示,不要慌,到个人账户—>个人设置—>用户名,修改一下就可以了。

1564909224309

  1. 如果未设置SSH(报错信息如下图),请拷贝本地主机的id_rsa.pub内容到个人账户—>SSH公钥

1564910021188

yq是一个轻量级的便携式命令行YAML处理器。该工具的目标是成为yaml文件处理方面的jq或sed。

通配符

路径可以使用’prefix’命令作为前缀。完整的yaml内容将嵌套在新的前缀路径中。

1
yq p <yaml_file> <path>

写到标准输出

给出sample.yaml文件:

1
2
a: simple
b: [1, 2]

然后

1
yq p data1.yaml c

输出

1
2
3
c:
a: simple
b: [1, 2]

任意深度

给定data1.yaml文件:

1
2
a:
b: [1, 2]

然后

1
yq p data1.yaml c.d

输出

1
2
3
4
c:
d:
a:
b: [1, 2]

更新文件

给定data1.yaml文件:

1
2
a: simple
b: [1, 2]

然后

1
yq p -i data1.yaml c

将更新data1.yaml文件,以便路径’c’作为所有其他路径的前缀。

多文档 - 增加前缀到单个文档

给定data1.yaml文件:

1
2
3
4
something: else
---
a: simple
b: cat

然后

1
yq p -d1 data1.yaml c

输出

1
2
3
4
5
something: else
---
c:
a: simple
b: cat

多文档 - 增加前缀到所有文档

给定data1.yaml文件:

1
2
3
4
something: else
---
a: simple
b: cat

然后

1
yq p -d'*' data1.yaml c

输出

1
2
3
4
5
6
c:
something: else
---
c:
a: simple
b: cat

合并

可以使用’merge’命令合并Yaml文件。与第一个文件合并的每个附加文件将为任何尚未存在的key或没有值的key设置值。

1
yq m <yaml_file> <path>...

写到标准输出

给出data1.yaml文件:

1
2
a: simple
b: [1, 2

和data2.yaml文件:

1
2
3
a: other
c:
test: 1

然后

1
yq m data1.yaml data2.yaml

输出

1
2
3
4
a: simple
b: [1, 2]
c:
test: 1

更新文件

给出data1.yaml文件:

1
2
a: simple
b: [1, 2]

和data2.yaml文件:

1
2
3
a: other
c:
test: 1

然后

1
yq m -i data1.yaml data2.yaml

将更新data1.yaml文件,将’c’的值为’test:1’。

覆盖值

给出data1.yaml文件:

1
2
a: simple
b: [1, 2]

和data2.yaml文件:

1
2
3
a: other
c:
test: 1

然后

1
yq m -x data1.yaml data2.yaml

输出

1
2
3
4
a: other
b: [1, 2]
c:
test: 1

覆盖数组值

给出data1.yaml文件:

1
2
a: simple
b: [1, 2]

和data3.yaml文件:

1
2
3
4
5
b: [3, 4]
c:
test: 2
other: true
d: false

然后

1
yq m -x data1.yaml data3.yaml

输出

1
2
3
4
5
6
a: simple
b: [3, 4]
c:
test: 2
other: true
d: false

请注意,’b’不会导致数组中值的合并

追加数组值

给出data1.yaml文件:

1
2
3
a: simple
b: [1, 2]
d: hi

和data3.yaml文件:

1
2
3
4
5
a: something
b: [3, 4]
c:
test: 2
other: true

然后

1
yq m -a data1.yaml data3.yaml	

输出

1
2
3
4
5
6
a: simple
b: [1, 2, 3, 4]
c:
test: 2
other: true
d: hi

请注意,’b’数组已连接第二个数据文件中的值。另请注意,其他map键不会被覆盖(字段a)。

Append不能与overwrite一起使用,如果给出了两个标志,则忽略append。

多文档 - 合并单个文档

目前,yq仅对要合并的第一个文档提供多文档支持。剩余的yaml文件将选择其第一个文档。

给出data1.yaml文件:

1
2
3
4
something: else
---
a: simple
b: cat

和data3.yaml文件:

1
b: dog

然后

1
yq m -x -d1 data1.yaml data3.yaml

输出

1
2
3
4
something: else
---
a: simple
b: dog

多文档 - 合并所有文档

目前,yq仅对要合并的第一个文档提供多文档支持。剩余的yaml文件将选择其第一个文档。

给定data1.yaml文件:

1
2
3
4
something: else
---
a: simple
b: cat

和data3.yaml文件:

1
b: dog

然后

1
yq m -x -d'*' data1.yaml data3.yaml

输出

1
2
3
4
5
b: dog
something: else
---
a: simple
b: dog

转换

Yaml到Json

将输出转换为json,请使用–tojson(或-j)标志。这只能与read命令一起使用。

给出sample.yaml文件:

1
2
b:
c: 2

然后

1
yq r -j sample.yaml b.c

输出

1
{"b":{"c":2}}

Json到Yaml

要读入json,只需传入一个json文件而不是yaml,它就可以工作了:)

例如给出一个json文件:

1
{"a":"Easy! as one two three","b":{"c":2,"d":[3,4]}}

然后

1
yq r sample.json

输出

1
2
3
4
5
6
a: Easy! as one two three
b:
c: 2
d:
- 3
- 4

yq是一个轻量级的便携式命令行YAML处理器。该工具的目标是成为yaml文件处理方面的jq或sed。

创建

可以使用“new”命令创建Yaml文件。这与write命令的工作方式相同,但不需要传入已存在的Yaml文件。目前,不支持在单个yaml文件中创建多个文档。

1
yq n <path> <new value>

创建简单文件

1
yq n b.c cat

输出

1
2
b:
c: cat

使用脚本创建文件

创建脚本遵循与更新脚本相同的格式。

给定一个脚本create_instructions.yaml:

1
2
b.c: 3
b.e[+].name: Howdy Partner

然后

1
yq n -s create_instructions.yaml

输出

1
2
3
4
b:
c: 3
e:
- name: Howdy Partner

还可以使用管道方式创建:

1
cat create_instructions.yaml | yq n -s -

带点号的Key

指定具有点号使用键查找指示符的键时。

1
2
b:
foo.bar: 7
1
yaml r sample.yaml 'b[foo.bar]'
1
yaml w sample.yaml 'b[foo.bar]' 9

可以将任何有效的yaml key指定为key查找的一部分。

请注意,路径是引号,以避免shell解释方括号。

带有破折号的键(和值)

如果键或值具有前导破折号,则yq将不知道您传递的是值而不是标志(并且您将收到“错误标志语法”错误)。

要解决这个问题,你需要告诉它通过在最后一个标志之后添加’ - ‘来停止处理标志,如下所示:

1
yq n -t -- --key --value

返回

1
` --key: --value

删除

1
yq d <yaml_file> <path_to_delete>

写到标准输出

给出sample.yaml文件:

1
2
3
b:
c: 2
apples: green

然后

1
yq d sample.yaml b.c

输出

1
2
b:
apples: green

从标准输入读取

1
cat sample.yaml | yq d - b.c

删除数组元素

给出sample.yaml文件:

1
2
3
4
5
b:
c:
- 1
- 2
- 3

然后

1
yq d sample.yaml 'b.c[1]'

输出

1
2
3
4
b:
c:
- 1
- 3

删除节点

给出sample.yaml文件:

1
2
3
b:
c: 2
apples: green

然后

1
yq d -i sample.yaml b.c

将更新sample.yaml文件,以便删除“c”节点。

通配符

给出sample.yaml文件:

1
2
3
4
5
6
7
8
9
10
11
---
bob:
item1:
cats: bananas
dogs: woof
item2:
cats: apples
dogs: woof2
thing:
cats: oranges
dogs: woof3

然后

1
yq d sample.yaml bob.*.cats

输出

1
2
3
4
5
6
7
8
---
bob:
item1:
dogs: woof
item2:
dogs: woof2
thing:
dogs: woof3

前缀匹配

给出sample.yaml文件:

1
2
3
4
5
6
7
8
9
10
11
---
bob:
item1:
cats: bananas
dogs: woof
item2:
cats: apples
dogs: woof2
thing:
cats: oranges
dogs: woof3

然后

1
yq d sample.yaml bob.item*.cats

输出

1
2
3
4
5
6
7
8
9
---
bob:
item1:
dogs: woof
item2:
dogs: woof2
thing:
cats: oranges
dogs: woof3

数组匹配

给出sample.yaml文件:

1
2
3
4
5
6
7
8
---
bob:
- cats: bananas
dogs: woof
- cats: apples
dogs: woof2
- cats: oranges
dogs: woof3

然后

1
yq d sample.yaml bob.[*].cats

输出

1
2
3
4
5
---
bob:
- dogs: woof
- dogs: woof2
- dogs: woof3

多文档 - 删除单个文档

给出sample.yaml文件:

1
2
3
4
5
6
something: else
field: leaveMe
---
b:
c: 2
field: deleteMe

然后

1
yq w -d1 sample.yaml field

输出

1
2
3
4
5
something: else
field: leaveMe
---
b:
c: 2

多文档 - 删除所有文档

给出sample.yaml文件:

1
2
3
4
5
6
something: else
field: deleteMe
---
b:
c: 2
field: deleteMeToo

然后

1
yq w -d'*' sample.yaml field

输出

1
2
3
4
something: else
---
b:
c: 2

请注意,’*’在引号中以避免被shell解释。

带点号的Key

指定具有点号使用键查找指示符的键时。

1
2
b:
foo.bar: 7
1
yaml r sample.yaml 'b[foo.bar]'
1
yaml w sample.yaml 'b[foo.bar]' 9

可以将任何有效的yaml key指定为key查找的一部分。

请注意,路径是引号,以避免shell解释方括号。

带有破折号的键(和值)

如果键或值具有前导破折号,则yq将不知道您传递的是值而不是标志(并且您将收到“错误标志语法”错误)。

要解决这个问题,你需要告诉它通过在最后一个标志之后添加’ - ‘来停止处理标志,如下所示:

1
yq n -t -- --key --value

返回

1
` --key: --value

yq是一个轻量级的便携式命令行YAML处理器。该工具的目标是成为yaml文件处理方面的jq或sed。

读取

1
yq r <yaml_file|json_file> <path>

此命令也可以将json文件作为输入,并将输出yaml,除非指定导出为json(-j)

基本操作

给出sample.yaml文件:

1
2
b:
c: 2

然后

1
yq r sample.yaml b.c

将输出值’2’。

从标准输入读取

给出sample.yaml文件:

1
cat sample.yaml | yq r - b.c

将输出值’2’。

通配符

给出sample.yaml文件:

1
2
3
4
5
6
7
8
----
bob:
item1:
cats: bananas
item2:
cats: apples
thing:
cats: oranges

然后

1
yq r sample.yaml bob.*.cats

输出

1
2
3
- bananas
- apples
- oranges

前缀匹配

给出sample.yaml文件:

1
2
3
4
5
6
7
8
----
bob:
item1:
cats: bananas
item2:
cats: apples
thing:
cats: oranges

然后

1
yq r sample.yaml bob.item*.cats

输出

1
2
- bananas
- apples

多文档 - 指定单个文档

给出sample.yaml文件:

1
2
3
4
something: else
---
b:
c: 2

然后

1
yq r -d1 sample.yaml b.c

将输出值’2’。

多文档 - 指定所有文档

读取所有文档将以数组形式返回结果。如果需要,可以使用’-j’标志将其转换为json。

给出sample.yaml文件:

1
2
3
4
5
6
7
8
name: Fred
age: 22
---
name: Stella
age: 23
---
name: Android
age: 232

然后

1
yq r -d'*' sample.yaml name

输出

1
2
3
- Fred
- Stella
- Android

数组

您可以提供一个索引来访问特定元素:例如:给定一个示例文件

1
2
3
4
5
6
b:
e:
- name: fred
value: 3
- name: sam
value: 4

然后

1
yq r sample.yaml 'b.e[1].name'

将输出’sam’。

请注意,路径是引号,以避免shell解释方括号。

数组匹配

给出sample.yaml文件:

1
2
3
4
5
6
b:
e:
- name: fred
value: 3
- name: sam
value: 4

然后

1
yq r sample.yaml 'b.e[*].name'

输出

1
2
- fred
- sam

请注意,路径是引号,以避免shell解释方括号。

带点号的Key

指定具有点号使用键查找指示符的键时。

1
2
b:
foo.bar: 7
1
yaml r sample.yaml 'b[foo.bar]'
1
yaml w sample.yaml 'b[foo.bar]' 9

可以将任何有效的yaml key指定为key查找的一部分。

请注意,路径是引号,以避免shell解释方括号。

带有破折号的键(和值)

如果键或值具有前导破折号,则yq将不知道您传递的是值而不是标志(并且您将收到“错误标志语法”错误)。

要解决这个问题,你需要告诉它通过在最后一个标志之后添加’ - ‘来停止处理标志,如下所示:

1
yq n -t -- --key --value

返回

1
` --key: --value

写/更新

1
yq w <yaml_file> <path> <new value>

写到标准输出

给出sample.yaml文件:

1
2
b:
c: 2

然后

1
yq w sample.yaml b.c cat

输出

1
2
b:
c: cat

从标准输入读取

1
cat sample.yaml | yq w - b.c blah

添加新字段

路径中的任何缺少的字段都将动态创建。

给出sample.yaml文件:

1
2
b:
c: 2

然后

1
yq w sample.yaml b.d[+] "new thing"

输出

1
2
3
4
b:
c: cat
d:
- new thing

通配符

给出sample.yaml文件:

1
2
3
4
5
6
7
8
---
bob:
item1:
cats: bananas
item2:
cats: apples
thing:
cats: oranges

然后

1
yq w sample.yaml bob.*.cats meow	

输出

1
2
3
4
5
6
7
8
---
bob:
item1:
cats: meow
item2:
cats: meow
thing:
cats: meow

前缀匹配

给出sample.yaml文件:

1
2
3
4
5
6
7
8
---
bob:
item1:
cats: bananas
item2:
cats: apples
thing:
cats: oranges

然后

1
yq w sample.yaml bob.item*.cats meow

输出

1
2
3
4
5
6
7
8
---
bob:
item1:
cats: meow
item2:
cats: meow
thing:
cats: oranges

数组匹配

给出sample.yaml文件:

1
2
3
4
5
---
bob:
- cats: bananas
- cats: apples
- cats: oranges

然后

1
yq w sample.yaml bob[*].cats meow

输出

1
2
3
4
5
---
bob:
- cats: meow
- cats: meow
- cats: meow

数组字段添加值

给出sample.yaml文件:

1
2
3
4
5
b:
c: 2
d:
- new thing
- foo thing

然后

1
yq w sample.yaml "b.d[+]" "bar thing"

输出

1
2
3
4
5
6
b:
c: 2
d:
- new thing
- foo thing
- bar thing

请注意,路径是引号,以避免shell解释方括号。

多文档 - 更新单个文档

给出sample.yaml文件:

1
2
3
4
something: else
---
b:
c: 2

然后

1
yq w -d1 sample.yaml b.c 5

输出

1
2
3
4
something: else
---
b:
c: 5

多文档 - 更新所有文档

读取所有文档将以数组形式返回结果。如果需要,可以使用’-j’标志将其转换为json。

给出sample.yaml文件:

1
2
3
4
something: else
---
b:
c: 2

然后

1
yq w -d'*' sample.yaml b.c 5

输出

1
2
3
4
5
6
something: else
b:
c: 5
---
b:
c: 5

请注意,’*’在引号中以避免被shell解释。

更新文件

给出sample.yaml文件:

1
2
b:
c: 2

然后

1
yq w -i sample.yaml b.c cat

将更新sample.yaml文件,将’c’的值改为cat。

使用脚本更新多个值

给出sample.yaml文件:

1
2
3
4
b:
c: 2
e:
- name: Billy Bob

和脚本update_instructions.yaml文件:

1
2
b.c: 3
b.e[+].name: Howdy Partner

然后

1
yq w -s update_instructions.yaml sample.yaml

输出

1
2
3
4
b:
c: 3
e:
- name: Howdy Partner

当然,也可以使用管道命令:

1
cat update_instructions.yaml | yq w -s - sample.yaml

以连字符(或短划线)开头的值

需要使用标志终止符来阻止应用程序尝试将后续参数解析为标志:

1
yq w -- my.path -3

输出

1
2
my:
path: -3

带点号的Key

指定具有点号使用键查找指示符的键时。

1
2
b:
foo.bar: 7
1
yaml r sample.yaml 'b[foo.bar]'
1
yaml w sample.yaml 'b[foo.bar]' 9

可以将任何有效的yaml key指定为key查找的一部分。

请注意,路径是引号,以避免shell解释方括号。

带有破折号的键(和值)

如果键或值具有前导破折号,则yq将不知道您传递的是值而不是标志(并且您将收到“错误标志语法”错误)。

要解决这个问题,你需要告诉它通过在最后一个标志之后添加’ - ‘来停止处理标志,如下所示:

1
yq n -t -- --key --value

返回

1
` --key: --value

yq是一个轻量级的便携式命令行YAML处理器。该工具的目标是成为yaml文件处理方面的jq或sed。

安装

在MacOS上:

1
brew install yq

在Ubuntu和支持snap包的其他Linux发行版上:

1
snap install yq

在Ubuntu 16.04或更高版本上:

1
2
3
sudo add-apt-repository ppa:rmescandon/yq
sudo apt update
sudo apt install yq -y

或者,下载最新的二进制文件或者:

1
go get gopkg.in/mikefarah/yq.v2

View on GitHub

需求

我们都知道,在使用EclipseLink JPA操作数据库时,不可或缺的要配置persistence.xml文件,一个最基本的配置示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="JPAExamples">
<class>com.lyyao.jpa.test.Employee</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://192.168.0.1:3306/employee"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="123456"/>
</properties>
</persistence-unit>
</persistence>

那么问题来了,对于数据库的IP地址,端口号,用户名和密码这几个参数:

  1. 在这里定义死合适吗?
  2. 如果需要根据实际环境变化怎么办?

所以,有没有一种方法,可以在上面的配置文件里定义变量或默认值,然后根据实际环境获取变量的值取覆盖呢?

答案是有的。从查阅的资料看,我了解到有2种方法可以解决上面的问题。

解决方法

方法一:默认值覆盖法

通过Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME,properties)方法注入properties参数,该

方法二:变量替换法

参考

https://dzone.com/articles/jpa-with-eclipselink-amp-mysql-using-java-configur

https://gist.github.com/baumato/3283f255b00094411110fc889be58aa5

问题描述

我之前可以使用curl执行如下命令:

1
https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_PORT_443_TCP_PORT/api/v1beta3/namespaces/default/

但在kubernetes 0.18.0中它提示“unauthorized”。奇怪的是,如果我使用外部IP地址(http://172.17.8.101:8080/api/v1beta3/namespaces/default/)是可以访问的。

高票回答

在官方文档中我发现了这个

显然,我没有在之前版本的Kubernetes中使用安全令牌。从那时起,我设计了一个比运行代理或在容器上安装golang更简单的解决方案。请参阅此示例,该示例从api获取当前容器的信息:

1
2
3
KUBE_TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
curl -sSk -H "Authorization: Bearer $KUBE_TOKEN" \
https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_PORT_443_TCP_PORT/api/v1/namespaces/default/pods/$HOSTNAME

我还使用包含一个简单的二进制文件jq来解析json以用于bash脚本。

原文链接

How do I access the Kubernetes api from within a pod container?

问题描述

我在GKE上的Kubernetes中有以下rc控制器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
apiVersion: v1
kind: ReplicationController
metadata:
name: myapp
labels:
app: myapp
spec:
replicas: 2
selector:
app: myapp
deployment: initial
template:
metadata:
labels:
app: myapp
deployment: initial
spec:
containers:
- name: myapp
image: myregistry.com/myapp:5c3dda6b
ports:
- containerPort: 80
imagePullPolicy: Always
imagePullSecrets:
- name: myregistry.com-registry-key

现在,如果我执行以下命令执行滚动更新,但没有重新拉镜像。为什么?

1
kubectl rolling-update myapp --image=us.gcr.io/project-107012/myapp:5c3dda6b

高票回答

如果有如下定义,Kubernetes将会在Pod创建时拉取镜像(请参阅更新镜像文档):

  • 镜像的标签为:latest
  • 指定镜像的拉取策略imagePullPolicy: Always

如果你想每次都拉取镜像,这很好。但是,如果您想按需执行该操作:例如,如果您想使用some-public-image:latest,但只想在请求时手动提取新版本。你现在可以:

  • 将imagePullPolicy设置为IfNotPresent或Never并提前拉取好,在每个群集节点上手动拉取镜像,以便是最新版本,然后执行kubectl rolling-update或类似重启Pods
  • 暂时更改imagePullPolicy,执行kubectl apply,重新启动pod(例如kubectl rolling-update),还原imagePullPolicy,重新kubectl apply
  • 将一些some-public-image:latest推送到您的私有存储库并执行kubectl rolling-update

按需拉动没有好的解决方案。如果有变化,请评论,我会更新这个答案。

原文链接

How do I force Kubernetes to re-pull an image?

问题描述

我正在寻找在DC / OS上运行Docker容器时是否使用Marathon和Chronos,Docker Swarm或Kubernetes的一些优缺点。

例如,何时使用Marathon / Chronos比使用Kubernetes更好,反之亦然?

现在我主要是进行实验,但希望我们在夏天之后开始在生产中使用这些服务之一。这可能会使Docker Swarm失去资格,因为我不确定它是否会在那时处于生产可用。

我喜欢Docker Swarm的原因是它本质上只是“Docker命令”,你不需要学习全新的东西。我们已经在使用docker-compose,它将与Docker Swarm一起开箱即用(至少在理论上),这将是一个很大的优势。我对Docker Swarm的主要关注是它是否涵盖了在生产中运行系统所需的所有用例。

高票回答

我将尝试分解Mesos上每个容器编排框架的独特方面。

使用Docker Swarm,如果:

使用Kubernetes-Mesos,如果:

使用Marathon,如果:

  • 您想要启动Docker或非Docker长期运行的应用程序/服务
  • 您希望将Mesos属性用于基于约束的计划
  • 您希望使用应用程序组和依赖关系来启动,扩展或升级相关服务
  • 您希望使用运行状况检查来自动重新启动不健康的服务或回滚不健康的部署/升级
  • 您希望集成HAProxy或Consul以进行服务发现
  • 您希望通过Web UI或REST API启动和监控应用程序
  • 您想要使用从一开始就构建的框架

使用Chronos,如果:

  • 您希望启动预期退出的Docker或非Docker任务
  • 您希望将任务计划为在特定时间/计划(cron)运行
  • 您希望安排依赖任务的DAG工作流程
  • 您希望通过Web UI或REST API启动和监视作业
  • 您想要使用从一开始就构建的框架

原文链接

Marathon vs Kubernetes vs Docker Swarm on DC/OS with Docker containers