【问题标题】:kubernetes - kubectl run vs create and applykubernetes - kubectl 运行与创建和应用
【发布时间】:2018-06-09 11:35:57
【问题描述】:

我刚刚开始使用 kubernetes 并使用 kops 在 AWS 上设置集群。在我阅读(并尝试)的许多示例中,都会有如下命令:

kubectl run my-app --image=mycompany/myapp:latest --replicas=1 --port=8080

kubectl expose deployment my=app --port=80 --type=LoadBalancer

这似乎在幕后做了几件事,我可以查看使用kubectl edit deployment 创建的清单文件,等等 但是,我看到许多示例,人们手动创建清单文件,并使用像 @ 之类的命令987654324@或kubectl apply -f

我是否正确假设这两种方法都实现了相同的目标,但是通过自己创建清单文件,您可以获得更精细的控制?

然后我是否必须自己创建 Service、ReplicationController 和 Pod 规范?

最后,如果您自己创建清单文件,人们通常如何构建他们的项目来存储这些文件?他们只是在他们正在部署的项目旁边的目录中吗?

【问题讨论】:

标签: kubernetes


【解决方案1】:

基本问题是如何将所有 K8s 对象应用到 k8s 集群中。有几种方法可以完成这项工作。

  • 使用生成器(运行、公开)
  • 使用命令式方式(创建)
  • 使用声明方式(应用)

以上所有方法都有不同的目的和简单性。例如,如果您想快速检查容器是否按您的要求工作,那么您可以使用 Generators

如果你想对 k8s 对象进行版本控制,那么最好使用 declarative 的方式来帮助我们确定 k8s 对象中数据的准确性。

Deployment、ReplicaSet 和 Pods 是解决不同问题的不同层。所有这些概念都为 k8s 提供了灵活性。

  • Pods:确保相关容器在一起并提供效率。
  • ReplicaSet:确保 k8s 集群具有所需的 pod 副本
  • 部署:确保您可以拥有不同版本的 Pod,并提供回滚到之前版本的能力

最后,这取决于您希望如何使用这些概念或方法的用例。这不是关于哪个好哪个坏。

【讨论】:

  • 感谢您所做的一切。至于版本控制配置文件,人们通常只是将它们与项目代码一起存储吗?
  • 我们发现在 80% 的情况下重复太多了 - 一个带有单个容器的 pod,我们将单个 configmap 挂载到其中,我们通过单个入口为其创建单个服务,所以我们有一个 Ansible 角色,它接受一些值(Docker 注册表、副本数量、健康探测 URL)并标记并应用清单。我们将调用具有项目正确值的角色的 Ansible 剧本与我们的源代码一起存储,就像您建议的那样。如果您需要更细粒度的控制,将实际清单与您的代码一起存储是有意义的。
猜你喜欢
  • 2020-04-15
  • 2020-10-23
  • 2017-12-10
  • 1970-01-01
  • 2020-02-12
  • 2019-03-03
  • 2023-04-04
  • 2016-09-30
  • 2021-09-30
相关资源
最近更新 更多