问题标签 [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.
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 端口?
kubernetes - 如何允许(sidecar)容器在 Kubernetes 部署中终止而不重新启动?
我的部署包括:
- 一个初始化容器
- 长期服务
- 需要配置相关服务的 sidecar。
一旦配置了单独的服务,sidecar 的工作就完成了。但是,它不能终止,因为 Kubernetes 只会重新启动它。它不应该是 init 容器的一部分,因为它不应该阻止服务运行。
由于部署不允许OnFailure
restartPolicy,我目前的实现是让sidecar在完成配置任务后进入睡眠状态。
有没有办法让容器在部署不重启的情况下终止?或者,有没有办法让 init 容器与常规容器一起运行?
解决 XY 问题的一些细节:
- 该服务进行一些处理并将结果转储到数据库中。
- 相关服务为存储在数据库中的值提供 API。
- 这两个服务在不同的部署中,因为我预计它们会单独扩展。
例子:
kubernetes - Kubernetes 上无状态应用程序的 StatefulSets 与 Deployments
我发现大量文章和文档描述了 StatefulSets 相对于 Kubernetes 上的有状态应用程序部署的优势。我无法弄清楚的是相反的:与部署相比,StatefulSets 的缺点,特别是对于无状态应用程序。
有人可以解释一下为什么不总是将 StatefulSets 用于有状态和无状态应用程序?
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
。
github - 从位于 Github 中的文件创建 Kubernetes 对象
我想使用 GitHub URL 创建一个部署,
kubectl create -f github.com/deployment.yaml
该deployment.yaml
文件位于我的私有 GitHub 存储库中。
如何验证我的 kubectl 以使用我的 GitHub 私有存储库并创建该部署?
kubernetes - 是否可以让 StatefulSet 的 pod 在 Kubernetes 中运行不同的应用程序映像?
我想创建一个 StatefulSet,我希望我的第一个 pod(即 ordeal index-0)充当路由器(routing-app),用于从 ordeal index 1(serving-app)开始的 pod。
我是 Kubernetes StatefulSets 的新手,并且仍在尝试找出它们在现实世界应用程序中的用法。如果我正在尝试从设计角度来看我不应该做的事情,或者我应该尝试其他事情来完成我的要求,请告诉我。谢谢,J
docker - 如何在 kubernetes yaml 中将文件复制到容器
我了解可以使用以下命令将文件/文件夹复制到容器中:
但是,我希望在 yaml 文件中执行此操作
我该怎么做呢?(假设我正在使用容器的部署)
docker - 如何在 Kubernetes 的 pod 内将 URL 从 localhost 更改为 service i
我有一个在纯 docker 环境中运行的应用程序。我想在 k8s 中部署它。因此,我创建了配置映射、部署等。下面是部署到 k8s 之前的配置文件。
我创建了一个服务
我的部署如下所示:
由于我创建了一个服务,我想在配置文件中使用这个服务端点作为 fin-service 而不是 localhost。
但是我在http://fin-service:19000收到连接被拒绝错误。我在哪里偏离轨道?
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 版本:
kubernetes - Kubernetes - 没有从死节点中驱逐 pod
我有一个带有 kubeadm init 的 kube 集群设置(大部分是默认设置)。一切都按预期工作,除了如果我的一个节点在 pod 正在运行时离线,则 pod 会Running
无限期地保持状态。根据我的阅读,它们应该进入Unknown
orFailure
状态,并且在 --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 从死节点重新调度。