小编Pra*_*shi的帖子

部署到 AWS 时,gunicorn 上的关键工作人员超时

我有一个使用 gunicorn 服务器的 Flask Web 应用程序,并且我使用了 gevent 工作程序类,因为以前它帮助我[CRITICAL] WORKER TIMEOUT之前没有遇到问题,但是自从我将它部署到 ELB 后面的 AWS 上后,我似乎又遇到了这个问题.

我以前试过eventlet工人班,但gevent没用,但在本地做了

这是我用作 Dockerfile 入口点的 shell 脚本:

gunicorn -b 0.0.0.0:5000 --worker-class=gevent --worker-connections 1000 --timeout 60 --keep-alive 20 dataclone_controller:app

当我检查 Pod 上的日志时,这是唯一打印出来的信息:

[2019-09-04 11:36:12 +0000] [8] [INFO] Starting gunicorn 19.9.0
   [2019-09-04 11:36:12 +0000] [8] [INFO] Listening at: 
   http://0.0.0.0:5000 (8)
   [2019-09-04 11:36:12 +0000] [8] [INFO] Using worker: gevent
   [2019-09-04 11:36:12 +0000] [11] [INFO] Booting worker with pid: 11
   [2019-09-04 11:38:15 +0000] [8] [CRITICAL] …
Run Code Online (Sandbox Code Playgroud)

python amazon-web-services flask gunicorn dockerfile

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

由于 GUEST_MOUNT_CONFLICT 退出:启动 minikube 时

我正在尝试使用kubernetes进行本地部署minikube,我想在主机和 Pod 之间安装共享目录。为此,我尝试将目录安装到minikube. 但我已经运行了 minikube,但几乎没有部署在运行。我删除了它们。但是每次我用 mount 重新启动 minikube 时都会出现以下错误

$ minikube start --mount-string="/var/log:/log" --mount
* minikube v1.14.2 on Ubuntu 18.04
* Using the docker driver based on existing profile
* Starting control plane node minikube in cluster minikube
* Restarting existing docker container for "minikube" ...

X Exiting due to GUEST_MOUNT_CONFLICT: Sorry, docker does not allow mounts to be changed after container creation (previous mount: '', new mount: '/var/log:/log)'
Run Code Online (Sandbox Code Playgroud)

kubectl get all 的输出是

kubectl …
Run Code Online (Sandbox Code Playgroud)

docker kubernetes minikube

8
推荐指数
2
解决办法
5431
查看次数

在 python 中使用 --- 解析 yaml 文件

我们如何解析一个包含多个配置且---在 python 中用 分隔的文件。
我的配置文件看起来像

文件名 temp.yaml

%YAML 1.2
---
name: first
cmp:
- Some: first
  top:
    top_rate: 16000
    audio_device: "pulse"

---
name: second
components:
- name: second
  parameters:
    always_on: true
    timeout: 200000
Run Code Online (Sandbox Code Playgroud)

当我读它时

import yaml
with open('./temp.yaml', 'r') as f:
    temp = yaml.load(f)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

 temp = yaml.load(f)
Traceback (most recent call last):
  File "temp.py", line 4, in <module>
    temp = yaml.load(f)
  File "/home/pranjald/.local/lib/python3.6/site-packages/yaml/__init__.py", line 114, in load
    return loader.get_single_data()
  File "/home/pranjald/.local/lib/python3.6/site-packages/yaml/constructor.py", line 41, in get_single_data
    node = …
Run Code Online (Sandbox Code Playgroud)

python yaml

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

从arm平台构建镜像时,Docker buildx不使用缓存

我正在我的amd 机器arm64上构建图像,一切工作正常,除了每当我尝试构建图像时,它都会从头开始构建它。x86_64docker buildxarm

重现步骤

  1. 创建一个 docker 构建器
    export DOCKER_CLI_EXPERIMENTAL=enabled
    docker buildx create --name buildkit
    docker buildx use buildkit
    docker buildx inspect --bootstrap
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用命令构建docker镜像
    docker buildx build . --platform linux/arm64 -t test-image:p-arm64 -f ./arm64.Dockerfile
    
    Run Code Online (Sandbox Code Playgroud)

当我多次构建它时,每次构建都会执行所有步骤20-30 min。我想通过缓存来最小化这个时间。

这就是我的 dockerfile 的样子

FROM python:3.7-slim

USER root

RUN apt-get update && \
    apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common \
    gnupg \
    g++ \
    && rm -rf /var/lib/apt/lists/*

RUN curl -fsSL https://download.docker.com/linux/debian/gpg |  gpg …
Run Code Online (Sandbox Code Playgroud)

linux docker buildx

5
推荐指数
0
解决办法
658
查看次数

使用 root log python 分离本地记录器

我正在 python 中使用日志记录模块。在我的main.py文件中,我使用两个记录器。

  1. 根记录器(从同一目录中的多个模块获取日志)
  2. 本地记录器(记录特定信息)

我希望 的信息local logger与 分开root logger。但是当我创建单独的记录器时。的信息local logger也存在于根记录器信息中。

这是我如何执行此操作的示例

# main.py
import logging

def setup_logger(filename, name = ''):
    if name == '':
        logging.basicConfig(filename=filename,
                            format='%(asctime)s %(funcName)s %(levelname)s %(message)s',
                            filemode='a')
        logger = logging.getLogger()
    else:
        """
        handler = logging.FileHandler(filename, mode = 'a')
        handler.setFormatter(logging.Formatter('%(asctime)s %(funcName)s %(levelname)s %(message)s'))
        logger = logging.getLogger(name)
        logger.addHandler(handler)
        """
        formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
        handler = logging.FileHandler(filename)
        handler.setFormatter(formatter)

        logger = logging.getLogger(name)
        logger.setLevel(logging.DEBUG)
        logger.addHandler(handler)

        return logger
    logger.setLevel(logging.DEBUG)
    return logger

logger = …
Run Code Online (Sandbox Code Playgroud)

python logging

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

如何远程访问部署在minikube中的应用程序

我正在使用kubernetesminikube. 使用命令部署后

minikube service helloworld-all-service --url
Run Code Online (Sandbox Code Playgroud)

其中显示了一些URL访问应用程序。就像是

http://192.168.49.2:32474
Run Code Online (Sandbox Code Playgroud)

我要从同一网络上的另一台计算机访问该应用程序。我试过port-forwarding

kubectl port-forward service/helloworld-all-service 8080:8080
Run Code Online (Sandbox Code Playgroud)

这允许我使用 访问应用程序localhost:8080/myApp。但是当我尝试使用我的系统 IP 时,它不起作用10.14.77.88:8080/myApp。我在这里做错了什么

docker kubernetes minikube

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