问题标签 [kubernetes-deployment]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
13317 浏览

kubernetes - 如何在 Kubernetes 中为服务选择特定的 Pod

我有一个由 3 个主机组成的 kubernetes 集群,其中每个主机都有一个唯一的 id 标签。在这个集群上,有一个软件有 3 个实例(副本)。

每个副本都需要与所有其他副本进行通信。此外,还有一个包含所有 pod 的服务,以便该应用程序永久可用。

所以我有:

这种方法有效,但我无法扩展或使用滚动更新功能。

我想定义一个具有 3 个副本的部署,其中每个副本都有一个唯一的通用标签(例如 1/3、2/3 等副本 ID)。

在服务中,我可以使用选择器来获取即使在更新后仍存在的标签。

另一种解决方案可能是选择 pod/deployment,具体取决于运行它的主机。我可以使用 DaemonSet 或仅使用具有亲和力的 pod/deployment 来确保每个主机都具有我的部署的确切副本。

但我不知道如何根据运行所在的主机标签来选择 pod。

使用主机名不是一个选项,因为主机名会在不同的环境中改变。

我搜索了文档,但没有找到与此用例匹配的任何内容。希望这里有人知道如何解决这个问题。

0 投票
3 回答
9157 浏览

jenkins - Jenkins 中的 Kubernetes 部署状态

我正在编写一个 Jenkins Global 管道库,我有一个阶段可以将我的 docker 映像部署到 K8s 集群。因此,在 CI 过程中构建我的 docker 映像后,我将映像提升(部署)到多个环境(依次从低到高)。所以,要在运行后得到正确的部署状态

我在 shell 步骤中使用了以下命令。

如果我的部署没有错误,一切顺利,但如果我的部署有一些错误(可能是一些代码错误,应用程序无法启动),那么这个命令kubectl rollout status deployment <deployment name>将无限运行(因为 k8s 一次又一次地重试重新部署)并且我的 Jenkins 工作无限运行(直到作业超时)。

因此,为了找到一个 hack,我尝试了一个逻辑来将超时设置在这个命令上,并且计算是这样的:

timeout = (pod 数量 * liveness probe time + pod 数量 * 10) 秒

不确定这个计算是否正确。

我的代码片段看起来像这样

这最初效果很好,但后来我发现 k8s “kubectl rollout status deployment” 命令在所有 pod 都被安排好并且旧的完全终止之前不会给出退出代码 0,这有时需要一些时间。

我基本上想要的是一个最小的计算超时值。

我的 K8s 文件有这样的参数:

我在 K8s 文档中没有找到与此相关的任何具体内容。有人面临同样的挑战吗?

0 投票
1 回答
884 浏览

kubernetes - Kubernetes 初始化容器每小时运行一次

我最近通过https://github.com/tarosky/k8s-redis-ha设置了 redis设置了 redis ,这个 repo 包含一个 init 容器,并且我包含了一个额外的 init 容器以获取密码等设置。

我看到一些奇怪的(而且似乎没有记录)行为,即 init 容器在 redis 容器启动之前按预期运行,但是随后它们每小时运行一次,接近一个小时。我已经在部署和 statefulset 上使用busybox init 容器(什么都不做)测试了这种行为,并体验了相同的行为,因此它不是特定于这个redis pod。

我已经用 k8s 1.6 和 1.8 在裸机上对此进行了测试,结果相同,但是当将 init 容器应用于 GKE(k8s 1.7)时,不会发生这种行为。我看不到 GKE 的任何标志kubelet来指示这种行为。

请参阅下文,以kubectl describe pod显示在主 pod 尚未退出/崩溃时运行 init 容器。

请注意 pod 中的 Containers 开始于Mon, 12 Mar 2018 06:21:02 +0000(0 次重启)和 Init Containers 开始于Tue, 13 Mar 2018 03:01:12 +0000. 这些似乎每隔一小时几乎每小时重新运行一次。

我们的裸机必须在某个地方为 init 容器配置错误?任何人都可以阐明这种奇怪的行为吗?

0 投票
1 回答
423 浏览

git - Kubernetes gitrepo 卷 - 自动重新部署?

我在我的 K8S 集群中创建了一个包含两个副本的部署,其中包含用于克隆 git 存储库的卷部分。克隆 repo,创建 pod,创建部署。我可以登录到 pod 并运行 git commits 看起来还不错。

我的假设:如果我对由 gitRepo 卷挂载管理的存储库执行 git push 操作,pod 或 K8S 部署将自动重新部署,但这不会发生吗?我的假设是错误的吗?一旦像 CD 管道一样完成推送,我是否应该做更多的事情来进行自动重新部署?如果后者是真的,我现在正试图了解 gitRepo 卷挂载的目的。

感谢您的投入。

阿卜杜勒。

0 投票
2 回答
5349 浏览

kubernetes - 具有共享环境变量的 K8S 部署

我们有一组部署(一组 pod)都使用相同的 docker 映像。例子:

  • 网页接口
  • 网络管理员
  • Web 任务工作节点
  • 数据任务工作节点
  • ...

它们都需要一组通用的环境变量,例如数据库主机的位置、外部服务的密钥等。它们还具有一组不通用的环境变量。

无论如何,有没有人可以:

  1. 重用定义了环境变量的模板
  2. 从文件加载环境变量并将它们设置在 pod 上

最佳解决方案将是命名空间感知的解决方案,因为我们使用 kubernetes 命名空间将测试、阶段和生产环境分开。

类似于 dockers env_file 的东西会很好。但我找不到与此相关的任何示例或参考。我唯一能找到的是通过秘密设置环境,但这并不干净,冗长,因为我仍然需要为每个部署编写所有环境变量。

0 投票
2 回答
7635 浏览

spring-boot - Kubernetes Secret TLS 证书 P12 和 Spring Boot 部署不起作用

我目前陷入困境,不知道如何继续。

这是我的 Spring Boot application.properties

我的 Spring Boot 应用程序部署 yaml:

这就是我在 Kubernetes 中创建秘密的方式:

当它部署时,我得到

当我从部署 yaml 中删除 Secrets 时,它工作正常,但我不明白它是这个问题的根本原因。我正在使用谷歌云平台容器引擎。

0 投票
2 回答
329 浏览

dns - 描述 kubernetes 命名空间时的随机字符

我正在尝试通过 DNS 将我的 Kubernetes 部署连接在一起。

我有一个 Java (Spring Boot) 部署和一个 javascript (node.js) 部署,两者都通过默认的 ClusterIP 服务公开。我需要两个服务之间的 websocket 和 REST 通信。

我已经读过我应该使用 DNS,以便这两个服务可以相互通信,但是我在尝试确定这些 DNS 是什么时遇到了麻烦。

例如,

kubectl get pods --all-namespaces

给了我这个:

NAMESPACE NAME default javascript-deployment-65869b7db4-mxfrb default java-deployment-54bfc87fd6-z8wml

  1. 我需要在我的服务配置中指定什么来停止应用这些随机后缀?
  2. 然后,我如何确定我的 DNS 名称需要与 my-svc.my-namespace.svc.cluster.local 类似的形式?
0 投票
3 回答
1233 浏览

kubernetes - 如何创建将基于架构部署的 k8s 部署文件

我编写了如下部署文件,这给了我错误unknown field "platform"。关于指定什么以便它基于体系结构部署的任何想法?

0 投票
1 回答
1089 浏览

kubernetes - 获取 Kubernetes 部署的 pod 的推荐方法是什么?

特别是考虑到创建和更新部署所涉及的所有异步过程,我发现很难可靠地找到与给定部署的当前版本关联的当前 pod。

目前,我这样做:

  1. 向部署模板添加唯一标签。
  2. 获取部署的修订号。
  3. 获取所有带有标签的副本集。
  4. 进一步过滤它们以找到具有正确修订号的那个。
  5. 从副本集中提取 pod 模板哈希。
  6. 获取带有标签的所有 pod 以及 pod 模板哈希。

这是尴尬和复杂的。此外,我不确定(4)和(6)是否保证只产生想要的对象。但我不能按 ownerReferences 过滤,可以吗?

有没有更健壮更简单的方法?

0 投票
1 回答
2966 浏览

deployment - Kubernetes 部署中当前和可用的 pod 副本有什么区别?

我正在尝试弄脏 Kubernetes。我正在触发以下命令:

我在输出中得到以下标题:

kubectll 获取部署

我在以下输出中找不到current和列之间的区别?available

我知道官方文档对这些字段中的每一个都做了一个简短的描述,但它没有回答我的以下问题:

  1. Current<=是Desired真的吗?
  2. Up-to-Date<=是Current真的吗?
  3. Up-to-Date>CurrentUp-to-Date<=是Desired真的吗?
  4. 总是Available<=Current或者它可以是 > Available

简而言之,所有这些领域之间的关系是什么?