想象一下这个场景。
我如何为这个容器分配 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 语法的形式给出答案)。
在 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) kubectl debug我正在尝试通过尝试使用在 aws eks 中默认禁用的临时容器来调试 distroless POD 。我正在使用 aws eks 1.21
\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")\nRun Code Online (Sandbox Code Playgroud)\n那么如何为 EKS 启用它们呢?
\n为了测试高可用性模式是否发挥了应有的作用,我需要在测试期间终止实例,并且需要以它们无法报告断开连接或类似情况的方式终止它们。
出于实际原因,我需要在较小的环境中进行测试,该环境没有每个 Pod 的单独节点,因此我无法通过关闭机器来进行测试,而是需要终止进程。我可以使用 杀死它们docker kill,但这需要登录节点并找到容器的 docker id。是否有某种方法可以通过 实现类似的效果exec kill,但SIGKILL不允许发送到进程 ID 1。
我还看到使用了删除,但在某些情况下存在差异:删除时,容器会以干净状态重新创建,但仅重新启动它不会,并且我正在测试的部署实际上会查看启动期间的状态并且启动时出现问题,所以我需要测试它未被删除的情况。
我可以强行终止 Pod,而不给它们任何通过 kubernetes API/ 进行清理的机会吗kubectl?
当我在 GKE 中创建新节点池时,磁盘大小默认为 100GB。然而,当我通过 SSH 连接到已运行一段时间的节点时,运行后df -h仅使用了 32GB。(我其实不知道这32GB是从哪里来的)
节点真的需要 100GB 磁盘空间吗?例如,我可以仅使用 10GB 来运行它们吗?首先,我认为 Pod 会耗尽卷的空间,但在 GKE 上,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,但它们对我来说没有任何有意义的内容。
有什么想法去哪里看吗?
我正在尝试删除属于已灭绝的 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
我不断在 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
我有一个带有一个 Linux 工作节点的 EKS 集群,它可以在一个区域内的任何可用区中实例化。我需要使用持久存储卷,这样即使节点死亡,我的数据也不会丢失。值得一提的是,我说的是RabbitMQ数据。
我尝试过使用 EBS 卷,但它有一个硬限制,即它绑定到单个可用区。如果节点死亡,然后实例化到不同的可用区,则无法挂载 EBS 卷。
到目前为止我有以下想法:
将单个 EBS 卷附加到工作节点。当工作节点在不同的可用区中重新启动时,创建EBS 快照,并使用它在正确的可用区中创建新的 EBS 卷。新的节点实例将挂载新的 EBS 卷。
每个可用区都有一个工作节点,并有一个专用的 EBS 卷。RabbitMQ 可以自动跨 EBS 卷复制数据。这样就无需使用 EBS 快照,如解决方案 1 中建议的那样。
拥有一个可连接到所有可用区的多个节点的 EFS 卷。
此外,我发现这篇文章解释了解决我的问题的更复杂的方法:
我为 Kubernetes 1.10/1.11 推荐的另一个选项是控制卷的创建位置以及 pod 的调度位置:
- 要在预先确定的区域中创建卷,您可以为要使用的每个区域创建自定义 StorageClass 对象(请参阅https://kubernetes.io/docs/concepts/storage/storage-classes/#aws-ebs)。
- 要指定调度具有 PV 的 pod 的区域,您可以使用affinity 或 nodeSelector: https: //kubernetes.io/docs/concepts/configuration/assign-pod-node/
- 如果您使用集群自动缩放,请记住,您可能需要为每个可用区单独的自动缩放组(请参阅kubernetes/autoscaler#501)您还可以在此处阅读有关此内容的一些内容:kubernetes/kubernetes#34583
您能帮我比较这些方法吗?比如在可扩展性、成本效率、可维护性方面……或者也许你能想到更好的?
我真的很难遵循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 -A并kubectl get clusterroles查看我的角色和集群角色。然后kubectl describe role role-name -n kube-system和kubectl 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:bootstrapperssystem:nodessystem:masters不过,我可以看到以下一些内容:
system:node(单数)system:node-bootstrapper我真的迷路了!我在这里误解了什么?什么是 中的“组” configmap/aws-auth,它与这些角色/集群角色有何关系?如果我想使用cluster-admin,我是否需要在它前面加上一些前缀,或者在某处添加“绑定”? …
kubernetes ×10
amazon-ebs ×1
aws-eks ×1
containers ×1
docker ×1
ingress ×1
kubectl ×1
openshift ×1
openshift-4 ×1
php-fpm ×1
rabbitmq ×1
ssh ×1
testing ×1