据我所知,谷歌的Kubernetes基于谷歌的博格; 然而,看起来Borg比Kubernetes更大.我的理解是Borg是一个大型系统,包含像Kubernetes这样的子系统和像Docker这样的容器.
所以,我想知道:
1)在集装箱集群管理方面,Borg(内部子系统)和Kubernetes之间的关键区别是什么?
2)在容器技术方面,Borg(内部子系统)和Docker之间的关键区别是什么?
我想将我的GKE集群中的核心数量保持在3以下.如果K8s复制控制器和pod的CPU限制从100m减少到最多50m,这就变得更加可行.否则,K8s吊舱单独占据一个核心的70%.
我决定不增加节点的CPU功率.在我看来,这在概念上是错误的,因为CPU限制被定义为在核心中测量.相反,我做了以下事情:
这是很多工作,可能很脆弱.即将推出的K8版本中的任何进一步更改或GKE配置的更改都可能会破坏它.
那么,有更好的方法吗?
当我尝试将新的docker图像推送到gcr.io使用时gcloud docker push,它经常在停止之前取得一些进展:
$ gcloud docker push gcr.io/foo-bar-1225/baz-quux:2016-03-23
The push refers to a repository [gcr.io/foo-bar-1225/baz-quux]
762ab2ceaa70: Pushing [> ] 556 kB/154.4 MB
2220ee6c7534: Pushing [===> ] 4.82 MB/66.11 MB
f99917176817: Layer already exists
8c1b4a49167b: Layer already exists
5f70bf18a086: Layer already exists
1967867932fe: Layer already exists
6b4fab929601: Layer already exists
550f16cd8ed1: Layer already exists
44267ec3aa94: Layer already exists
bd750002938c: Layer already exists
917c0fc99b35: Layer already exists
Run Code Online (Sandbox Code Playgroud)
推送无限期地保持在这种状态(我已经离开它一小时而没有一个字节的进展).如果我按Ctrl-C终止此进程并重新运行它,它将完全相同,并再次没有进展.
我发现的唯一解决方法是重新启动计算机并重新运行"Docker Quickstart Terminal".然后推动成功.
是否存在停滞推送的解决方法,不需要经常重启我的计算机?(我在Mac OS X上.)
docker gcloud google-kubernetes-engine google-container-registry
我正在尝试让Kubernetes从另一个项目的Google Container Registry下载图像.根据文档,您应该使用以下方法创建图像拉秘密:
$ kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
Run Code Online (Sandbox Code Playgroud)
但是,我不知道DOCKER_USER和DOCKER_PASSWORD我应该使用与谷歌容器注册认证?查看GCR文档,它说密码是您可以通过运行获得的访问令牌:
$ gcloud auth print-access-token
Run Code Online (Sandbox Code Playgroud)
这实际上有效......一段时间.问题似乎是这个访问令牌在(我相信是)一小时之后到期.我需要一个在创建图像拉秘密时不会过期的密码(或其他东西).否则Kubernetes群集在一小时左右后无法下载新图像.这样做的正确方法是什么?
google-cloud-platform kubernetes google-kubernetes-engine google-container-registry
所以我将 Kubernetes 用于一个副项目,它很棒。为我所从事的小型项目运行更便宜(3-5 个实例的小集群基本上可以在 GCP 上以大约 30 美元/月的价格提供我所需的一切)。
我唯一遇到困难的地方是尝试使用 kubernetes Ingress 资源映射到集群并扇出到我的微服务(它们是小型 Go 或 Node 后端)。我有将入口映射到不同服务的配置设置,那里没有问题。
我知道当你创建一个入口资源时,你真的可以很容易地让 GCP 启动一个 LoadBalancer。这很好,但它也代表了另外 20 美元/月,增加了项目成本。一旦/如果这件事得到一些关注,那可以忽略不计,但现在以及为了更好地理解 Kubernetes,我想执行以下操作:
有什么办法甚至可以使用 Kubernetes 和入口资源来完成吗?
谢谢!
nginx google-cloud-platform kubernetes google-kubernetes-engine kubernetes-ingress
如何ssh到谷歌容器引擎集群的节点?当我尝试使用其IP地址ssh到节点时,它说公钥被拒绝.
有人可以帮助我如何获得连接到谷歌容器集群节点的密钥?
如何使用kubectl获取没有任何标签的K8S节点?另外,如何获取没有任何标签的 K8S Pod?
kubernetes google-kubernetes-engine kubectl kubernetes-pod azure-aks
在GKE上,kube-dns在我的节点上运行,我可以看到docker容器.
我可以通过名称访问服务,这对于所有这些负载平衡是非常合适的解决方案的应用程序非常有用,但我如何使用DNS访问各个pod?
我知道我可以在API中查找特定的pod,但我需要自己更新hosts文件,并继续观看pod列表.DNS应该为我这样做,所以如何在pod中使用它?
Kubernetes doc说DNS信息需要传递给kubelet,但是我无法访问我知道的GKE上的内容,所以它只是没有在GKE上设置那样或者有什么办法可以激活它吗?
我的一些服务(特别是zookeeper)自己知道其他节点,并尝试通过主机名(即pod名称)连接到它们,并且除非我hosts自己更新文件,否则会失败.我想使用集成的DNS服务.
任何关于如何做到这一点的指导将不胜感激.
谢谢
我正在用 kubernetes 和 GCE 定义这个自动缩放器,我想知道我应该为targetCPUUtilizationPercentage. 那个目标到底指向什么?它是我集群中的总 CPU 吗?当此自动缩放器中引用的 pod 消耗超过targetCPUUtilizationPercentage会发生什么情况时?
我已经在我的 pod 的所有容器上设置了 CPU 和 Memory Requests=Limits,以使其符合保证服务质量类的资格。现在,查看过去 6 小时同一 Pod 的这些 CPU 使用率和 CPU 节流图。
这看起来正常吗?
CPU 使用率甚至一次都没有达到设定限制的 50%,但有时仍会被限制到 58%。
还有一个附带问题,节流图中 25% 处的红线表示什么?
我对这个主题做了一些研究,发现 Linux 内核中存在一个可能导致这种情况的错误,并且它在内核的 4.18 版中得到了修复。参考:这个和这个
我们在 GKE 上运行 Google Container Optimized OS。我检查了我们节点上的 linux 内核版本,它们在 4.19.112+ 上,所以我想我们已经有了那个补丁?这种节流模式的其他原因可能是什么?
PS 这个 pod(实际上是一个具有自动缩放功能的部署)部署在一个单独的节点池上,该池上没有运行我们的其他工作负载。因此,除此部署之外,在此节点池中的节点上运行的唯一 Pod 是一些指标以及日志记录代理和导出器。这是在上面讨论的 pod 被调度的同一节点上运行的 pod 的完整列表。确实有一些 Pod 没有设置任何 CPU 限制。我是否还需要以某种方式对这些设置 CPU 限制?
我们的 GKE 版本是1.16.9-gke.2
这是包含部署、服务和自动缩放器定义的清单文件。
apiVersion: apps/v1
kind: Deployment
metadata:
name: endpoints
labels:
app: endpoints
spec:
replicas: 2
selector:
matchLabels:
run: endpoints
strategy: …Run Code Online (Sandbox Code Playgroud) kubernetes ×9
docker ×2
azure-aks ×1
containers ×1
dns ×1
gcloud ×1
kubectl ×1
limits ×1
linux-kernel ×1
nginx ×1