首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >kafka镜像构建kompose

kafka镜像构建kompose
EN

Stack Overflow用户
提问于 2017-04-20 07:04:01
回答 1查看 355关注 0票数 0

如何构建kafka镜像,然后通过Kompose工具将其部署到kubernetes?

我使用的是docker-compose.yml文件。它使用docker-compose来构建kafka镜像。但是当我们使用Kompose时,它将docker-compose.yml转换为kubernetes服务、pvc和部署,没有预先构建的映像会导致问题。

构建kafka镜像,然后在yml文件中引用它也会导致问题。最后,我无法装载卷。

我如何解决这些问题?谢谢

docker-compose.yml

代码语言:javascript
复制
    version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    build: .
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: myIP
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    links:
    - zookeeper:zk
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
  myApp:
    image: myAppImage
    ports:
      - "3904:3904"
      - "3905:3905"
    volumes:
      - /var/tmp/My.properties:/appl/myApp/bundleconfig/etc/appprops/My.properties
    depends_on:
      - zookeeper
      - kafka

下载-kafka.sh文件

代码语言:javascript
复制
    #!/bin/sh

mirror=$(curl --stderr /dev/null https://www.apache.org/dyn/closer.cgi\?as_json\=1 | jq -r '.preferred')
url="${mirror}kafka/${KAFKA_VERSION}/kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz"
wget -q "${url}" -O "/tmp/kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz"

start-kafka.sh

代码语言:javascript
复制
 #!/bin/bash

if [[ -z "$KAFKA_PORT" ]]; then
    export KAFKA_PORT=9092
fi
if [[ -z "$KAFKA_ADVERTISED_PORT" ]]; then
    export KAFKA_ADVERTISED_PORT=$(docker port `hostname` $KAFKA_PORT | sed -r "s/.*:(.*)/\1/g")
fi
if [[ -z "$KAFKA_BROKER_ID" ]]; then
    # By default auto allocate broker ID
    export KAFKA_BROKER_ID=1
fi
if [[ -z "$KAFKA_LOG_DIRS" ]]; then
    export KAFKA_LOG_DIRS="/kafka/kafka-logs-$HOSTNAME"
fi
if [[ -z "$KAFKA_ZOOKEEPER_CONNECT" ]]; then
    export KAFKA_ZOOKEEPER_CONNECT=$(env | grep ZK.*PORT_2181_TCP= | sed -e 's|.*tcp://||' | paste -sd ,)
fi

if [[ -n "$KAFKA_HEAP_OPTS" ]]; then
    sed -r -i "s/(export KAFKA_HEAP_OPTS)=\"(.*)\"/\1=\"$KAFKA_HEAP_OPTS\"/g" $KAFKA_HOME/bin/kafka-server-start.sh
    unset KAFKA_HEAP_OPTS
fi

if [[ -z "$KAFKA_ADVERTISED_HOST_NAME" && -n "$HOSTNAME_COMMAND" ]]; then
    export KAFKA_ADVERTISED_HOST_NAME=$(eval $HOSTNAME_COMMAND)
fi

for VAR in `env`
do
  if [[ $VAR =~ ^KAFKA_ && ! $VAR =~ ^KAFKA_HOME ]]; then
    kafka_name=`echo "$VAR" | sed -r "s/KAFKA_(.*)=.*/\1/g" | tr '[:upper:]' '[:lower:]' | tr _ .`
    env_var=`echo "$VAR" | sed -r "s/(.*)=.*/\1/g"`
    if egrep -q "(^|^#)$kafka_name=" $KAFKA_HOME/config/server.properties; then
        sed -r -i "s@(^|^#)($kafka_name)=(.*)@\2=${!env_var}@g" $KAFKA_HOME/config/server.properties #note that no config values may contain an '@' char
    else
        echo "$kafka_name=${!env_var}" >> $KAFKA_HOME/config/server.properties
    fi
  fi
done

if [[ -n "$CUSTOM_INIT_SCRIPT" ]] ; then
  eval $CUSTOM_INIT_SCRIPT
fi


KAFKA_PID=0

# see https://medium.com/@gchudnov/trapping-signals-in-docker-containers-7a57fdda7d86#.bh35ir4u5
term_handler() {
  echo 'Stopping Kafka....'
  if [ $KAFKA_PID -ne 0 ]; then
    kill -s TERM "$KAFKA_PID"
    wait "$KAFKA_PID"
  fi
  echo 'Kafka stopped.'
  exit
}


# Capture kill requests to stop properly
trap "term_handler" SIGHUP SIGINT SIGTERM
create-topics.sh &
$KAFKA_HOME/bin/kafka-server-start.sh $KAFKA_HOME/config/server.properties &
KAFKA_PID=$!
EN

回答 1

Stack Overflow用户

发布于 2017-04-25 14:45:23

图像问题

步骤1:执行docker-compose build,您将拥有一个可用于在Kubernetes上部署的kafka镜像。

记下上面步骤中的docker镜像的名称,因为这是下面的步骤中需要的。

步骤2:您必须更改kafka服务中的docker-compose文件,以包含您在上面给出的图像名称。这是kompose中的一个issue,其中它应该会出错,因为没有给出镜像名称,并且kompose不能在生成的Kubernetes配置中神奇地给出一些镜像名称。

因此,将其更改为如下所示

代码语言:javascript
复制
  kafka:
    build: .
    image: docker.io/username/mykafka:0.1
    ports:
      - "9092:9092"

kompose Step3Kubernetes:添加镜像名称后,您将拥有一个有效的配置,该配置由kompose使用您提供的镜像名称生成。

现在,您可以尝试部署应用程序,Kubernetes将能够很好地提取映像。

如果您在单节点集群(如minikube )中执行此操作,则可以按照本blog中提到的方法进行操作。

卷问题

使用Kubernetes的

  • 不建议进行主机挂载
  • 而且我不确定使用Kubernetes挂载docker
  • 的最佳方法是什么因为这个容器需要docker socket类型的挂载您将需要在特权模式下启动它,这根本不是我们推荐的。
  • 在Kubernetes中共享配置的理想方式不是通过基于主机的卷挂载,而是通过名为configMaps

的Kubernetes对象

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43507497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档