我正在运行一个 GCE 实例,并在其上运行了一个 Kubernetes 集群。还配置了 HTTP 负载均衡器来探测在此实例上运行的 Kubernetes 服务的运行状况。但我不断收到此错误:
Error: Server Error
The server encountered a temporary error and could not complete your request. Please try again in 30 seconds.
Run Code Online (Sandbox Code Playgroud)
所以我想知道与负载均衡器相关的健康检查是否正确运行/配置。
我在哪里可以找到或如何启用此类健康检查器的日志文件?
该实例正在运行 Debian。
log-files healthcheck google-compute-engine google-cloud-platform google-kubernetes-engine
我有一种情况,Kubernetes 显然无法再为kubectl create -f Deployment.yaml. kubectl describe service <my-service>报告以下错误:
CreatingLoadBalancerFailed
Error creating load balancer (will retry): Failed to create load balancer
for service default/<my-service>: requested ip <my-address> is
neither static nor assigned to LB <id>(default/<my-service>): <nil>
Run Code Online (Sandbox Code Playgroud)
但gcloud compute addresses list表示my-address是静态IP地址:
NAME REGION ADDRESS STATUS
<my-address> europe-west1 <ip-address> RESERVED
Run Code Online (Sandbox Code Playgroud)
并Deployment.yaml包含<my-service>分配<my-address>给负载均衡器的规范:
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: UDP
port: …Run Code Online (Sandbox Code Playgroud) 我们的其中一个 Pod 无法启动,并且会不断重启并且处于 CrashLoopBackOff 状态:
姓名准备状态重新开始年龄
quasar-api-staging-14c385ccaff2519688add0c2cb0144b2-3r7v4 0/1
CrashLoopBackOff 72 5h
Run Code Online (Sandbox Code Playgroud)
描述 pod 看起来像这样(只是事件):
来自 SubobjectPath 原因消息的 FirstSeen LastSeen 计数
57m 57m 1 {kubelet gke-skywatch-cf86c224-node-21bm} spec.containers{quasar-api-staging} Created Created with docker id 7515ced7f49c
57m 57m 1 {kubelet gke-skywatch-cf86c224-node-21bm} spec.containers{quasar-api-staging} Started Started with docker id 7515ced7f49c
52m 52m 1 {kubelet gke-skywatch-cf86c224-node-21bm} spec.containers{quasar-api-staging} Created Created with docker id 2efe8885ad49
52m 52m 1 {kubelet gke-skywatch-cf86c224-node-21bm} spec.containers{quasar-api-staging} Started Started with docker id 2efe8885ad49
46m 46m 1 {kubelet gke-skywatch-cf86c224-node-21bm} spec.containers{quasar-api-staging} Created Created with docker id a4361ebc3c06 …Run Code Online (Sandbox Code Playgroud) 我有一个 gke 集群,节点位于 3 个不同的区域但位于同一区域。我想对我的 Pod 使用永久性磁盘。但是 pod 是在所有 3 个区域中随机创建的。如何使用 gcePD(所有节点通用)。或者我可以在 pod 部署 (Yaml) 文件中添加存储桶吗?如果它是 podssible .请建议我怎么做?
google-cloud-storage google-cloud-platform google-kubernetes-engine
这篇文章描述了如何在 kubernetes 中为 pod 分配主机别名,无论如何都可以为部署而不是为 pod 那样做?
在 kubernetes 中添加主机条目以提供主机名解析的第一行(在检查像 8.8.8.8 这样的服务器之前)的任何其他建议也将作为答案受到欢迎。
我的应用程序结构使用 GKE 和 CloudFlare。它看起来像这样:
CloudFlare -> GKE -> Ingress -> My app running nginx
我在 CloudFlare 中使用了灵活的 SSL,所以只有用户和 CloudFlare 之间的连接使用 HTTPS,其余的都使用 HTTP。我知道的CloudFlare设置X-Forwarded-Proto到https在这种情况下,但是当我看到我的nginx的应用程序正在接收头,它得到X-Forwarded-Proto: http。
我很确定这发生在 GKE 的负载均衡器和 Ingress 之间,因为我可以看到CF-Visitor: {"scheme": "https"}CloudFlare 配置的标头设置为 HTTPS。我的理解是,这意味着 CloudFlare 确实设置X-Forwarded-Proto为https,但在此过程中它被覆盖了。
不幸的是,我无法从 GKE 负载均衡器获取标头日志(似乎他们根本不记录X-Forwarded-*标头),所以我无法 100% 确认 CloudFlare 实际上正在设置标头,但我会如果不是,那就太惊讶了。
如果这是真的,Google Cloud 将X-Forwarded-Proto使用http. 我怎样才能避免这样做?
编辑:我在https://cloud.google.com/community/tutorials/nginx-ingress-gke 之后配置了 nginx 入口而不是 gce ,并且X-Forwarded-Proto设置https为预期。这是另一个信号,表明它gce是覆盖X-Forwarded-Proto标头的入口控制器。
我在 GCP 中有两个项目:
为什么这个 Pod 无法连接?想法?
谢谢。
google-compute-engine google-cloud-platform google-kubernetes-engine
我正在尝试在 GKE 上运行机器学习作业,并且需要使用 GPU。
我使用 Tesla K80 创建了一个节点池,如本演练中所述。
我将最小节点大小设置为 0,并希望自动缩放器会根据我的工作自动确定我需要多少个节点:
gcloud container node-pools create [POOL_NAME] \
--accelerator type=nvidia-tesla-k80,count=1 --zone [COMPUTE_ZONE] \
--cluster [CLUSTER_NAME] --num-nodes 3 --min-nodes 0 --max-nodes 5 \
--enable-autoscaling
Run Code Online (Sandbox Code Playgroud)
最初,没有需要 GPU 的作业,因此集群自动缩放器正确地将节点池缩小到 0。
但是,当我使用以下规范创建作业时
resources:
requests:
nvidia.com/gpu: "1"
limits:
nvidia.com/gpu: "1"
Run Code Online (Sandbox Code Playgroud)
这是完整的作业配置。(请注意,此配置是部分自动生成的。我还删除了一些与问题无关的环境变量)。
在Insufficient nvidia.com/gpu我手动将节点池增加到至少 1 个节点之前,Pod一直处于挂起状态。
这是 GPU 节点池的当前限制,还是我忽略了什么?
graphics-processing-unit kubernetes google-kubernetes-engine nvidia
我有一个基本的 nginx 部署和一个由 let's 通过 cert-manager 加密颁发的现有证书。我以为一切都已准备就绪,可以开始使用证书,但我无法连接 https。
连接到 LoadBalancer IP 和域可以正常工作。使用 https 连接域无法连接。Chrome 这么说ERR_SSL_PROTOCOL_ERROR,Firefox 这么说SSL_ERROR_RX_RECORD_TOO_LONG,SSL Labs 这么说Assessment failed: No secure protocols supported。都是同一个问题。
这是服务:
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: example
labels:
app: example
spec:
type: LoadBalancer
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
- name: https
protocol: TCP
port: 443
targetPort: 80
selector:
app: example
Run Code Online (Sandbox Code Playgroud)
这是入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx
namespace: example
annotations:
cert-manager.io/cluster-issuer: letsencrypt-production …Run Code Online (Sandbox Code Playgroud) 当我在 GKE 中创建新节点池时,磁盘大小默认为 100GB。然而,当我通过 SSH 连接到已运行一段时间的节点时,运行后df -h仅使用了 32GB。(我其实不知道这32GB是从哪里来的)
节点真的需要 100GB 磁盘空间吗?例如,我可以仅使用 10GB 来运行它们吗?首先,我认为 Pod 会耗尽卷的空间,但在 GKE 上,Pod 提供自己的附加持久磁盘,并且不会添加到节点的磁盘空间,所以我很困惑为什么需要这么大的卷对于节点本身?
kubernetes ×6
cloudflare ×1
healthcheck ×1
hosts ×1
ingress ×1
internal-dns ×1
log-files ×1
nvidia ×1
ssl ×1