Articles of kubernetes

用GCE和堆栈驱动程序跟踪日志

我有一个正在运行的Kubernetes集群,它将堆栈日志文件聚合到堆栈驱动器中,并且想要在命令行上尾部聚合日志。 但到目前为止,我只能够在Web界面中查看JSONstreamfloat或通过gcloud beta logging read 'resource.type="container" jsonPayload.service:("my-service") timestamp >= "2017-06-22T16:00:00+02:00"' –format=json获取历史logging数据。 gcloud beta logging read 'resource.type="container" jsonPayload.service:("my-service") timestamp >= "2017-06-22T16:00:00+02:00"' –format=json 。 GCE中没有办法为我构build当前日志条目的聚合实时视图,就像从tail -f获得的一样?

Docker在生产中的持久存储 – 解决scheme和原因?

我最近开始为一家想要将其单一的SaaS应用程序打入集装箱化的微服务的公司工作。 不过,我很难掌握永久存储的基本部分。 为什么有这么多不同的竞争平台? Portworx,Rexray,StorageOS,Flocker,Inifint等 我的问题 为什么不能简单地启动一个NFS服务器,并使用分层文件夹结构作为存储后端? 使用这些工具时,您会获得什么收益? 在Docker中使用类似的东西有多危险? 在基于docker的环境中造成灾难性数据丢失的常见原因是什么? 你会推荐什么持久存储解决scheme,为什么? 我的公司运营一个SaaS平台。 数据有效负载很小(5kb-100kb)。 数据处理在资源消耗上是中小型的。 总体积中等,但仍在继续增长。 我们希望完全将我们的单一应用程序作为单独的集装箱式微服务移动到云端。 包括我们的数据仓库。 有点不相干,但是它与Kubernetes作为一个pipe弦乐队而不是Rancher / Cattle有什么联系? Kubernetes是不是过度devise了一个中小型平台? 除了单击安装,在Rancher中使用Kubernetes是否有优势? 感谢您的洞察力。 对不起,天真。 我欢迎所有文件和补充阅读材料。 编辑:对于上下文,我们使用Azure作为我们的基础云平台。

有没有可用的kubernetes掌舵模板的正则expression式函数?

我想实现一个编码当前应用程序版本的入口舵模板到URL中。 这将允许用户通过提供不同版本的应用程序来进行软迁移。 例: mydomain.org/1.0/applicationpath mydomain.org/1.1/applicationpath mydomain.org/2.0/applicationpath 为了防止在每次更新的入口手动configuration这个,我宁愿一个正则expression式自动确定major.minor版本。 该应用程序根据Semver 2.0.0进行修改,所以像\ d +。\ d +这样的模式应该可以完成这项工作。 我尝试了这样的事情: apiVersion: extensions/v1beta1 kind: Ingress spec: backend: serviceName: {{ .Release.Name }}-my-srv servicePort: 80 rules: – host: {{ .Values.app.ingress.host }} http: paths: – path: /{{ .Chart.AppVersion | regex \d+.\d+ }} 不幸的是我找不到正则expression式的函数。 有没有一个选项来实现这个头盔模板?

Kubernetes:如何通过部署保持安装存储来部署新版本的容器?

我在Azure中运行小型Kubernetes集群,因此可以使用Azure提供的摘要(如存储等)。 在它上面,我有一个在其中包含一个pod和几个容器的文件中定义的Deployment对象:一个应用程序容器,mongodb容器和其他一些容器。 应用程序从其映像中运行,其中也包括所有的二进制文件,因此只需要有mongo数据库(在secon cntainer中)可访问。 MongoDB将数据存储在持久卷上。 现在让我们想象我需要更改应用程序容器的图像。 我更改了部署定义文件,并执行kubectl apply -f deplyment.yml ,我可以看到Kubernetes尝试实施更改。 但问题是,它试图运行新的pod而不是旧的pod,并优雅地将负载路由到它上面,但是新的pod不能运行,因为卷被安装在旧的pod中,并且在旧的容器closures之前无法挂载。 所以这是问题。 我无法理解如何不中断地进行这样的升级。 应用程序无法进行负载平衡,因此无法运行多个副本并逐一升级。 而且我也担心,如果我删除了部署(将尝试有效地删除所有连接到的部分),那么卷也可能被删除。 有什么好方法吗?

在AWS上运行Kubernetes上的Kafka

我有以下情况: 3个节点实例遍布3个可用区域 6个在StatefulSets中使用AWS外部卷来运行Kafka数据的代理。 实例大小:m4.2xlarge EBS卷:st1 – 500 GiB 在Kubernetes资源级别没有限制请求和内存设置(不适合生产 – 必须设置资源限制)1个主题,6个分区,不复制。 与卡夫卡版本0.11.0一起使用librdkafka 生产者发送一个大小为100字节的消息 这里的命令是: kubectl exec -it kafka-kafka-librdkafka — examples/rdkafka_performance -P -t test -s 100 -b kafka-kafka-headless:9092 -X request.timeout.ms=900000 -X batch.num.messages=10000 -X queue.buffering.max.ms=1000 结果: % Sending messages of size 100 bytes % 500000 messages produced (50000000 bytes), 0 delivered (offset 0, 0 failed) in 1000ms: […]

NGINX与GCE Kubernetes入门课程

在Google Container Engine上设置Kubernetes入口时,您可以select入口类( gce或nginx )。 我意识到,GCE课程在Google云平台上提供负载平衡器,每个平台的费用约为20美元/月。 经过一番研究之后,我发现Google的负载均衡器比使用NGINX入口级别更好,至less在达到非常大的规模之前,我找不到任何普遍的理由。 事实上,GCE类似乎并不支持: 通过ingress.kubernetes.io/auth-url外部authentication 基本authentication NGINX入口内置的其他一些小function 我不知道使用GCE类与NGINX类入口有什么好处?

由于“进程/其他”,Rabbitmq内存不足

我使用rabbitmq:3.6.11-management docker镜像( https://hub.docker.com/_/rabbitmq/ )在kubernetes内运行rabbitmq。 看pipe理仪表板,“进程/其他”类别似乎有很多内存(比其他任何类别都多)。 我观察过几次节点溢出高位标记并排除所有消息,但“进程/其他”内存不会缩小,因此代理将保持不活动状态,直到手动重新启动该容器为止。 在失败的时候,内存图表看起来像这样: 内存不足 我使用rabbitmq作为许多Celery工作人员(大约30人)的后端,对默认的Celeryconfiguration没有特别的修改。 有没有人有更好的理解什么是使用这个内存的build议? 该文档对于这个特定类别的内容非常模糊。

在Google kubernetes负载均衡服务上显示端口80和443

我遵循Google 的留言板教程 ,并从中创build了我自己的configuration文件。 所以农场一切工作正常。 现在,我想从我的networking服务器端口公开端口80和443。 我知道如何在控制器configuration文件中执行此操作(请参阅下文),但不能在服务configuration文件中执行。 任何线索怎么做呢? 这是我的控制器configuration文件: { "id": "webservers-controller", "kind": "ReplicationController", "apiVersion": "v1beta1", "desiredState": { "replicas": 3, "replicaSelector": {"name": "webservers"}, "podTemplate": { "desiredState": { "manifest": { "version": "v1beta1", "id": "webservers-controller", "containers": [{ "name": "webservers", "image":"gcr.io/myapp/webservers:latest", "ports": [ {"name": "http-server", "containerPort": 80}, {"name": "https-server", "containerPort": 443} ] }] } }, "labels": { "name": "webservers" […]

POD意外重启

我的开发环境正在Google容器引擎上运行,以及由复制控制器创build的以下POD NAME READY STATUS RESTARTS AGE NODE couchdb-dev-ocbud 1/1 Running 3 13h cz5w couchdb-stage-8f9bn 1/1 Running 1 13h uqu4 etcd-1-rmwzy 1/1 Running 0 3d q0cz etcd-2-n4ckp 1/1 Running 8 3d uqu4 etcd-3-yzz2x 1/1 Running 0 3d yt9e mongodb-dev-ig9xo 1/1 Running 3 16h cz5w mysql-dev-rykih 1/1 Running 3 17h cz5w mysql-stage-n240p 1/1 Running 3 16h cz5w […]

通过VPN路由到ClusterIP

我有以下IP范围作为从Kubernetes群集的ClusterIP。 $ gcloud beta container clusters describe CLUSTER_NAME | grep servicesIpv4Cidr servicesIpv4Cidr: 10.86.240.0/20 我想允许通过VPN从我的DC访问这个IP范围。 将“远程对端IP地址”添加到我的DC的下一跳之后 我应该如何在GCE上创build路线? 根据gcloud compute routes create命令doc –next-hop-address,–next-hop-gateway,–next-hop-vpn-tunnel或–next-hop-instance中的一个必须与此命令一起提供。 如果我将其中一个NODE设置为–next-hop-instance ,那么如果这个NODEclosures了呢? 我怎样才能实现没有单点故障的路线?