Я пытаюсь настроить кластер Kubernetes с одним узлом для демонстрации и тестирования, и я хочу, чтобы он вел себя как «полномасштабный» кластер k8s (например, движок контейнеров Google). У моего клиента есть собственная установка k8s, которая для этого обсуждения, как мы можем предположить, действует во многом как установка k8s движка контейнеров Google.
Получение Ingress IP на полноразмерных K8
Я создаю модуль wordpress и представляю его как службу, как описано в этом руководстве: https://cloud.google.com/container-engine/docs/tutorials/hello-wordpress
Если вы хотите воспроизвести проблему, просто скопируйте и вставьте приведенные ниже команды, которые я извлек из учебника: (Предполагается, что у вас есть проект под названием 'stellar-access-117903'. Если нет, укажите имя вашего Google Проект Container Engine.)
# set up the cluster (this will take a while to provision)
#
gcloud config set project stellar-access-117903
gcloud config set compute/zone us-central1-b
gcloud container clusters create hello-world \
--num-nodes 1 \
--machine-type g1-small
# Create the pod, and expose it as a service
#
kubectl run wordpress --image=tutum/wordpress --port=80
kubectl expose rc wordpress --type=LoadBalancer
# Describe the service
kubectl describe services wordpress
Выходные данные команды описать содержат строку «LoadBalancer Ingress: {some-ip-address}», чего я и ожидал. Теперь, когда я делаю то же самое с настройкой кластера с одним узлом, я не получаю эту строку. Я могу подключиться к службе wordpress по IP-адресу, который отображается в выходных данных команды «описать службу». Но в режиме «одного узла» распечатанный IP-адрес является> IP-адресом кластера ‹службы, который обычно (насколько я понимаю) публично недоступен. По какой-то причине он общедоступен в режиме одного узла. Мы можем воспроизвести это, выполнив следующие шаги.
НЕ ПОЛУЧЕНИЕ IP-адреса Ingress на одноузловых K8s
Сначала настройте одиночный узел k8s, как описано в этом руководстве: https://github.com/kubernetes/kubernetes/blob/master/docs/getting-started-guides/docker.md
Для облегчения воспроизведения я включил все приведенные ниже команды, поэтому вы можете просто скопировать / вставить:
K8S_VERSION=1.1.1
sudo docker run --net=host -d gcr.io/google_containers/etcd:2.0.12 /usr/local/bin/etcd --addr=127.0.0.1:4001 --bind-addr=0.0.0.0:4001 --data-dir=/var/etcd/data
sudo docker run \
--volume=/:/rootfs:ro \
--volume=/sys:/sys:ro \
--volume=/dev:/dev \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/var/lib/kubelet/:/var/lib/kubelet:rw \
--volume=/var/run:/var/run:rw \
--net=host \
--pid=host \
--privileged=true \
-d \
gcr.io/google_containers/hyperkube:v${K8S_VERSION} \
/hyperkube kubelet --containerized --hostname-override="127.0.0.1" --address="0.0.0.0" --api-servers=http://localhost:8080 --config=/etc/kubernetes/manifests
sudo docker run -d --net=host --privileged gcr.io/google_containers/hyperkube:v${K8S_VERSION} /hyperkube proxy --master=http://127.0.0.1:8080 --v=2
# set your context to use the locally running k8s API server
#
kubectl config set-cluster dev --server=http://localhost:8080
kubectl config set-context dev --cluster=dev --namespace=$NS
kubectl config use-context dev
Теперь выполните те же команды, что и для k8s Google Container Engine.
# Create the pod, and expose it as a service
#
kubectl run wordpress --image=tutum/wordpress --port=80
kubectl expose rc wordpress --type=LoadBalancer
# Describe the service
kubectl describe services wordpress
Результат последней команды (которая, как вы увидите, не содержит информации о входящем входе):
Name: wordpress
Namespace: default
Labels: run=wordpress
Selector: run=wordpress
Type: LoadBalancer
IP: 10.0.0.61
Port: <unnamed> 80/TCP
NodePort: <unnamed> 31795/TCP
Endpoints: 172.17.0.30:80
Session Affinity: None
No events.
В k8s движка контейнеров Google я вижу такие события, как «Создание балансировщика нагрузки», «Балансировщик нагрузки создан». Но ничего подобного в экземпляре с одним узлом не происходит.
Мне интересно ... есть ли какая-то конфигурация, которую мне нужно сделать, чтобы заставить их работать одинаково? Очень важно, чтобы они работали одинаково ... отличаясь только масштабируемостью, потому что мы хотим запустить тесты против версии с одним узлом, и будет очень запутанно, если она будет вести себя по-другому.
Заранее благодарим за помощь-крис