Невозможно изменить манифест ETCD для статического модуля Kubernetes

Я хотел бы изменить модуль etcd для прослушивания 0.0.0.0 (или IP-адреса хост-машины) вместо 127.0.0.1.

Я работаю над миграцией с одного мастера на кластер кубернетов с несколькими мастерами, но я столкнулся с проблемой, которая возникла после того, как я изменил /etc/kubernetes/manifests/etcd.yaml с правильными настройками и перезапустил кубелет и даже демоны докеров и т. Д. все еще работает над 127.0.0.1.

Внутри контейнера докеров я стал видеть, что etcd начинается с --listen-client-urls = https://127.0.0.1:2379 вместо IP-адреса хоста

cat /etc/kubernetes/manifests/etcd.yaml

apiVersion: v1
kind: Pod
metadata:
  annotations:
    scheduler.alpha.kubernetes.io/critical-pod: ""
  creationTimestamp: null
  labels:
    component: etcd
    tier: control-plane
  name: etcd
  namespace: kube-system
spec:
  containers:
  - command:
    - etcd
    - --advertise-client-urls=https://192.168.22.9:2379
    - --cert-file=/etc/kubernetes/pki/etcd/server.crt
    - --client-cert-auth=true
    - --data-dir=/var/lib/etcd
    - --initial-advertise-peer-urls=https://192.168.22.9:2380
    - --initial-cluster=test-master-01=https://192.168.22.9:2380
    - --key-file=/etc/kubernetes/pki/etcd/server.key
    - --listen-client-urls=https://192.168.22.9:2379
    - --listen-peer-urls=https://192.168.22.9:2380
    - --name=test-master-01
    - --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
    - --peer-client-cert-auth=true
    - --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
    - --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
    - --snapshot-count=10000
    - --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
    image: k8s.gcr.io/etcd-amd64:3.2.18
    imagePullPolicy: IfNotPresent
    livenessProbe:
      exec:
        command:
        - /bin/sh
        - -ec
        - ETCDCTL_API=3 etcdctl --endpoints=https://[192.168.22.9]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt
          --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key
          get foo
      failureThreshold: 8
      initialDelaySeconds: 15
      timeoutSeconds: 15
    name: etcd
    resources: {}
    volumeMounts:
    - mountPath: /var/lib/etcd
      name: etcd-data
    - mountPath: /etc/kubernetes/pki/etcd
      name: etcd-certs
  hostNetwork: true
  priorityClassName: system-cluster-critical
  volumes:
  - hostPath:
      path: /var/lib/etcd
      type: DirectoryOrCreate
    name: etcd-data
  - hostPath:
      path: /etc/kubernetes/pki/etcd
      type: DirectoryOrCreate
    name: etcd-certs
status: {}

[root @ test-master-01 centos] # kubectl -n kube-system get po etcd-test-master-01 -o yaml

apiVersion: v1
kind: Pod
metadata:
  annotations:
    kubernetes.io/config.hash: c3eef2d48a776483adc00311df8cb940
    kubernetes.io/config.mirror: c3eef2d48a776483adc00311df8cb940
    kubernetes.io/config.seen: 2019-05-24T13:50:06.335448715Z
    kubernetes.io/config.source: file
    scheduler.alpha.kubernetes.io/critical-pod: ""
  creationTimestamp: 2019-05-24T14:08:14Z
  labels:
    component: etcd
    tier: control-plane
  name: etcd-test-master-01
  namespace: kube-system
  resourceVersion: "6288"
  selfLink: /api/v1/namespaces/kube-system/pods/etcd-test-master-01
  uid: 5efadb1c-7e2d-11e9-adb7-fa163e267af4
spec:
  containers:
  - command:
    - etcd
    - --advertise-client-urls=https://127.0.0.1:2379
    - --cert-file=/etc/kubernetes/pki/etcd/server.crt
    - --client-cert-auth=true
    - --data-dir=/var/lib/etcd
    - --initial-advertise-peer-urls=https://127.0.0.1:2380
    - --initial-cluster=test-master-01=https://127.0.0.1:2380
    - --key-file=/etc/kubernetes/pki/etcd/server.key
    - --listen-client-urls=https://127.0.0.1:2379
    - --listen-peer-urls=https://127.0.0.1:2380
    - --name=test-master-01
    - --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
    - --peer-client-cert-auth=true
    - --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
    - --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
    - --snapshot-count=10000
    - --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
    image: k8s.gcr.io/etcd-amd64:3.2.18
    imagePullPolicy: IfNotPresent
    livenessProbe:
      exec:
        command:
        - /bin/sh
        - -ec
        - ETCDCTL_API=3 etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt
          --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key
          get foo

person Oles Rid    schedule 24.05.2019    source источник
comment
пожалуйста, опубликуйте манифест, который вы используете   -  person jaxxstorm    schedule 24.05.2019
comment
Привет, @jaxxstorm Добавлено содержимое манифеста etcd.yaml в сообщении выше и фрагмент запущенного pod yaml   -  person Oles Rid    schedule 24.05.2019
comment
Странно то, что когда я проделал эту процедуру вручную в прошлый раз, все работало нормально, и я успешно присоединил участников etcd к кластеру. Но теперь я не могу telnet etcd, используя IP-адрес хоста   -  person Oles Rid    schedule 24.05.2019
comment
вы убили капсулу после того, как внесли изменения?   -  person jaxxstorm    schedule 24.05.2019
comment
Да, я также удалил контейнер pod и docker, перезапустил демоны docker и kubelet, даже перезапустил главный узел, но все тот же   -  person Oles Rid    schedule 27.05.2019


Ответы (2)


Сначала проверьте свой вариант kubelet --pod-manifest-path, введите правильный yaml в этот путь.

Чтобы убедиться, что модуль etcd был удален, переместите файл yaml из pod-manifest-path, подождите, пока этот модуль будет удален docker ps -a. Затем поместите правильный файл yaml в pod-manifest-path.

person menya    schedule 25.05.2019
comment
Привет @menya, я даже изменил --pod-manifest-path на несуществующий и подождал, пока контейнер докеров etcd не будет убит, а затем изменил путь обратно правильно, но новый контейнер докеров все тот же - person Oles Rid; 27.05.2019

Пошагово просматривая свои сценарии автоматизации, я обнаружил, что я сделал резервную копию etcd yaml в той же папке с расширением .bak. Похоже, демон kubelet загружает все файлы в папку манифестов, несмотря на расширение файла.

person Oles Rid    schedule 27.05.2019