问题标签 [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 回答
43 浏览

kubernetes - 如何禁止从 Kubernetes 中的 pod ip 访问容器端口

默认情况下,Kubernetes 允许 pod 使用 pod IP 访问其他 pod。

我有 2 个豆荚。Pod1 和 Pod2。Pod1 有一个 mysql 服务器和一个 PHP 应用程序。Pod2 有一个 php 应用程序。Pod1 ip 为 174.17.0.4,在 Pod2 内,php 应用程序可以从该地址访问 mysql 服务器174.17.0.4:3306

Pod1 和 Pod2 是 2 个不同的应用程序。Pod2 与 Pod1 没有任何关系。所以我担心的是如果 Pod2 被黑了,黑客可以扫描网络并暴力攻击 Pod1 的 mysql 服务器。

如何禁止3306从 pod1 外部访问 mysql 端口?

0 投票
1 回答
2912 浏览

kubernetes - 如何允许(sidecar)容器在 Kubernetes 部署中终止而不重新启动?

我的部署包括:

  • 一个初始化容器
  • 长期服务
  • 需要配置相关服务的 sidecar。

一旦配置了单独的服务,sidecar 的工作就完成了。但是,它不能终止,因为 Kubernetes 只会重新启动它。它不应该是 init 容器的一部分,因为它不应该阻止服务运行。

由于部署不允许OnFailurerestartPolicy,我目前的实现是让sidecar在完成配置任务后进入睡眠状态。

有没有办法让容器在部署不重启的情况下终止?或者,有没有办法让 init 容器与常规容器一起运行?

解决 XY 问题的一些细节:

  • 该服务进行一些处理并将结果转储到数据库中。
  • 相关服务为存储在数据库中的值提供 API。
  • 这两个服务在不同的部署中,因为我预计它们会单独扩展。

例子:

0 投票
1 回答
770 浏览

kubernetes - Kubernetes 上无状态应用程序的 StatefulSets 与 Deployments

我发现大量文章和文档描述了 StatefulSets 相对于 Kubernetes 上的有状态应用程序部署的优势。我无法弄清楚的是相反的:与部署相比,StatefulSets 的缺点,特别是对于无状态应用程序。

有人可以解释一下为什么不总是将 StatefulSets 用于有状态和无状态应用程序?

0 投票
1 回答
1084 浏览

kubernetes - kubectl apply -f 适用于 PC,但不适用于 Gitlab Runner

我正在尝试使用 Gitlab CICD 部署到 kubernetes。无论我做什么,kubectl apply -f helloworld-deployment.yml --record在我.gitlab-ci.yml总是返回部署不变:

即使我更改了图像上的标签,或者部署根本不存在。但是,如果我kubectl apply -f helloworld-deployment.yml --record从自己的计算机上运行,​​它可以正常工作并在标签更改时更新,并在不存在部署时创建部署。以下是我.gitlab-ci.yml正在测试的:

下面是helloworld-deployment.yml

更新:

kubectl rollout history deployments/helloworld-deployment如果我运行并且没有现有部署,这就是我看到的:

如果部署已经存在,我会看到:

只有一次修订。

这次我确实注意到,当我更改标签时,我的 Gitlab Runner 的输出是:

但是,没有新的豆荚。当我从我的 PC 上运行它时,我确实看到创建了新的 pod。

更新:

运行kubectl get pods在 Gitlab 运行器中显示两个不同的 pod,而不是我在我的 PC 上看到的。

我肯定只有一个 Kubernetes 集群,但kubectl config view显示了一些差异(服务器 url 相同)。的输出contexts显示不同的命名空间。这是否意味着我需要在我的yml文件中设置命名空间或在命令中传递它?这是 Gitlab 运行器的输出:

这是我电脑的输出:

看起来 Gitlab为命名空间添加了自己的默认值

因此,我将其放在 helloworld-deployment.yml 的元数据部分:

然后它按预期工作。它之前正在部署,但kubectl get pods由于该命令正在使用命名空间,因此没有显示它default

0 投票
1 回答
91 浏览

github - 从位于 Github 中的文件创建 Kubernetes 对象

我想使用 GitHub URL 创建一个部署,
kubectl create -f github.com/deployment.yaml
deployment.yaml文件位于我的私有 GitHub 存储库中。
如何验证我的 kubectl 以使用我的 GitHub 私有存储库并创建该部署?

0 投票
1 回答
191 浏览

kubernetes - 是否可以让 StatefulSet 的 pod 在 Kubernetes 中运行不同的应用程序映像?

我想创建一个 StatefulSet,我希望我的第一个 pod(即 ordeal index-0)充当路由器(routing-app),用于从 ordeal index 1(serving-app)开始的 pod。

我是 Kubernetes StatefulSets 的新手,并且仍在尝试找出它们在现实世界应用程序中的用法。如果我正在尝试从设计角度来看我不应该做的事情,或者我应该尝试其他事情来完成我的要求,请告诉我。谢谢,J

0 投票
2 回答
9322 浏览

docker - 如何在 kubernetes yaml 中将文件复制到容器

我了解可以使用以下命令将文件/文件夹复制到容器中:

但是,我希望在 yaml 文件中执行此操作

我该怎么做呢?(假设我正在使用容器的部署)

0 投票
1 回答
146 浏览

docker - 如何在 Kubernetes 的 pod 内将 URL 从 localhost 更改为 service i

我有一个在纯 docker 环境中运行的应用程序。我想在 k8s 中部署它。因此,我创建了配置映射、部署等。下面是部署到 k8s 之前的配置文件。

我创建了一个服务

我的部署如下所示:

由于我创建了一个服务,我想在配置文件中使用这个服务端点作为 fin-service 而不是 localhost。

但是我在http://fin-service:19000收到连接被拒绝错误。我在哪里偏离轨道?

0 投票
2 回答
3281 浏览

kubernetes - 无法将部署从 apiVersion extensions/v1beta1 升级到 apps/v1,它会自动使用 extensions/v1beta1

我目前有一个 GKE Kubernetes 1.15 集群,我计划升级到 1.16。由于 1.16 不支持某些 API,我必须将我的部署从 extensions/v1beta1 更改为 apps/v1。

使用这个简单的 deployment.yml:

当我将它应用到我的 1.15 cluster:kubectl -n mynamespace deployment.yml时,实际看到的是以下(kubectl -n mynamespace get deployments nginx-deployment):

如您所见,实际的 apiVersion 是 extensions/v1beta1 而不是 apps/v1。为什么不应用我指定的版本?

更新:

这是我的 kubectl 版本:

0 投票
1 回答
1297 浏览

kubernetes - Kubernetes - 没有从死节点中驱逐 pod

我有一个带有 kubeadm init 的 kube 集群设置(大部分是默认设置)。一切都按预期工作,除了如果我的一个节点在 pod 正在运行时离线,则 pod 会Running无限期地保持状态。根据我的阅读,它们应该进入UnknownorFailure状态,并且在 --pod-eviction-timeout (默认 5m)之后,它们应该被重新安排到另一个健康节点。

这是 Node 7 离线 20 多分钟后我的 pod(我也将它放置了两天以上,没有重新安排):

您可以看到 pod 仍标记为Running,而它们的部署具有Ready: 0/1.

这是我的节点:

问题可能是什么?我所有的容器都有就绪和活跃度探测器。我试过搜索文档和其他地方,但找不到任何解决这个问题的方法。

目前,如果一个节点出现故障,我可以将其上的 pod 重新安排到活动节点的唯一方法是,如果我使用 --force 和 --graceperiod=0 手动删除它们,这会破坏一些主要的Kubernetes 的目标:自动化和自我修复。

根据文档:https ://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-lifetime If a node dies or is disconnected from the rest of the cluster, Kubernetes applies a policy for setting the phase of all Pods on the lost node to Failed.

- - - - - 额外的信息 - - - - - - - -

我相信那些 liveness 和 readiness 探测失败只是由于启动缓慢。节点关闭后似乎没有检查活动/准备情况(最后一次检查是 37 分钟前)。

这是一个具有以下版本的自托管集群:

感谢所有帮助的人。

编辑:最初使用 kubeadm 引导时,这可能是一个错误或潜在的错误配置。完全重新安装 kubernetes 集群并从 1.17.4 更新到 1.18 解决了这个问题,现在 Pod 从死节点重新调度。