O Kubernetes requer mais do que apenas os nós capazes de falar uns com os outros. Também requer uma rede (ou tabela de roteamento) para que os pods possam se comunicar. É essencialmente outra rede apenas para os pods (geralmente chamada de rede overlay / underlay) que permite que o pod no nodeA converse com os pods no nodeB.
Da aparência, você não tem a rede do pod configurada. Você pode implementar redes de sobreposição de várias maneiras (que é uma das razões pelas quais é tão confuso). Leia mais sobre os requisitos de rede aqui .
Com apenas 2 nós, eu recomendaria que você configurasse o que eu gostaria de chamar de "no SDN Kubernetes" e apenas adicionasse manualmente as rotas do pod a cada nó. Isso exigiria que você fizesse duas coisas.
- Especifique a sub-rede para pods em cada nó
- Executar manualmente um comando para criar a rota
Eu tenho detalhes sobre como fazer isso no meu post que escrevi sobre o assunto .
Infelizmente, a configuração da rede de pods só vai te levar a metade do caminho. Para implementar serviços automáticos do NodePort, você também precisa instalar o kube-proxy. O trabalho do kube-proxy é observar em qual porta um serviço é iniciado e então rotear essa porta para o serviço / pod correto dentro do cluster. Ele faz isso por meio de tabelas de IP e é principalmente automático.
Não consegui encontrar um bom exemplo de implantação manual do kube-proxy (geralmente é feito através de sua ferramenta de implantação). Veja um exemplo de DaemonSet a ferramenta kubeadm deve ser criada automaticamente para executar o proxy-kube em cada nó no cluster.
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
generation: 1
labels:
component: kube-proxy
k8s-app: kube-proxy
kubernetes.io/cluster-service: "true"
name: kube-proxy
tier: node
name: kube-proxy
namespace: kube-system
spec:
selector:
matchLabels:
component: kube-proxy
k8s-app: kube-proxy
kubernetes.io/cluster-service: "true"
name: kube-proxy
tier: node
template:
metadata:
labels:
component: kube-proxy
k8s-app: kube-proxy
kubernetes.io/cluster-service: "true"
name: kube-proxy
tier: node
spec:
containers:
- command:
- kube-proxy
- --kubeconfig=/run/kubeconfig
image: gcr.io/google_containers/kube-proxy-amd64:v1.5.2
imagePullPolicy: IfNotPresent
name: kube-proxy
securityContext:
privileged: true
terminationMessagePath: /dev/termination-log
volumeMounts:
- mountPath: /var/run/dbus
name: dbus
- mountPath: /run/kubeconfig
name: kubeconfig
dnsPolicy: ClusterFirst
hostNetwork: true
restartPolicy: Always
terminationGracePeriodSeconds: 30
volumes:
- hostPath:
path: /etc/kubernetes/kubelet.conf
name: kubeconfig
- hostPath:
path: /var/run/dbus
name: dbus
Um outro recurso que pode ser útil é o Kubernetes the Hard Way . Ele não é diretamente aplicável à execução em VMs no proxmox (ele pressupõe o GCE ou o AWS), mas mostra as etapas mínimas e os recursos necessários para executar um cluster do Kubernetes em funcionamento.