标签: kubernetes

如何在原始网络上为 docker 容器提供自己的可路由 IP?

主要问题

想象一下这个场景。

  • 192.168.0.0/24的网络。
  • 主机名为“Docker-Host”的计算机正在 192.168.0.2 运行 docker 引擎
  • 'Docker-Host' 运行 sshd 服务器
  • 在 'Docker-Host' 上,我在使用 ssh:22 和 https:443 (GitLab) 的容器中运行应用程序

我如何为这个容器分配 192.168.0.3 的 IP?

我需要服务在他们设计的默认端口上运行。


附加信息

我不能使用反向代理作为解决方案,因为这并不能解决如何通过 SSH 与 GitLab 实例通信的问题。

在这种情况下,将端口 22 映射到主机上的不同端口是不专业的,我的客户端开发人员不会喜欢这种设置。

如果我正在启动此应用程序的许多实例,这也将很难维护。并且必须为每个容器将每个 SSH 映射到主机上的新端口。

我的客户需要能够在没有额外配置客户端的情况下解析和运行以下内容。

https://GitLab.internal.net.work

ssh git 克隆https://GitLab.internal.net.work

我已经查看了 Docker 网络文档,除非我弄错了,否则我看不到一个易于维护的解决方案(尽管我还是 Docker 的新手)。

如何才能做到这一点?在这种情况下,其他人在做什么作为“最佳实践”?(如果可能,请以 docker-compose 语法的形式给出答案)。

ssh containers docker kubernetes docker-compose

7
推荐指数
2
解决办法
1万
查看次数

Openshift 4.x 中对象项目和命名空间有什么区别

在 openshift 4.x 中,您有一个 API,project它似乎与namespace您创建项目时创建的命名空间完全相似,反之亦然。我知道namespace是 kubernetes 中的一个标准对象,并且项目特定于 Openshift。那么project带来什么呢?

# list projects
oc get projects                                                      
NAME                                                    DISPLAY NAME   STATUS
default                                                                Active
kube-node-lease                                                        Active
kube-public                                                            Active
kube-system                                                            Active
local-storage                                                          Active
openshift                                                              Active
openshift-apiserver                                                    Active

# list namespaces
$ oc get ns
NAME                                                    STATUS   AGE
default                                                 Active   17d
kube-node-lease                                         Active   17d
kube-public                                             Active   17d
kube-system                                             Active   17d
local-storage                                           Active   16d
openshift                                               Active   17d
openshift-apiserver                                     Active   17d
openshift-apiserver-operator                            Active   17d
Run Code Online (Sandbox Code Playgroud)

除了列不同之外,列表是相同的

oc get project foo
Error …
Run Code Online (Sandbox Code Playgroud)

kubernetes openshift-4 openshift

7
推荐指数
1
解决办法
7111
查看次数

启用临时容器 AWS EKS

kubectl debug我正在尝试通过尝试使用在 aws eks 中默认禁用的临时容器来调试 distroless POD 。我正在使用 aws eks 1.21

\n
\xe2\x9c\x97  kubectl debug -it opentelemetry-collector-agent-6hqvf --image=busybox --target=some-app\n\nerror: ephemeral containers are disabled for this cluster (error from server: "the server could not find the requested resource")\n
Run Code Online (Sandbox Code Playgroud)\n

那么如何为 EKS 启用它们呢?

\n

kubernetes kubectl aws-eks

7
推荐指数
1
解决办法
2075
查看次数

不正常地终止 pod

为了测试高可用性模式是否发挥了应有的作用,我需要在测试期间终止实例,并且需要以它们无法报告断开连接或类似情况的方式终止它们。

出于实际原因,我需要在较小的环境中进行测试,该环境没有每个 Pod 的单独节点,因此我无法通过关闭机器来进行测试,而是需要终止进程。我可以使用 杀死它们docker kill,但这需要登录节点并找到容器的 docker id。是否有某种方法可以通过 实现类似的效果exec kill,但SIGKILL不允许发送到进程 ID 1。

我还看到使用了删除,但在某些情况下存在差异:删除时,容器会以干净状态重新创建,但仅重新启动它不会,并且我正在测试的部署实际上会查看启动期间的状态并且启动时出现问题,所以我需要测试它未被删除的情况。

我可以强行终止 Pod,而不给它们任何通过 kubernetes API/ 进行清理的机会吗kubectl

testing kubernetes

6
推荐指数
1
解决办法
9383
查看次数

GKE 节点建议的磁盘大小?

当我在 GKE 中创建新节点池时,磁盘大小默认为 100GB。然而,当我通过 SSH 连接到已运行一段时间的节点时,运行后df -h仅使用了 32GB。(我其实不知道这32GB是从哪里来的)

节点真的需要 100GB 磁盘空间吗?例如,我可以仅使用 10GB 来运行它们吗?首先,我认为 Pod 会耗尽卷的空间,但在 GKE 上,Pod 提供自己的附加持久磁盘,并且不会添加到节点的磁盘空间,所以我很困惑为什么需要这么大的卷对于节点本身?

kubernetes google-kubernetes-engine

6
推荐指数
2
解决办法
7006
查看次数

Pod 陷入“待处理”状态,没有记录任何事件

我不知道在哪里寻找提示。

我们已经在开发集群中使用 Helm Chart安装了 gitlab-runners。大多数情况下,这是有效的,但在过去一周左右的时间里,我们经历了 Pod 陷入状态Pending而没有任何进一步日志的情况。在某个我无法更好定义的时刻,所有 Pod 都被调度到节点上,然后下一批再次陷入困境Pending

我们使用 GKE,并为 gitlab-runner pod 设置了一个可抢占节点的节点池。我们运行 kubernetes v1.15.4-gke.18

我们知道 Pod 被卡住的原因有多种Pending,但我总是期望在运行kubectl describe <GITLAB_RUNNER_POD>kubectl get events. 问题是,没有。没有事件。

我们启用了 stackdriver 日志记录,我可以Kubernetes Apiservice Requests在下面看到日志Kubernetes Cluster,但它们对我来说没有任何有意义的内容。

有什么想法去哪里看吗?

kubernetes google-cloud-platform google-kubernetes-engine

6
推荐指数
1
解决办法
9159
查看次数

由于 http 目标代理不存在,无法删除悬空的 k8s 负载均衡器

我正在尝试删除属于已灭绝的 k8s 入口的转发规则、目标代理、url 映射和后端服务。

我成功删除了转发规则和目标代理,但是当我去删除 url-map 时,我得到以下信息:

 gcloud compute url-maps delete k8s-um-prism-feature-password-workflow-unit-tests-prism-ingres0 --quiet
ERROR: (gcloud.compute.url-maps.delete) Could not fetch resource:
 - The url_map resource 'projects/project-id/global/urlMaps/k8s-um-prism-feature-password-workflow-unit-tests-prism-ingres0' is already being used by 'projects/project-id/global/targetHttpProxies/k8s-tp-prism-feature-password-workflow-unit-tests-prism-ingres0
Run Code Online (Sandbox Code Playgroud)

k8s-tp-prism-feature-password-workflow-unit-tests-prism-ingres0不是它所属的目标代理的名称,但我继续尝试删除它并得到:

gcloud compute target-https-proxies delete k8s-tp-prism-feature-password-workflow-unit-tests-prism-ingres0 --quiet
ERROR: (gcloud.compute.target-https-proxies.delete) Could not fetch resource:
 - The resource 'projects/project-id/global/targetHttpsProxies/k8s-tp-prism-feature-password-workflow-unit-tests-prism-ingres0' was not found
Run Code Online (Sandbox Code Playgroud)

kubernetes google-cloud-platform google-kubernetes-engine ingress

6
推荐指数
1
解决办法
6438
查看次数

如何禁用 PHP-FPM 请求日志记录?

我不断在 Kubernetes 集群中看到类似这样的日志:

[php] - -  05/Jul/2020:20:15:55 +0000 "POST /api/bookings" 200
Run Code Online (Sandbox Code Playgroud)

我怎样才能禁用它们?

如果 PHP 想要写一个错误或者其他什么,我想保留它,这只是我不关心的请求日志(NGINX 无论如何都会记录它们第二次)。

我在用着php:7.1-fpm

php-fpm kubernetes

6
推荐指数
2
解决办法
9953
查看次数

具有多个可用区的 EKS 集群中的持久存储

我有一个带有一个 Linux 工作节点的 EKS 集群,它可以在一个区域内的任何可用区中实例化。我需要使用持久存储卷,这样即使节点死亡,我的数据也不会丢失。值得一提的是,我说的是RabbitMQ数据。

我尝试过使用 EBS 卷,但它有一个硬限制,即它绑定到单个可用区。如果节点死亡,然后实例化到不同的可用区,则无法挂载 EBS 卷

到目前为止我有以下想法:

  1. 将单个 EBS 卷附加到工作节点。当工作节点在不同的可用区中重新启动时,创建EBS 快照,并使用它在正确的可用区中创建新的 EBS 卷。新的节点实例将挂载新的 EBS 卷。

  2. 每个可用区都有一个工作节点,并有一个专用的 EBS 卷。RabbitMQ 可以自动跨 EBS 卷复制数据。这样就无需使用 EBS 快照,如解决方案 1 中建议的那样。

  3. 拥有一个可连接到所有可用区的多个节点的 EFS 卷。

此外,我发现这篇文章解释了解决我的问题的更复杂的方法:

我为 Kubernetes 1.10/1.11 推荐的另一个选项是控制卷的创建位置以及 pod 的调度位置:

您能帮我比较这些方法吗?比如在可扩展性、成本效率、可维护性方面……或者也许你能想到更好的?

amazon-ebs amazon-web-services rabbitmq kubernetes

6
推荐指数
1
解决办法
5607
查看次数

为什么 system:nodes、system:masters 等没有列在“kubectl get Roles -A”或“kubectl get clusterroles”下?

我真的很难遵循AWS文档“启用IAM用户和角色对集群的访问”

当我跑步时kubectl edit -n kube-system configmap/aws-auth,我看到这个:

  mapRoles: |
    - groups:
      - system:bootstrappers
      - system:nodes
Run Code Online (Sandbox Code Playgroud)

文档告诉我运行kubectl get roles -Akubectl get clusterroles查看我的角色和集群角色。然后kubectl describe role role-name -n kube-systemkubectl describe clusterrole cluster-role-name

我想将我的 AWS IAM 用户设置为adminor cluster-admin,但当我使用此配置时它不起作用:

  mapUsers: |
    - userarn: arn:aws:iam::**********:user/nathan
      username: nathan
      groups:
      - cluster-admin
Run Code Online (Sandbox Code Playgroud)

我发现当我使用时我可以让它工作system:masters。但后来我查看了所有角色、集群角色、角色绑定和集群角色绑定,我看不到任何以下使用的“系统”角色configmap/aws-auth

  • system:bootstrappers
  • system:nodes
  • system:masters

不过,我可以看到以下一些内容:

  • clusterrolebindings - system:node(单数)
  • 集群角色 -system:node-bootstrapper

我真的迷路了!我在这里误解了什么?什么是 中的“组” configmap/aws-auth,它与这些角色/集群角色有何关系?如果我想使用cluster-admin,我是否需要在它前面加上一些前缀,或者在某处添加“绑定”? …

authentication amazon-web-services kubernetes

6
推荐指数
1
解决办法
1768
查看次数