kubernetes - 无法检索 Ignite pods IP 地址

标签 kubernetes ignite

我正在尝试使用 Google Kubernetes Engine 运行 apache ignite 集群。

遵循教程后,这里有一些 yaml 文件。

首先我创建一个服务 -
ignite-service.yaml

apiVersion: v1
kind: Service
metadata:
  # Name of Ignite Service used by Kubernetes IP finder. 
  # The name must be equal to TcpDiscoveryKubernetesIpFinder.serviceName.
  name: ignite
  namespace: default
spec:
  clusterIP: None # custom value.
  ports:
    - port: 9042 # custom value.
  selector:
    # Must be equal to one of the labels set in Ignite pods'
    # deployement configuration.
    app: ignite

kubectl create -f ignite-service.yaml

其次,我为我的 ignite 节点创建部署 点燃部署.yaml

用于 Ignite Pod 部署的 Kubernetes 配置示例。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  # Custom Ignite cluster's name.
  name: ignite-cluster
spec:
  # A number of Ignite pods to be started by Kubernetes initially.
  replicas: 2
  template:
    metadata:
      labels:
        app: ignite
    spec:
      containers:
        # Custom Ignite pod name.
      - name: ignite-node
        image: apacheignite/ignite:2.4.0
        env:
        - name: OPTION_LIBS
          value: ignite-kubernetes
        - name: CONFIG_URI
          value: https://raw.githubusercontent.com/apache/ignite/master/modules/kubernetes/config/example-kube.xml
        ports:
        # Ports to open.
        # Might be optional depending on your Kubernetes environment.
        - containerPort: 11211 # REST port number.
        - containerPort: 47100 # communication SPI port number.
        - containerPort: 47500 # discovery SPI port number.
        - containerPort: 49112 # JMX port number.
        - containerPort: 10800 # SQL port number.       

kubectl create -f ignite-deployment.yaml

之后,我检查在我的案例中运行的 pod 的状态。但是,当我检查任何 Pod 的日志时,出现以下错误,
java.io.IOException: Server returned HTTP response code: 403 for URL: https://kubernetes.default.svc.cluster.local:443/api/v1/namespaces/default/endpoints/ignite

我尝试过的事情:-
  • 我关注了这个 link让我的集群工作。但是在第 4 步中,当我运行守护进程 yaml 文件时,出现以下错误
  • error: error validating "daemon.yaml": error validating data: ValidationError(DaemonSet.spec.template.spec): missing required field "containers" in io.k8s.api.core.v1.PodSpec; if you choose to ignore these errors, turn validation off with --validate=false
    有人能指出我在这里可能犯的错误吗?

    谢谢。

    最佳答案

    第一步:kubectl apply -f ignite-service.yaml (带有您问题中的文件)

    第 2 步:kubectl apply -f ignite-rbac.yaml
    ignite-rbac.yaml 是这样的:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: ignite
      namespace: default
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: ignite-endpoint-access
      namespace: default
      labels:
        app: ignite
    rules:
      - apiGroups: [""]
        resources: ["endpoints"]
        resourceNames: ["ignite"]
        verbs: ["get"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: ignite-role-binding
      namespace: default
      labels:
        app: ignite
    subjects:
      - kind: ServiceAccount
        name: ignite
    roleRef:
      kind: Role
      name: ignite-endpoint-access
      apiGroup: rbac.authorization.k8s.io
    

    第 3 步:kubectl apply -f ignite-deployment.yaml (与您的文件非常相似,我只添加了一行, serviceAccount: ignite :
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      # Custom Ignite cluster's name.
      name: ignite-cluster
      namespace: default
    spec:
      # A number of Ignite pods to be started by Kubernetes initially.
      replicas: 2
      template:
        metadata:
          labels:
            app: ignite
        spec:
          serviceAccount: ignite  ## Added line
          containers:
            # Custom Ignite pod name.
          - name: ignite-node
            image: apacheignite/ignite:2.4.0
            env:
            - name: OPTION_LIBS
              value: ignite-kubernetes
            - name: CONFIG_URI
              value: https://raw.githubusercontent.com/apache/ignite/master/modules/kubernetes/config/example-kube.xml
            ports:
            # Ports to open.
            # Might be optional depending on your Kubernetes environment.
            - containerPort: 11211 # REST port number.
            - containerPort: 47100 # communication SPI port number.
            - containerPort: 47500 # discovery SPI port number.
            - containerPort: 49112 # JMX port number.
            - containerPort: 10800 # SQL port number.
    

    这应该可以正常工作。我在 pod ( kubectl logs -f ignite-cluster-xx-yy ) 的日志中得到了这个,显示了 2 个 Pod 成功地相互定位:
    [13:42:00] Ignite node started OK (id=f89698d6)
    [13:42:00] Topology snapshot [ver=1, servers=1, clients=0, CPUs=1, offheap=0.72GB, heap=1.0GB]
    [13:42:00] Data Regions Configured:
    [13:42:00]   ^-- default [initSize=256.0 MiB, maxSize=740.8 MiB, persistenceEnabled=false]
    [13:42:01] Topology snapshot [ver=2, servers=2, clients=0, CPUs=2, offheap=1.4GB, heap=2.0GB]
    [13:42:01] Data Regions Configured:
    [13:42:01]   ^-- default [initSize=256.0 MiB, maxSize=740.8 MiB, persistenceEnabled=false]
    

    关于kubernetes - 无法检索 Ignite pods IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50817940/

    相关文章:

    java - 如何使用 CacheConfiguration.setIndexedTypes 进行 Ignite 缓存

    java - Apache Ignite 具有对象类型的索引字段

    go - 使用K8S Rest API从特定节点获取Pod

    docker - 不使用卷的情况下备份 docker

    java - 点火异常 : Spring XML configuration path is invalid

    xml - 无法使用WSL将第二个节点加入Apache Ignite集群

    kubernetes - Kubernetes 中缺少 cni0 接口(interface)

    kubernetes - Kube-proxy是否在ubuntu上安装了标准的k8s,还是单独包装?

    docker - 从Docker容器使用默认 namespace 中的群集IP访问k8s服务

    java - Apache 点燃: Object cannot be found in Hashmap after deserialization