ошибка проверки данных: ошибка проверки (Deployment.spec.template.spec.volumes[0]): неизвестное поле «hostAliases» в io.k8s.api.core.v1.Volume

#kubernetes #monitoring

#kubernetes #мониторинг

Вопрос:

Я пытаюсь использовать сервер метрик на kubeadm с одним головным узлом и двумя рабочими узлами, но я продолжаю получать ошибку unknown hostAliases

……………………………………………………………….

 apiVersion: extensions/v1beta1
kind: Deployment
metadata: 
  labels: 
    k8s-app: metrics-server
  name: metrics-server
  namespace: kube-system
spec: 
  selector: 
    matchLabels: 
      k8s-app: metrics-server
  template: 
    metadata: 
      labels: 
        k8s-app: metrics-server
      name: metrics-server
    spec: 
      containers: 
        - 
          command: 
            - /metrics-server
            - "--kubelet-insecure-tls"
            - "--kubelet-preferred-address-types=InternalDNS,InternalIPExternalDNS,ExternalIP,Hostname"
          image: "k8s.gcr.io/metrics-server-amd64:v0.3.1"
          imagePullPolicy: Always
          name: metrics-server
          volumeMounts: 
            - 
              mountPath: /tmp
              name: tmp-dir
      serviceAccountName: metrics-server
      volumes: 
        - 
          emptyDir: {}
          hostAliases: 
            - 
              hostnames: 
                - k8s-head
              ip: "192.168.205.10"
            - 
              hostnames: 
                - k8s-node-1
              ip: "192.168.205.11"
            - 
              hostnames: 
                - k8s-node-2
              ip: "192.168.205.12"
          name: tmp-dir
  

Ответ №1:

Ваша файловая структура YAML кажется неправильной, HostAliases должны иметь структуру, подобную этой

 apiVersion: v1
kind: Pod
metadata:
  name: hostaliases-pod
spec:
  restartPolicy: Never
  hostAliases:
  - ip: "127.0.0.1"
    hostnames:
    - "foo.local"
    - "bar.local"
  - ip: "10.1.2.3"
    hostnames:
    - "foo.remote"
    - "bar.remote"
  

Обратите внимание, что после записи hostAliases вы должны поставить - ip: "127.0.0.1"
и сразу после того, как вы введете имена хостов, которые будут разрешены для этого ip.

Ваш YAML

 hostAliases: 
  - hostnames: 
    - k8s-head 
  ip: "192.168.205.10" 
    - hostnames: 
      - k8s-node-1 
  ip: "192.168.205.11" 
    - hostnames: 
      - k8s-node-2 
  ip: "192.168.205.12" 
  

Здесь вы можете узнать больше о https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/

Комментарии:

1. Я отредактировал yaml, но все равно получил это сообщение об ошибке «недопустимый тип для ввода-вывода.k8s.api.core.v1.Container.command: получена «строка», ожидаемый «массив»». Есть идеи, как это исправить?

2. В вашем файле YAML неверный отступ, для ошибки достаточно одного дополнительного пробела. Обратите внимание на отступ в этом примере kubernetes.io/docs/concepts/workloads/controllers/deployment/… Сразу после ввода контейнеров поместите команду после сигнала dash (-) без новой строки (например, command 🙂