繁体   English   中英

Openshift - 使用 alpine、java 和 jmeter 运行基本容器

[英]Openshift - Run a basic container with alpine, java and jmeter

在 Openshift 环境 (Kubernetes v1.18.3+47c0e71) 中,我试图运行一个非常基本的容器,其中将包含:

  • 高山(最新版本)
  • JDK 1.8
  • Jmeter 5.3

我只希望它在容器中启动并运行,期望连接从命令行终端运行 Jmeter CLI。

我已经让它在我本地的 Docker 发行版中完美运行。 这是 Dokerfile 的内容:

FROM alpine:latest

ARG JMETER_VERSION="5.3"
ENV JMETER_HOME /opt/apache-jmeter-${JMETER_VERSION}
ENV JMETER_BIN  ${JMETER_HOME}/bin
ENV JMETER_DOWNLOAD_URL https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-${JMETER_VERSION}.tgz

USER root

ARG TZ="Europe/Amsterdam"
RUN    apk update \
    && apk upgrade \
    && apk add ca-certificates \
    && update-ca-certificates \
    && apk add --update openjdk8-jre tzdata curl unzip bash \
    && apk add --no-cache nss \
    && rm -rf /var/cache/apk/ \
    && mkdir -p /tmp/dependencies  \
    && curl -L --silent ${JMETER_DOWNLOAD_URL} >  /tmp/dependencies/apache-jmeter-${JMETER_VERSION}.tgz  \
    && mkdir -p /opt  \
    && tar -xzf /tmp/dependencies/apache-jmeter-${JMETER_VERSION}.tgz -C /opt  \
    && rm -rf /tmp/dependencies

# Set global PATH such that "jmeter" command is found
ENV PATH $PATH:$JMETER_BIN

WORKDIR ${JMETER_HOME}

出于某种原因,当我使用先前上传到私有 Docker 映像注册表的确切配置的容器配置 Pod 时,它不起作用。

这是部署配置 (yaml) 文件(也是非常基本的):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jmeter
  namespace: myNamespace
  labels:
    app: jmeter
    group: myGroup
spec:
  selector:
    matchLabels:
      app: jmeter
  replicas: 1
  template:
    metadata:
      labels:
        app: jmeter
    spec:
      containers:
        - name: jmeter
          image: myprivateregistry.azurecr.io/jmeter:dev
          resources:
            limits:
              cpu: 100m
              memory: 500Mi
            requests:
              cpu: 100m
              memory: 500Mi
          imagePullPolicy: Always
      restartPolicy: Always
      imagePullSecrets:
        - name: myregistrysecret

不幸的是,我没有收到任何日志:

在此处输入图片说明

Pod 事件的屏幕截图:

在此处输入图片说明

不幸的是,无法访问容器的终端: 在此处输入图片说明

任何想法:

  • 如何获取更多日志?
  • 到底是怎么回事?

在您的本地机器上,您可能正在使用docker run -it <my_container_image>或类似的。 使用-it选项将在您的容器中运行交互式 shell,而无需您指定CMD ,并将保持该 shell 作为在容器中启动的主进程运行。 因此,通过使用此命令,您基本上已经指定了一个命令。

Kubernetes 期望容器映像包含一个在启动时运行的进程 ( CMD ),并且只要容器处于活动状态(例如 Web 服务器)就会运行。

在您的情况下,Kubernetes 正在启动容器,但您没有指定启动容器映像时会发生什么。 这会导致容器立即终止,这就是您在上面的事件中看到的。 因为您使用的是Deployment ,所以失败的 Pod 会一次又一次地重新启动。

一个可能的解决方法是在启动时在容器中运行sleep命令,方法是在 Pod 中指定一个command ,如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: command-demo
  labels:
    purpose: demonstrate-command
spec:
  containers:
  - name: command-demo-container
    image: alpine
    command: ["/bin/sleep", "infinite"]
  restartPolicy: OnFailure

Kubernetes 文档

这将启动 Pod 并立即运行/bin/sleep infinite命令,导致主进程成为永远不会终止的sleep进程。 您的容器现在将无限期运行。 现在您可以使用oc rsh <name_of_the_pod连接到容器并以交互方式运行任何您想要的东西(例如jmeter )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM