[英]Openshift - Run a basic container with alpine, java and jmeter
在 Openshift 环境 (Kubernetes v1.18.3+47c0e71) 中,我试图运行一个非常基本的容器,其中将包含:
我只希望它在容器中启动并运行,期望连接从命令行终端运行 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
这将启动 Pod 并立即运行/bin/sleep infinite
命令,导致主进程成为永远不会终止的sleep
进程。 您的容器现在将无限期运行。 现在您可以使用oc rsh <name_of_the_pod
连接到容器并以交互方式运行任何您想要的东西(例如jmeter
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.