小编moh*_*08p的帖子

Node.js 在 Kubernetes 上横向扩展

我使用 Docker 在 node.js 上构建了一个应用程序,但我不确定如何在 Kubernetes 集群上扩展它,以便充分利用我的集群硬件。

从性能的角度来看,以下哪个更好:

集群我的节点应用程序并根据需要运行尽可能多的容器

或者

只需根据需要运行尽可能多的容器而无需集群?

当我说集群时,我的意思是这个https://nodejs.org/api/cluster.html

我的应用程序是一个由 mongoDB 支持的简单 CRUD Api。我们估计它将有 1000 个并发用户。我们的集群有 3 个节点。

horizontal-scaling node.js docker kubernetes

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

Docker错误 - 无法删除容器

我最近没有升级Docker.我曾经能够毫无错误地删除容器.我现在一直都这样:

docker rm -f 05344fa394a4

Error response from daemon: driver "overlay" failed to remove root filesystem for 
05344fa394a43e5080deb1a43fdeab3a6f141038069f1a49209e29ec8f06a20c: 
remove /var/lib/docker/overlay/c9eb21a91ae1a37a121855a1ef65a89593994dc036affa9ff295b59b4eca1af5/merged: 
device or resource busy
Run Code Online (Sandbox Code Playgroud)

我基本上必须重新启动(systemctl restart docker不修复)才能成功删除并继续.任何人都对可能出错的东西有任何见解?

root和Docker 17.06 一样在Centos 7.3上运行.一切都在/var/lib/docker/var/lib/docker/overlay它的拥有者root:root是保护700 /var/lib/docker/network实际上是750]

docker docker-container

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

从Pod连接到其他Pod

基本上,我有一个Deployment,它创建3个可自动缩放的容器:PHP-FPM,NGINX和包含应用程序的容器,所有这些容器都设置有机密,服务和入口。该应用程序还在PHP-FPM和NGINX之间共享该项目,因此已全部完成。

由于我想使用K8s进行更多探索,因此我决定使用Redis创建一个Pod,该Pod还可以安装永久性磁盘(但这并不重要)。我还为redis创建了一个服务,如果我通过SSH进入Redis容器并运行,则一切工作都很好redis-cli

有趣的是,该项目无法连接到Redis所在的Pod。我了解,各个Pod之间的容器共享相同的“本地”网络,可以使用进行访问localhost

如何将我的项目连接到在其他Pod中运行,可独立扩展的Redis服务器?Redis服务出了什么问题?


我的Redis服务是这样的:

apiVersion: v1
kind: Service
metadata:
  name: redis-service
spec:
  ports:
  - port: 6379
    targetPort: 6379
  selector:
    app: redis
Run Code Online (Sandbox Code Playgroud)

我的Redis Pod由部署配置文件提供支持(我不一定会对其进行扩展,但我会期待它):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  labels:
    app: redis
spec:
  selector:
    matchLabels:
      app: redis
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: redis
    spec:
      volumes:
        - name: redis-persistent-volume
          persistentVolumeClaim:
            claimName: redis-pvc
      containers:
        - image: redis:4.0.11
          command: ['redis-server']
          name: redis
          imagePullPolicy: Always
          resources:
            limits:
              cpu: 250m
              memory: 512Mi
            requests:
              cpu: 250m
              memory: 512Mi …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-pod

6
推荐指数
2
解决办法
5711
查看次数

监控 Kubernetes 节点上的 pod 资源使用情况

用例/问题

我负责维护一个有 40 个节点的 kubernetes 集群(分为 2 个区域)。我们有大约 100 个微服务和平台东西,比如在这个集群中运行的 Kafka 代理。所有微服务都定义了资源请求和限制。然而,它们中的大多数都是可突发的,并且没有保证的 RAM。在我们的集群中部署服务的开发人员定义的限制远大于请求(参见下面的示例),最终导致各个节点上的大量 pod 被驱逐。不过,我们仍然希望在我们的服务中使用可爆发资源,因为我们可以使用可爆发资源来节省资金。因此,我需要更好地监控每个节点上运行的所有 pod 的可能性,其中包含以下信息:

  • 节点名称和 CPU / RAM 容量
  • 所有 pod 名称加上
    • pod 的资源请求和限制
    • pod 当前的 cpu 和 ram 使用情况

通过这种方式,我可以轻松识别两种有问题的服务:

案例 A:微服务只是设置了巨大的资源限制,因为开发人员只是在测试东西或者懒得去测试/监控他的服务

resources:
  requests:
    cpu: 100m
    ram: 500Mi
  limits:
    cpu: 6
    ram: 20Gi
Run Code Online (Sandbox Code Playgroud)

案例B:同一节点上的服务太多,资源限制设置不准确(例如500Mi,但服务一直使用1.5Gi RAM)。这种情况发生在我们身上,因为 Java 开发人员没有注意到 Java 垃圾收集器只会在使用 75% 的可用 RAM 时才开始清理。

我的问题:

我如何才能正确监控这一点,从而识别错误配置的微服务,以防止出现此类驱逐问题?在较小的规模下,我可以简单地运行kubectl describe nodeskubectl top pods手动计算出来,但在这种规模下不再起作用。

注意:我找不到此问题的任何现有解决方案(包括使用 kube 指标和类似的 prometheus + grafana 板)。我认为这是可能的,但在 Grafana 中可视化这些东西真的很难。

monitoring kubernetes

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

无法删除通过 Docker 创建的文件

我使用 docker 镜像使用这个命令在我们学校的服务器上运行一个程序。

 docker run -t -i -v /target/new_directory 990210oliver/mycc.docker:v1 /bin/bash
Run Code Online (Sandbox Code Playgroud)

在我运行它之后,它在我的帐户上创建了一个名为 new_directory 的 firectory。现在我没有删除或修改文件的权限。

如何删除此目录?

docker docker-volume

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

docker - 驱动程序“devicemapper”在容器中的进程被终止后未能删除根文件系统

我在 Redhat 上使用 Docker 版本 17.06.0-ce 和 devicemapper 存储。我正在启动一个运行长期服务的容器。容器内的主进程有时会因任何原因而死亡。我收到以下错误消息。

/bin/bash: line 1: 40 Killed python -u scripts/server.py start go

我希望容器退出并由 docker 重新启动。但是 docker 永远不会退出。如果我手动执行,则会出现以下错误:

来自守护进程的错误响应:驱动程序“devicemapper”未能删除根文件系统。

谷歌搜索后,我尝试了很多东西:

docker rm -f <container>
rm -f <pth to mount>
umount <pth to mount>
Run Code Online (Sandbox Code Playgroud)

设备中的所有结果都处于忙碌状态。现在唯一的补救办法是重新启动主机系统,这显然不是一个长期的解决方案。

有任何想法吗?

redhat device-mapper docker

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

在部署更新期间忽略pod反关联

想象一下在主节点节点设置中,您在节点上部署具有pod反关联性的服务:部署的更新将导致创建另一个pod但调度程序无法调度,因为两个节点都具有反节点亲和力.

问:如何更灵活地设置反亲和力以允许更新?

affinity:
   podAntiAffinity:
     requiredDuringSchedulingIgnoredDuringExecution:
     - labelSelector:
         matchExpressions:
         - key: app
           operator: In
           values:
           - api
     topologyKey: kubernetes.io/hostname
Run Code Online (Sandbox Code Playgroud)

有错误

No nodes are available that match all of the following predicates:: MatchInterPodAffinity (2), PodToleratesNodeTaints (1).
Run Code Online (Sandbox Code Playgroud)

kubernetes

5
推荐指数
2
解决办法
587
查看次数

Docker将一个容器的目录挂载到另一个容器

我有一个容器 Container-A,其中包含目录 /opt/test/data,其中包含在构建映像期间创建的文件。现在我想将 /opt/test/data(container-a 目录) 共享给 Container-B,因为它需要在其生命周期中使用这些文件。我尝试过以下选项

docker run -it -d -v shareddata:/opt/test/data --name container-a test
Run Code Online (Sandbox Code Playgroud)

然后运行容器-B

docker run -it --volumes-from container-a --name container-b test-prod:latest
Run Code Online (Sandbox Code Playgroud)

数据已共享,但它在主机上创建一个命名卷共享数据,其中包含容器 a 的 /opt/test/data 目录的重复数据。

我尝试了另一种选择,即创建名称卷数据并将其安装在容器 a 中。然后我在已安装的卷上创建了 /opt/test/data 的符号链接,如下所示

ln -s /data/data /opt/test/data
Run Code Online (Sandbox Code Playgroud)

现在已将 /data 卷安装到容器 b,但符号链接在容器 b 上不起作用,因为它显示为损坏的链接。

有没有一种方法可以将容器 a 目录共享到容器 b 而不复制数据,因为我们希望将静态且相当大的数据(大约 2.5G)保留到一个图像,然后一个实例继续运行,该实例在多个容器之间共享测试产品图像?

docker dockerfile docker-volume

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

如何自动删除未使用的docker镜像和容器?

有没有办法指示docker swarm自动运行垃圾收集并删除所有悬空图像和容器?我运行docker stack rm STACK_NAME并重新部署堆栈,但这会保留未使用的对象.我知道我可以运行docker prune来进行清理,但有没有办法指示docker自动执行此操作?

PS我尝试根据这篇文章设置历史保留限制

docker docker-swarm

5
推荐指数
3
解决办法
3771
查看次数

设置 https 访问 nginx docker 容器

我希望能够通过https://192.168.99.100上的 https 访问 nginx docker 容器。到目前为止,我已经完成了以下工作:

Dockerfile

FROM nginx

COPY certs/nginx-selfsigned.crt /etc/ssl/certs/
COPY certs/nginx-selfsigned.key /etc/ssl/private/

COPY default-ssl.conf /etc/nginx/sites-available/default

EXPOSE 443
Run Code Online (Sandbox Code Playgroud)

我在文件夹中有相应的证书文件certs

default-ssl.conf

server {
    listen       80;
    listen       443 ssl;
    server_name  localhost;
    ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
    ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
Run Code Online (Sandbox Code Playgroud)

docker-compose.yaml

version: '3'

services:
  nginx:
    image: mynamespace/nginx_pma
    container_name: nginx_pma
    build:
      context: .
    ports: 
      - 443:443 …
Run Code Online (Sandbox Code Playgroud)

https nginx docker

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