Запуск Kubernetes с фланелью на локальном сервере ESXI с 3 виртуальными машинами, мастером и двумя узлами. На всех узлах у меня Kubernetes 1.15.5, Ubuntu 18.04 и Docker 18.09.7. Установка в зеленом поле.
Nginx отлично работает с одним модулем на любом узле, но при масштабировании до двух модулей случайные тайм-ауты подключения начинаются после долгой паузы в curl.
kubectl apply -f nginx.yaml
deployment.apps/nginx configured
service/nginx unchanged
кот nginx.yaml
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1
ports:
- name: http
containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
ports:
- name: http
nodePort: 32000
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: NodePort
kubectl get services, pods, deployments, daemonsets -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d17h <none>
service/nginx NodePort 10.102.48.211 <none> 80:32000/TCP 45m app=nginx
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/nginx-6d4fbdf4df-q7jdt 1/1 Running 0 45m 10.10.2.6 kubernetes3 <none> <none>
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
deployment.extensions/nginx 1/1 1 1 45m nginx nginx:1 app=nginx
завиток http: // kubernetes3: 32000 возвращает страницу nginx
завиток http: // kubernetes2: 32000 возвращает тайм-аут соединения.
Увеличение масштаба до двух двух модулей
kubectl scale --replicas = 2 развертывание nginx
deployment.extensions/nginx scaled
kubectl get services, pods, deployments, daemonsets -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d17h <none>
service/nginx NodePort 10.102.48.211 <none> 80:32000/TCP 48m app=nginx
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/nginx-6d4fbdf4df-q7jdt 1/1 Running 0 48m 10.10.2.6 kubernetes3 <none> <none>
pod/nginx-6d4fbdf4df-zg2n5 1/1 Running 0 42s 10.10.1.5 kubernetes2 <none> <none>
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
deployment.extensions/nginx 2/2 2 2 48m nginx nginx:1 app=nginx
завиток http: // kubernetes3: 32000 работает половину времени и скручивается http: // kubernetes2: 32000 работает почти половину времени. Другая половина, у меня тайм-аут соединения. Если я запускаю команды на узле 3 или 2, я получаю то же самое. Telnet также получает случайные тайм-ауты, хотя порты прослушивают все узлы, и у меня есть полное соединение между всеми узлами.
url: (7) Failed to connect to kubernetes2 port 32000: Connection timed out
telnet -d кубернетес3 32000
Trying <IP>...
setsockopt (SO_DEBUG): Permission denied
kubernetes3: ~ $ netstat -tulpn | grep 3200
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp6 0 0 :::32000 :::* LISTEN -
Почему у меня возникают эти таймауты при масштабировании до двух или более экземпляров?
Flannel cidr и инициализированный кластерный cidr были разными.
Я инициировал кластер с помощью
kubeadm init --pod-network-cidr=10.10.0.0/16
Но я запустил стандартный файл фланели, который поставляется с сетью
"Network": "10.244.0.0/16"
Мое решение состояло в том, чтобы загрузить файл фланели, а затем удалить установку.
kubectl delete -f kube-flannel.yml
Затем я изменил flannel.yml в соответствии с тем, как я инициализировал сеть.
"Network": "10.10.0.0/16"
Наконец, переустановите фланель.
kubectl apply -k kube-flannel.yml
Теперь я могу запускать команды curl без ошибок. Есть и другие способы сделать это, например, использовать подсеть, предоставляемую flannel, но это был самый простой способ, который я нашел.