Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

Got "Servname not supported for ai_socktype" when deploy Karapace Schema Registry #593

Open
hongbo-miao opened this issue May 1, 2023 · 1 comment

Comments

@hongbo-miao
Copy link
Contributor

Originally asked in Stack Overflow. Below is a copy. Any guide would be appreciate, thanks! 馃槂


I am trying to deploy Karapace Schema Registry in a local Kubernetes based on Karapace's docker-compose.yml. Here is a copy:

version: '3'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:latest
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  kafka:
    image: confluentinc/cp-kafka:latest
    depends_on:
      - zookeeper
    ports:
      - "9101:9101"  # JMX
      - "9092:9092"  # Kafka
    environment:
      # Listeners:
      # PLAINTEXT_HOST -> Expose kafka to the host network
      # PLAINTEXT -> Used by kafka for inter broker communication / containers
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_CONFLUENT_SCHEMA_REGISTRY_URL: http://karapace-registry:8081
      # Metrics:
      KAFKA_JMX_PORT: 9101
      KAFKA_JMX_HOSTNAME: localhost
      # Keep in sync with tests/integration/conftest.py::configure_and_start_kafka
      KAFKA_BROKER_ID: 1
      KAFKA_BROKER_RACK: "local"
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"
      KAFKA_DEFAULT_REPLICATION_FACTOR: 1
      KAFKA_DELETE_TOPIC_ENABLE: "true"
      KAFKA_INTER_BROKER_LISTENER_NAME: "PLAINTEXT"
      KAFKA_INTER_BROKER_PROTOCOL_VERSION: 2.4
      KAFKA_LOG_CLEANER_ENABLE: "true"
      KAFKA_LOG_MESSAGE_FORMAT_VERSION: 2.4
      KAFKA_LOG_RETENTION_CHECK_INTERVAL_MS: 300000
      KAFKA_LOG_SEGMENT_BYTES: 209715200
      KAFKA_NUM_IO_THREADS: 8
      KAFKA_NUM_NETWORK_THREADS: 112
      KAFKA_NUM_PARTITIONS: 1
      KAFKA_NUM_REPLICA_FETCHERS: 4
      KAFKA_NUM_RECOVERY_THREADS_PER_DATA_DIR: 1
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_SOCKET_RECEIVE_BUFFER_BYTES: 102400
      KAFKA_SOCKET_REQUEST_MAX_BYTES: 104857600
      KAFKA_SOCKET_SEND_BUFFER_BYTES: 102400
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_TRANSACTION_STATE_LOG_NUM_PARTITIONS: 16
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_ZOOKEEPER_CONNECTION_TIMEOUT_MS: 6000
      KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181"

  karapace-registry:
    image: ghcr.io/aiven/karapace:develop
    entrypoint:
      - /bin/bash
      - /opt/karapace/start.sh
      - registry
    depends_on:
      - kafka
    ports:
      - "8081:8081"
    environment:
      KARAPACE_ADVERTISED_HOSTNAME: karapace-registry
      KARAPACE_BOOTSTRAP_URI: kafka:29092
      KARAPACE_PORT: 8081
      # For `KARAPACE_HOST`, I also tried `localhost`, `karapace-registry.hm-karapace.svc`, but none of them works.
      KARAPACE_HOST: 0.0.0.0
      KARAPACE_CLIENT_ID: karapace
      KARAPACE_GROUP_ID: karapace-registry
      KARAPACE_MASTER_ELIGIBILITY: "true"
      KARAPACE_TOPIC_NAME: _schemas
      KARAPACE_LOG_LEVEL: WARNING
      KARAPACE_COMPATIBILITY: FULL

  karapace-rest:
    image: ghcr.io/aiven/karapace:develop
    entrypoint:
      - /bin/bash
      - /opt/karapace/start.sh
      - rest
    depends_on:
      - kafka
      - karapace-registry
    ports:
      - "8082:8082"
    environment:
      KARAPACE_PORT: 8082
      KARAPACE_HOST: 0.0.0.0
      KARAPACE_ADVERTISED_HOSTNAME: karapace-rest
      KARAPACE_BOOTSTRAP_URI: kafka:29092
      KARAPACE_REGISTRY_HOST: karapace-registry
      KARAPACE_REGISTRY_PORT: 8081
      KARAPACE_ADMIN_METADATA_MAX_AGE: 0
      KARAPACE_LOG_LEVEL: WARNING

As I already have Kafka in my local Kuberentes, and karapace-rest depends on karapace-registry, so I hope to make karapace-registry work first.

Here is my attempt converting karapace-registry to use Kubernetes YAML files:

hm-karapace-namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: hm-karapace

karapace-registry-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: karapace-registry-deployment
  namespace: hm-karapace
  labels:
    app.kubernetes.io/name: karapace-registry
spec:
  replicas: 1
  selector:
    matchLabels:
      app: karapace-registry
  template:
    metadata:
      labels:
        app: karapace-registry
    spec:
      containers:
        - name: karapace-registry
          # I changed from tag `develop` to latest version `3.4.6`
          image: ghcr.io/aiven/karapace:3.4.6
          command:
            - /bin/bash
            - /opt/karapace/start.sh
            - registry
          env:
            - name: KARAPACE_ADVERTISED_HOSTNAME
              valueFrom:
                configMapKeyRef:
                  name: karapace-registry-configmap
                  key: karapace_advertised_hostname
            - name: KARAPACE_BOOTSTRAP_URI
              valueFrom:
                configMapKeyRef:
                  name: karapace-registry-configmap
                  key: karapace_bootstrap_uri
            - name: KARAPACE_CLIENT_ID
              valueFrom:
                configMapKeyRef:
                  name: karapace-registry-configmap
                  key: karapace_client_id
            - name: KARAPACE_COMPATIBILITY
              valueFrom:
                configMapKeyRef:
                  name: karapace-registry-configmap
                  key: karapace_compatibility
            - name: KARAPACE_GROUP_ID
              valueFrom:
                configMapKeyRef:
                  name: karapace-registry-configmap
                  key: karapace_group_id
            - name: KARAPACE_LOG_LEVEL
              valueFrom:
                configMapKeyRef:
                  name: karapace-registry-configmap
                  key: karapace_log_level
            - name: KARAPACE_MASTER_ELIGIBILITY
              valueFrom:
                configMapKeyRef:
                  name: karapace-registry-configmap
                  key: karapace_master_eligibility
            - name: KARAPACE_HOST
              valueFrom:
                configMapKeyRef:
                  name: karapace-registry-configmap
                  key: karapace_host
            - name: KARAPACE_PORT
              valueFrom:
                configMapKeyRef:
                  name: karapace-registry-configmap
                  key: karapace_port
            - name: KARAPACE_TOPIC_NAME
              valueFrom:
                configMapKeyRef:
                  name: karapace-registry-configmap
                  key: karapace_topic_name
          ports:
            - name: registry
              protocol: TCP
              containerPort: 8081

karapace-registry-configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: karapace-registry-configmap
  namespace: hm-karapace
  labels:
    app.kubernetes.io/name: karapace-registry
data:
  karapace_advertised_hostname: karapace-registry.hm-karapace.svc
  # My Kafka bootstrap is at hm-kafka-kafka-bootstrap.hm-kafka.svc:9092
  karapace_bootstrap_uri: hm-kafka-kafka-bootstrap.hm-kafka.svc:9092
  karapace_client_id: karapace
  karapace_compatibility: FULL
  karapace_group_id: karapace-registry
  karapace_log_level: WARNING
  karapace_master_eligibility: "true"
  karapace_host: 0.0.0.0
  karapace_port: "8081"
  karapace_topic_name: _schemas

karapace-registry-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: karapace-registry
  namespace: hm-karapace
  labels:
    app.kubernetes.io/name: karapace-registry
spec:
  type: ClusterIP
  selector:
    app: karapace-registry
  ports:
    - name: registry
      protocol: TCP
      targetPort: 8081
      port: 8081

However, when I deploy, I got error log for this Karapace Registry pod:

Starting Karapace Schema Registry
Cannot enable Sentry.io sending: importing 'sentry_sdk' failed
asyncio             	MainThread	ERROR   	unhandled exception during asyncio.run() shutdown
task: <Task finished name='Task-1' coro=<_run_app() done, defined at /usr/local/lib/python3.9/dist-packages/aiohttp/web.py:289> exception=gaierror(-8, 'Servname not supported for ai_socktype')>
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/dist-packages/aiohttp/web.py", line 516, in run_app
    loop.run_until_complete(main_task)
  File "/usr/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
    return future.result()
  File "/usr/local/lib/python3.9/dist-packages/aiohttp/web.py", line 415, in _run_app
    await site.start()
  File "/usr/local/lib/python3.9/dist-packages/aiohttp/web_runner.py", line 121, in start
    self._server = await loop.create_server(
  File "/usr/lib/python3.9/asyncio/base_events.py", line 1460, in create_server
    infos = await tasks.gather(*fs, loop=self)
  File "/usr/lib/python3.9/asyncio/base_events.py", line 1400, in _create_server_getaddrinfo
    infos = await self._ensure_resolved((host, port), family=family,
  File "/usr/lib/python3.9/asyncio/base_events.py", line 1396, in _ensure_resolved
    return await loop.getaddrinfo(host, port, family=family, type=type,
  File "/usr/lib/python3.9/asyncio/base_events.py", line 856, in getaddrinfo
    return await self.run_in_executor(
  File "/usr/lib/python3.9/concurrent/futures/thread.py", line 52, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/lib/python3.9/socket.py", line 953, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -8] Servname not supported for ai_socktype
karapace.statsd     	MainThread	ERROR   	Unexpected exception in statsd send
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/dist-packages/karapace/karapace_all.py", line 66, in main
    app.run()
  File "/usr/local/lib/python3.9/dist-packages/karapace/rapu.py", line 471, in run
    aiohttp.web.run_app(
  File "/usr/local/lib/python3.9/dist-packages/aiohttp/web.py", line 516, in run_app
    loop.run_until_complete(main_task)
  File "/usr/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
    return future.result()
  File "/usr/local/lib/python3.9/dist-packages/aiohttp/web.py", line 415, in _run_app
    await site.start()
  File "/usr/local/lib/python3.9/dist-packages/aiohttp/web_runner.py", line 121, in start
    self._server = await loop.create_server(
  File "/usr/lib/python3.9/asyncio/base_events.py", line 1460, in create_server
    infos = await tasks.gather(*fs, loop=self)
  File "/usr/lib/python3.9/asyncio/base_events.py", line 1400, in _create_server_getaddrinfo
    infos = await self._ensure_resolved((host, port), family=family,
  File "/usr/lib/python3.9/asyncio/base_events.py", line 1396, in _ensure_resolved
    return await loop.getaddrinfo(host, port, family=family, type=type,
  File "/usr/lib/python3.9/asyncio/base_events.py", line 856, in getaddrinfo
    return await self.run_in_executor(
  File "/usr/lib/python3.9/concurrent/futures/thread.py", line 52, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/lib/python3.9/socket.py", line 953, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -8] Servname not supported for ai_socktype

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.9/dist-packages/karapace/statsd.py", line 82, in _send
    self._socket.sendto(b"".join(parts), self._dest_addr)
OSError: [Errno 9] Bad file descriptor
Traceback (most recent call last):
  File "/usr/lib/python3.9/runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/usr/local/lib/python3.9/dist-packages/karapace/karapace_all.py", line 74, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.9/dist-packages/karapace/karapace_all.py", line 66, in main
    app.run()
  File "/usr/local/lib/python3.9/dist-packages/karapace/rapu.py", line 471, in run
    aiohttp.web.run_app(
  File "/usr/local/lib/python3.9/dist-packages/aiohttp/web.py", line 516, in run_app
    loop.run_until_complete(main_task)
  File "/usr/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
    return future.result()
  File "/usr/local/lib/python3.9/dist-packages/aiohttp/web.py", line 415, in _run_app
    await site.start()
  File "/usr/local/lib/python3.9/dist-packages/aiohttp/web_runner.py", line 121, in start
    self._server = await loop.create_server(
  File "/usr/lib/python3.9/asyncio/base_events.py", line 1460, in create_server
    infos = await tasks.gather(*fs, loop=self)
  File "/usr/lib/python3.9/asyncio/base_events.py", line 1400, in _create_server_getaddrinfo
    infos = await self._ensure_resolved((host, port), family=family,
  File "/usr/lib/python3.9/asyncio/base_events.py", line 1396, in _ensure_resolved
    return await loop.getaddrinfo(host, port, family=family, type=type,
  File "/usr/lib/python3.9/asyncio/base_events.py", line 856, in getaddrinfo
    return await self.run_in_executor(
  File "/usr/lib/python3.9/concurrent/futures/thread.py", line 52, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/lib/python3.9/socket.py", line 953, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -8] Servname not supported for ai_socktype

For KARAPACE_HOST inside, I tried 0.0.0.0, localhost, karapace-registry.hm-karapace.svc, but none of them works.

I found a similar issue with a potential solution at #397 (comment)

But I still didn't get what it means.

Plus I am not using Terraform, so I won't be able to use enable_service_links in the reply.

Any guide would be appreciate. Thanks!

@tvainika
Copy link
Contributor

tvainika commented May 3, 2023

Pointed out in Stack Overflow seems to be on the spot: A configuration toggle to disable StatsD client fully is missing. Need to add that so that karapace does not assume telegraf client would be running on same host 8125

@tvainika tvainika mentioned this issue May 26, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants