小编Mau*_*cio的帖子

轻松检测 Kubernetes 上已弃用的资源

我们刚刚收到一封来自 GCP 的电子邮件,通知我们我们的集群目前正在使用已弃用的 Beta API,我们需要升级到最新的 API 版本。

我们有 3 个集群在多个命名空间中运行多个资源,因此必须遍历所有集群来检测哪些资源已过时会有点痛苦。

我们控制的服务、部署、horizo​​ntalpodautoscalers、poddisruptionbudgets 等,这些都已经更新了。

但我们有很多服务的清单文件是自动生成的,比如 Halyard 生成的 Spinnaker 服务,或者 Elastic Operator 生成的 ElasticSearch 等。

有什么方法可以按 API 版本过滤所有资源,或者有什么方法可以检测所有命名空间中已弃用的资源?

kubernetes google-kubernetes-engine kube-apiserver

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

Bigquery python SchemaField() 与结构数组

我正在尝试通过 python 客户端在 Bigquery 创建一个表。该文档用于bigquery.SchemaField('name', 'TYPE')定义一个字段。尽管它似乎不适用于ARRAYSSTRUCTS。这是我试图创建的 STRUCTS 字段的数组:

bigquery.SchemaField('owners', 'ARRAY<STRUCT<emailAddress STRING, displayName STRING>>', 'REPEATABLE'),
Run Code Online (Sandbox Code Playgroud)

如果我使用上面的字段定义,我会收到以下 API 错误:

400 POST https://www.googleapis.com/bigquery/v2/projects/import-sheet/datasets/sheetgo/tables: Invalid value for: ARRAY<STRUCT<emailAddress STRING, displayName STRING>> is not a valid value
Run Code Online (Sandbox Code Playgroud)

整个代码:

schema = [
            bigquery.SchemaField('user', 'STRING'),
            bigquery.SchemaField('id', 'STRING'),
            bigquery.SchemaField('service_origin', 'STRING'),
            bigquery.SchemaField('name', 'STRING'),
            bigquery.SchemaField('mimeType', 'STRING'),
            bigquery.SchemaField('createdAt', 'DATETIME'),
            bigquery.SchemaField('ownedByMe', 'BOOLEAN'),
            bigquery.SchemaField('owners', 'ARRAY<STRUCT<emailAddress STRING, displayName STRING>>', 'REPEATABLE'),
            bigquery.SchemaField('parents', 'ARRAY<STRING>', 'REPEATABLE'),
            bigquery.SchemaField('teamDriveId', 'STRING'),
            bigquery.SchemaField('permissions', 'STRING'),
            bigquery.SchemaField('shared', 'BOOLEAN'),
            bigquery.SchemaField('writersCanShare', 'BOOLEAN'),
            bigquery.SchemaField('sharingUser', 'STRING'),
            bigquery.SchemaField('version', 'STRING'),
            bigquery.SchemaField('size', 'FLOAT'),
            bigquery.SchemaField('data_properties', …
Run Code Online (Sandbox Code Playgroud)

python google-bigquery

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

GKE Nginx Ingress Controller 前面的全局负载均衡器(HTTPS 负载均衡器)

我有一个 GKE 集群,它使用 Nginx Ingress Controller 作为其入口引擎。目前,当我设置 Nginx Ingress Controller 时,我定义了一项服务kind: LoadBalancer并将其指向先前在 GCP 上保留的外部静态 IP。问题是它只绑定到区域静态 IP 地址(如果我没记错的话,是 L4 负载均衡器)。我想要一个全局负载均衡器。

我知道我可以通过使用 GKE 入口控制器而不是 Nginx 入口控制器来实现这一点。但我仍然想使用 Nginx Ingress,因为它具有强大的注释功能,例如根据条件重写标头等;GKE Ingress 注释不可用的内容。

最后,有没有办法将全局负载均衡器与 nginx 入口控制器结合起来,或者将全局负载均衡器放在 Nginx 创建的 L4 负载均衡器前面?

我们需要有全局负载均衡器才能受到 Cloud Armor 的保护。

nginx google-kubernetes-engine nginx-ingress google-cloud-armor gke-networking

8
推荐指数
1
解决办法
3565
查看次数

Django使用dict参数过滤OR条件

我在我的Django应用程序上有一个函数,我执行一些Queryset操作并将其结果设置为Memcache.由于它是一种功能,因此必须具有一般用途.所以为了使它可重用,我传递一个dict作为参数filterexclude动作.这是功能:

def cached_query(key, model, my_filter=None, exclude=None, order_by=None, sliced=50):
    """
    :param key: string used as key reference to store on Memcached
    :param model: model reference on which 'filter' will be called
    :param my_filter: dictionary containing the filter parameters (eg.: {'title': 'foo', 'category': 'bar'}
    :param sliced: integer limit of results from the query. The lower the better, since for some reason Django Memcached
        won't store thousands of entries in memory
    :param exclude: dictionary containing the exclude parameters (eg.: …
Run Code Online (Sandbox Code Playgroud)

python django

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

将特定 GKE 标签(不是 Kubernetes 标签)添加到节点池

我们有两个开发团队致力于产品的不同部分。两个团队共享同一个集群,每个团队都将其工作版本的代码部署在不同的命名空间上,这样他们就可以在不干扰对方的情况下进行测试。

现在我们希望每个团队都有自己的测试环境预算。为了做到这一点,我们需要能够了解每一项的使用成本。据我对 GCP 的了解,跟踪每个资源的成本的唯一方法是给它们附加标签。我们已经拥有的这个开发集群有一个 GKE 标签,该标签在集群创建的所有资源之间共享。

问题在于,由于两个团队使用相同的集群,因此他们共享相同的 GKE 标签。因此,我希望每个团队都有一个节点池,每个团队都有特定的标签。

我找不到任何可以让我这样做的东西,所以决定在这里提问。

为每个团队创建单独的集群就显得太过分了。

label google-cloud-platform google-kubernetes-engine

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

ClusterIP 服务是否在副本 Pod 之间分发请求?

你们知道ClusterIP服务是否在目标部署副本之间分配工作负载吗?

我有一个后端的 5 个副本,一个 ClusterIP 服务选择了它们。我还有另外 5 个 nginx pod 副本指向这个后端部署。但是当我运行一个繁重的请求时,后端停止响应其他请求,直到它完成繁重的请求。

更新

这是我的配置:

注意:我已经替换了一些与公司相关的信息。

内容提供者部署:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name:  frontend
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: webapp
        tier: frontend
    spec:
      containers:
      - name:  python-gunicorn
        image:  <my-user>/webapp:1.1.2
        command: ["/env/bin/gunicorn", "--bind", "0.0.0.0:8000", "main:app", "--chdir", "/deploy/app", "--error-logfile", "/var/log/gunicorn/error.log", "--timeout", "7200"]
        resources:
          requests:
            # memory: "64Mi"
            cpu: "0.25"
          limits:
            # memory: "128Mi"
            cpu: "0.4"
        ports:
        - containerPort: 8000
        imagePullPolicy: Always
        livenessProbe:
          httpGet:
            path: /login
            port: 8000
          initialDelaySeconds: 30
          timeoutSeconds: …
Run Code Online (Sandbox Code Playgroud)

kubernetes

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

Django-cms Apphook url 未加载

我有一个 django-cms 项目,其中包含一个名为 core 的应用程序。在核心内部,我创建了一个文件“cms_app.py”,如下所示:

# -*- coding: utf8 -*-
from cms.app_base import CMSApp
from cms.apphook_pool import apphook_pool
from django.utils.translation import ugettext_lazy as _

class CoreApphook(CMSApp):
    name = _(u"Core Apphook")
    urls = ["core.urls"]

apphook_pool.register(CoreApphook)
Run Code Online (Sandbox Code Playgroud)

在我的 core/urls.py 中,我有以下代码:

# -*- coding: utf8 -*-
from django.conf.urls.defaults import patterns, include, url

urlpatterns = patterns('',

        # URLS refrentes ao apphook CoreApphook
        url(r'^$', 'noticia.views.ultimas_noticias'),
        url(r'^noticias/$', 'noticia.views.ultimas_noticias'),
        url(r'^noticias/(?P<categoria>[\w\d-]+)/$', 'noticia.views.noticias_categoria'),
        url(r'^noticias/(?P<categoria>[\w\d-]+)/(?P<pagina>\d+)/$', 'noticia.views.noticias_categoria_paginated'),
        url(r'^noticias/(?P<categoria>[\w\d-]+)/(?P<subcategoria>[\w\d-]+)/(?P<titulo>[\w\d-]+)/$', 'noticia.views.noticia'),
        url(r'^paginacao/noticias/$', 'noticia.views.noticias_categoria_paginated'),
    )
Run Code Online (Sandbox Code Playgroud)

我试图达到这个观点:

url(r'^noticias/(?P<categoria>[\w\d-]+)/(?P<subcategoria>[\w\d-]+)/(?P<titulo>[\w\d-]+)/$', 'noticia.views.noticia'),
Run Code Online (Sandbox Code Playgroud)

通过使用这个网址:

http://127.0.0.1:8000/noticias/filmes/acao/lol-e-poka-zuera/
Run Code Online (Sandbox Code Playgroud)

但是文件 urls.py 没有被 Apphook 加载。我已经在“Noticias”和“Noticias”的每个子页面中设置了 …

python django url django-cms

5
推荐指数
1
解决办法
2093
查看次数

Gunicorn 工人在请求后不会压缩内存

我有一个单一的 gunicorn 工作进程正在运行以读取一个巨大的 excel 文件,该文件最多需要 5 分钟并使用 4GB 的 RAM。但是在请求完成处理后,我在系统监视器上注意到它仍然永远分配 4GB 的 RAM。关于如何释放内存的任何想法?

python gunicorn

5
推荐指数
1
解决办法
2342
查看次数

我应该为 Kubernetes 禁用 TCP 时间戳吗?

我们聘请了一名安全顾问对我们应用程序的公共 IP (Kubernetes Loadbalancer) 进行渗透测试,并编写一份关于我们的安全漏洞和避免这些漏洞所需的测量的报告。他们的报告警告我们,我们启用了 TCP 时间戳,并且从我读到的有关该问题的信息来看,这将允许攻击者预测机器的启动时间,从而能够对其进行控制。

我还读到 TCP 时间戳对于 TCP 性能很重要,最重要的是,对于防止包装序列的保护。

但是由于我们在 GKE 上使用 Kubernetes,而 Nginx Ingress Controller 在它前面,我想知道这TCP Timestamp件事对于那个上下文是否真的很重要。我们甚至应该关心吗?如果是这样,它是否真的会使我的网络由于缺乏包装序列保护而容易受到攻击?

关于另一个问题的 TCP 时间戳的更多信息:TCP 时间戳 赋予什么好处?

security containers tcp kubernetes nginx-ingress

5
推荐指数
1
解决办法
889
查看次数

Gunicorn 一次不响应超过 6 个请求

给你一些背景:

我有两个运行同一个应用程序的服务器环境。第一个,我打算放弃,是一个有很多限制的标准 Google App Engine 环境。第二个是使用 Gunicorn 运行我的 Python 应用程序的 Google Kubernetes 集群。

并发

在第一台服务器上,我可以向应用程序发送多个请求,它会同时响应多个请求。我在两种环境中对应用程序运行两批同时请求。在 Google App Engine 中,第一批和第二批同时响应,第一批不会阻止第二批。

在 Kubernetes 中,服务器只同时响应 6 个,第一个批次阻止第二个。我读过一些关于如何使用 gevent 或多线程实现 Gunicorn 并发的文章,他们都说我需要 CPU 内核,但问题是无论我投入多少 CPU,限制仍然存在。我已经尝试了从 1VCPU 到 8VCPU 的 Google 节点,它没有太大变化。

你们能给我任何关于我可能遗漏的想法吗?也许谷歌集群节点限制?

Kubernetes 响应瀑布

如您所见,第二批仅在第一批开始完成后才开始响应。

在此处输入图片说明

App Engine 响应瀑布

在此处输入图片说明

python concurrency gunicorn kubernetes

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

将数组保存到 BigQuery

我刚刚开始使用 BigQuery,我想知道我是否可以在本机使用数组,还是应该改用 json 字符串。大查询中未将数组数据类型列为受支持的类型。我需要将用户对象的数组(列表)保存到 BigQuery。

目前最好的方法是什么?

google-bigquery

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

Gcloud LoadBalancer:无需停机即可更改 Google 托管证书

我打算使用 Gcloud 托管证书。它的工作方式是,我已经有一个由 Let's Encrypt 管理的自定义证书,该证书已分配给我的 LoadBalancer。现在我想切换到 Google 托管证书。为了实现这一点,我必须将域指向 LoadBalancer 的 IP,然后转到负载平衡组件页面,然后我必须在“证书”选项卡上创建 Google 托管证书,最后编辑 LoadBalancer 以更改其前端配置HTTPS 协议并选择新创建的证书。然后,只有到那时,GCP 才可以提供证书。问题是可能需要几分钟(例如 10 分钟)才能配置证书。在此期间,我的应用程序最终将丢失证书,并且浏览器将阻止它。这对我们来说不是可接受的情况。

因此,简而言之,我需要将 LoadBalancer 的证书替换为另一个尚未验证的证书,这将导致我的应用程序在配置它所需的时间内无法使用。理想的情况是首先配置证书,然后编辑 LoadBalancer 以将其与新证书绑定。

有什么办法可以实现这一点吗?否则,我仍然必须使用 Let's Encrypt 颁发证书,并在每次证书即将过期时手动替换它。

ssl-certificate google-cloud-platform google-cloud-networking google-cloud-load-balancer gcp-load-balancer

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