我们刚刚收到一封来自 GCP 的电子邮件,通知我们我们的集群目前正在使用已弃用的 Beta API,我们需要升级到最新的 API 版本。
我们有 3 个集群在多个命名空间中运行多个资源,因此必须遍历所有集群来检测哪些资源已过时会有点痛苦。
我们控制的服务、部署、horizontalpodautoscalers、poddisruptionbudgets 等,这些都已经更新了。
但我们有很多服务的清单文件是自动生成的,比如 Halyard 生成的 Spinnaker 服务,或者 Elastic Operator 生成的 ElasticSearch 等。
有什么方法可以按 API 版本过滤所有资源,或者有什么方法可以检测所有命名空间中已弃用的资源?
我正在尝试通过 python 客户端在 Bigquery 创建一个表。该文档用于bigquery.SchemaField('name', 'TYPE')定义一个字段。尽管它似乎不适用于ARRAYS或STRUCTS。这是我试图创建的 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) 我有一个 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
我在我的Django应用程序上有一个函数,我执行一些Queryset操作并将其结果设置为Memcache.由于它是一种功能,因此必须具有一般用途.所以为了使它可重用,我传递一个dict作为参数filter和exclude动作.这是功能:
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) 我们有两个开发团队致力于产品的不同部分。两个团队共享同一个集群,每个团队都将其工作版本的代码部署在不同的命名空间上,这样他们就可以在不干扰对方的情况下进行测试。
现在我们希望每个团队都有自己的测试环境预算。为了做到这一点,我们需要能够了解每一项的使用成本。据我对 GCP 的了解,跟踪每个资源的成本的唯一方法是给它们附加标签。我们已经拥有的这个开发集群有一个 GKE 标签,该标签在集群创建的所有资源之间共享。
问题在于,由于两个团队使用相同的集群,因此他们共享相同的 GKE 标签。因此,我希望每个团队都有一个节点池,每个团队都有特定的标签。
我找不到任何可以让我这样做的东西,所以决定在这里提问。
为每个团队创建单独的集群就显得太过分了。
你们知道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) 我有一个 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”的每个子页面中设置了 …
我有一个单一的 gunicorn 工作进程正在运行以读取一个巨大的 excel 文件,该文件最多需要 5 分钟并使用 4GB 的 RAM。但是在请求完成处理后,我在系统监视器上注意到它仍然永远分配 4GB 的 RAM。关于如何释放内存的任何想法?
我们聘请了一名安全顾问对我们应用程序的公共 IP (Kubernetes Loadbalancer) 进行渗透测试,并编写一份关于我们的安全漏洞和避免这些漏洞所需的测量的报告。他们的报告警告我们,我们启用了 TCP 时间戳,并且从我读到的有关该问题的信息来看,这将允许攻击者预测机器的启动时间,从而能够对其进行控制。
我还读到 TCP 时间戳对于 TCP 性能很重要,最重要的是,对于防止包装序列的保护。
但是由于我们在 GKE 上使用 Kubernetes,而 Nginx Ingress Controller 在它前面,我想知道这TCP Timestamp件事对于那个上下文是否真的很重要。我们甚至应该关心吗?如果是这样,它是否真的会使我的网络由于缺乏包装序列保护而容易受到攻击?
关于另一个问题的 TCP 时间戳的更多信息:TCP 时间戳 赋予什么好处?
我有两个运行同一个应用程序的服务器环境。第一个,我打算放弃,是一个有很多限制的标准 Google App Engine 环境。第二个是使用 Gunicorn 运行我的 Python 应用程序的 Google Kubernetes 集群。
在第一台服务器上,我可以向应用程序发送多个请求,它会同时响应多个请求。我在两种环境中对应用程序运行两批同时请求。在 Google App Engine 中,第一批和第二批同时响应,第一批不会阻止第二批。
在 Kubernetes 中,服务器只同时响应 6 个,第一个批次阻止第二个。我读过一些关于如何使用 gevent 或多线程实现 Gunicorn 并发的文章,他们都说我需要 CPU 内核,但问题是无论我投入多少 CPU,限制仍然存在。我已经尝试了从 1VCPU 到 8VCPU 的 Google 节点,它没有太大变化。
你们能给我任何关于我可能遗漏的想法吗?也许谷歌集群节点限制?
如您所见,第二批仅在第一批开始完成后才开始响应。
我刚刚开始使用 BigQuery,我想知道我是否可以在本机使用数组,还是应该改用 json 字符串。大查询中未将数组数据类型列为受支持的类型。我需要将用户对象的数组(列表)保存到 BigQuery。
目前最好的方法是什么?
我打算使用 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
python ×5
kubernetes ×4
django ×2
gunicorn ×2
concurrency ×1
containers ×1
django-cms ×1
label ×1
nginx ×1
security ×1
tcp ×1
url ×1