标签: kubernetes

如何在 Google Kubernetes Engine 中选择 Kubernetes 负载均衡器的外部 IP 地址

我正在使用 Google Kubernetes Engine 部署一个网络应用程序,我想通过负载均衡器在我作为 Google Cloud Platform 中同一项目的一部分控制的现有静态 IP 地址上访问它,因为我想使用域名已经指向这个IP。

我用于 pod 的 yaml 文件是:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  labels:
    app: my-app
spec:
  containers:
  - name: my-container
    image: gcr.io/my-project/my-app:latest
Run Code Online (Sandbox Code Playgroud)

我可以使用以下方法设置负载平衡器:

apiVersion: v1
kind: Service
metadata:
  name: my-load-balancer
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: my-app
  type: LoadBalancer
Run Code Online (Sandbox Code Playgroud)

这提供了一个可以访问应用程序的外部 IP,但我找不到任何方法来配置它以使用我想要的 IP。该服务的文件提到了spec.clusterIP设置,但这似乎并没有涉及到的外部IP。同样,一旦设置了负载均衡器,服务的 status.loadBalancer.ingress.ip 字段就会设置为其外部 IP 地址,但这似乎不是一个可配置的设置。

作为替代方案,我尝试在 Google Compute Engine 控制台中手动创建转发规则,将来自静态 IP 地址的流量定向到 Kubernetes 设置的目标池,但是当我尝试连接时,连接被拒绝。

有什么方法可以做我想做的事 - 在选定的静态 IP 地址上在 Google Kubernetes 引擎上公开 Kubernetes …

docker google-compute-engine kubernetes google-cloud-platform google-kubernetes-engine

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

microk8s 适合生产环境,还是只适合开发?

microk8s似乎是在 Ubuntu 上安装 Kubernetes 的一种简单方法。有几个地方称它为 minikube 的替代品,它不是针对生产环境的,这篇文章似乎表明它主要针对开发环境。但是,我看不出它不适合生产环境的原因。

我有两台 Ubuntu 服务器,希望在每台服务器上安装 Kubernetes,同时维护也在这些服务器上运行的旧应用程序。我想知道 microk8s 是否适合这种情况。

microk8s 适合生产环境,还是只适合开发?

ubuntu kubernetes microk8s

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

如何查找 Kubernetes POD 重启原因

我已将集群中的 pod 扩展至 20 个,当我第二天看到时,已重新创建了少数扩展的 pod。

当我说重新创建 POD 时,它会被删除并重新创建,并且重新创建的 Pod 和缩放的 Pod 的时间戳会有所不同。

我无法找到重新创建 POD 的原因。

我无法找到哪个 POD 进行了重新创建,因为该 POD 已被删除并消失。Journalctl 中没有关于重新创建哪个 POD 的日志。有什么方法可以进一步调试以找到 POD 重新创建的原因。或 POD 被删除的可能原因是什么。

注意:我定义了就绪性和活性探针,但根据我的理解,这些探针将作用于容器,并且不会导致 POD 重新创建。

kubernetes kubectl

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

Kubernetes 总是提供 503 Service Temporously Unavailable 与多个 TLS Ingress

我在 Amazon Web Services 上由 kops 设置了一个 kubernetes 集群

我有 2 个站点设置。一个是通过 SSL/TLS/https 保护的,另一个是 http。两者都是 Wordpress 网站。域已更改以保护站点身份

入口配置:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-rules
spec:
  tls:
  - hosts:
    - site1.com
    secretName: site1-tls-secret
  - hosts:
    - www.site1.com
    secretName: site1-tls-secret
  rules:
  - host: site1.com
    http:
      paths:
      - path: /
        backend:
          serviceName: site1
          servicePort: 80
  - host: www.site1.com
    http:
      paths:
      - path: /
        backend:
          serviceName: site1
          servicePort: 80
  - host: blog.site2.com
    http:
      paths:
      - path: /
        backend:
          serviceName: site2
          servicePort: 80
Run Code Online (Sandbox Code Playgroud)

入口服务 …

amazon-web-services docker kubernetes

17
推荐指数
3
解决办法
4万
查看次数

如何查找分配给新创建的 AKS 群集的服务主体?

我刚刚使用标准的az aks create ... --ssh-key-value .... 根据https://docs.microsoft.com/en-us/azure/aks/kubernetes-service-principal

已创建 AKS 群集,并且由于未指定现有服务主体,因此会为群集创建服务主体。

我在哪里可以找到创建的 SP?谢谢

azure kubernetes

17
推荐指数
1
解决办法
4万
查看次数

nginx 中的 kubernetes dns 解析器

我在本地开发docker-compose,并且有一个 nginx 容器做一个简单的proxy_pass像这样:

location /app/ {
    proxy_pass http://webapp:3000/;

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;

    resolver 127.0.0.11;
}
Run Code Online (Sandbox Code Playgroud)

我现在想转移到 kubernetesGKE 中,最后一行给我带来了麻烦。

我试图将解析器切换到:

    resolver kube-dns;
Run Code Online (Sandbox Code Playgroud)

我还尝试了各种其他 IP 和名称,但我不断收到以下错误:

nginx: [emerg] host not found in resolver "kube-dns"
Run Code Online (Sandbox Code Playgroud)

我的 kubernetes 设置是我有一个 pod,有 2 个容器:“webapp”和“nginx”。我只想有一个service指向 nginx的外部可以proxy_pass指向 webapp 的。

有任何想法吗?

nginx kubernetes google-kubernetes-engine

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

如何重写 url 到后端,同时在 nginx 入口中保留浏览器 url?

我正在尝试重写服务的路径,同时在 kubernetes 上使用 nginx 入口保留浏览器 URL。

我需要的是这样的:

  • http://example.com/path=>http://service
  • http://example.com/path/bar=>http://service/bar
  • http://example.com/path/file.css=>http://service/file.css

也就是说,使其/path成为上游服务器中的根(或某个不同的 url)。

从我在这里看到的,这是使用 proxy_pass 上的尾部斜杠来完成的,但 nginx ingress 似乎没有这个选项。

这可能是 nginx 入口吗?

nginx kubernetes nginx-ingress

15
推荐指数
1
解决办法
4万
查看次数

rsync 文件到 kubernetes pod

我需要将文件树 rsync 到 kubernetes 集群中的特定 pod。如果只有一个人可以说服 rsync 相信 kubectl 的行为有点像 rsh,那似乎应该是可能的。就像是:

rsync --rsh='kubectl exec -i podname -- ' -r foo x:/tmp
Run Code Online (Sandbox Code Playgroud)

...除了这会遇到 x 问题,因为 rsync 假设需要一个主机名:

exec: "x": executable file not found in $PATH
Run Code Online (Sandbox Code Playgroud)

我似乎找不到帮助 rsync 构建 rsh 命令的方法。有没有办法做到这一点?或者可以通过管道实现相对高效的文件传输的其他方法?

(我知道gcloud compute copy-files,但它只能在节点上使用?)

rsync kubernetes

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

Kubernetes - 我可以避免使用 GCE 负载均衡器来降低成本吗?

我正在使用 Gitlab-CI 在 GCE 上部署 Kubernetes 集群。我想将成本保持在最低水平 - 这是我目前的设置:

  • 节点在 3 个f1-micro实例上运行
  • Traefik使用 ServiceType 配置运行的系统 podLoadBalancer
  • 配置了通配符 dns
  • 1 个postgres 吊舱
  • 1 个ingress为 Traefik 配置的Web 服务器 pod

我想降低部署成本。大部分成本由 GCE 负载均衡器承担。有没有办法在 GCE 上使用公共 IP 地址而不是负载均衡器?如果是这样,我是否可以使用分配给集群的 IP 地址(而不是保留静态 IP)?

换句话说,有没有办法在没有负载均衡器的情况下使用 GCE 将临时 IP 绑定到 Kubernetes 服务?

是否有任何其他配置我可以做不同的事情来降低 GCE 的总体成本?

load-balancing google-compute-engine kubernetes google-kubernetes-engine

14
推荐指数
1
解决办法
3670
查看次数

如何增加有状态集中的磁盘大小

我正在 Kubernetes 中管理 Elasticsearch 部署。我看到磁盘存储已接近满,所以我想增加持久卷的大小。

我想在有状态集中更改此值:

spec.?volumeClaimTemplates[0].spec.resources.requests.storage : "10Gi"

但是当我使用 Kubernetes 仪表板执行此操作时,我收到以下消息:

内部服务器错误

StatefulSet.apps "es-cluster" 无效:spec: Forbidden: 禁止更新 statefulset > spec,用于除 'replicas'、'template' 和 'updateStrategy' 以外的字段。

这让我觉得我必须删除我现有的 Stateful Set 并部署一个新的。

是否可以在不中断服务或丢失数据的情况下增加 per-pod 磁盘存储?

其他细节

我有多个 Elasticsearch 数据 pod,并且正在使用副本计数 = 1,所以如果我能够将它们取下并一次升级一个 pod 的磁盘存储,应该不会有问题。鉴于上述限制,我只是不知道如何做到这一点。

amazon-ebs elasticsearch kubernetes

14
推荐指数
4
解决办法
2万
查看次数