Учебник K8s не работает на моей локальной установке с тайм-аутом ввода-вывода - PullRequest
0 голосов
/ 06 августа 2020

Я работаю над локальной установкой кубернетов с тремя узлами. Они устанавливаются через роль geerlingguy / kubernetes Ansible (с настройками по умолчанию). Я несколько раз воссоздавал виртуальные машины целиком. Я стараюсь следовать руководствам Kubernetes на https://kubernetes.io/docs/tutorials/kubernetes-basics/explore/explore-interactive/, чтобы запустить службы внутри кластера, и пытаюсь связаться с ними сейчас.

# kubectl get nodes 
NAME        STATUS   ROLES    AGE    VERSION
enceladus   Ready    <none>   162m   v1.17.9
mimas       Ready    <none>   162m   v1.17.9
titan       Ready    master   162m   v1.17.9

Я пробовал это с 1.17.9 или 1.18.6, я пробовал с https://github.com/geerlingguy/ansible-role-kubernetes и https://github.com/kubernetes-sigs/kubespray на fre sh виртуальных машинах Debian-Buster. Я попробовал это с помощью сетевого плагина Flannel и Calico. Нет настроенного брандмауэра.

Я могу развернуть в нем kubernetes-bootcamp и exe c, но когда я пытаюсь подключиться к модулю через прокси kubectl и curl, я получаю сообщение об ошибке.

# kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1
# kubectl describe pods

Name:         kubernetes-bootcamp-69fbc6f4cf-nq4tj
Namespace:    default
Priority:     0
Node:         enceladus/192.168.10.12
Start Time:   Thu, 06 Aug 2020 10:53:34 +0200
Labels:       app=kubernetes-bootcamp
              pod-template-hash=69fbc6f4cf
Annotations:  <none>
Status:       Running
IP:           10.244.1.4
IPs:
  IP:           10.244.1.4
Controlled By:  ReplicaSet/kubernetes-bootcamp-69fbc6f4cf
Containers:
  kubernetes-bootcamp:
    Container ID:   docker://77eae93ca1e6b574ef7b0623844374a5b2f3054075025492b708b23fc3474a45
    Image:          gcr.io/google-samples/kubernetes-bootcamp:v1
    Image ID:       docker-pullable://gcr.io/google-samples/kubernetes-bootcamp@sha256:0d6b8ee63bb57c5f5b6156f446b3bc3b3c143d233037f3a2f00e279c8fcc64af
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Thu, 06 Aug 2020 10:53:35 +0200
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-kkcvk (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  default-token-kkcvk:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-kkcvk
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type    Reason     Age   From                Message
  ----    ------     ----  ----                -------
  Normal  Scheduled  10s   default-scheduler   Successfully assigned default/kubernetes-bootcamp-69fbc6f4cf-nq4tj to enceladus
  Normal  Pulled     9s    kubelet, enceladus  Container image "gcr.io/google-samples/kubernetes-bootcamp:v1" already present on machine
  Normal  Created    9s    kubelet, enceladus  Created container kubernetes-bootcamp
  Normal  Started    9s    kubelet, enceladus  Started container kubernetes-bootcamp

Обновление список услуг

# kubectl get services
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   4d20h

Я могу выполнить c curl внутри развертывания. Он работает.

# kubectl exec -ti kubernetes-bootcamp-69fbc6f4cf-nq4tj curl http://localhost:8080/
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-69fbc6f4cf-nq4tj | v=1

Но, когда я пытаюсь выполнить завиток с главного узла, ответ не подходит:

curl http://localhost:8001/api/v1/namespaces/default/pods/kubernetes-bootcamp-69fbc6f4cf-nq4tj/proxy/
Error trying to reach service: 'dial tcp 10.244.1.4:80: i/o timeout'

Самому завитку требуется ок. 30se c для возврата. Версия et c. доступен. Прокси-сервер работает нормально.

# curl http://localhost:8001/version
{
  "major": "1",
  "minor": "17",
  "gitVersion": "v1.17.9",
  "gitCommit": "4fb7ed12476d57b8437ada90b4f93b17ffaeed99",
  "gitTreeState": "clean",
  "buildDate": "2020-07-15T16:10:45Z",
  "goVersion": "go1.13.9",
  "compiler": "gc",
  "platform": "linux/amd64"
}

В руководстве kubectl describe pods показано, что контейнер имеет открытые порты (в моем случае это <none>):

Port:           8080/TCP
Host Port:      0/TCP

Хорошо, я чем был создан файл применения bootcamp.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kubernetes-bootcamp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kubernetes-bootcamp
  template:
    metadata:
      labels:
        app: kubernetes-bootcamp
    spec:
      containers:
      - name: kubernetes-bootcamp
        image: gcr.io/google-samples/kubernetes-bootcamp:v1
        ports:
        - containerPort: 8080
          protocol: TCP

Я удалил предыдущее развертывание

# kubectl delete deployments.apps kubernetes-bootcamp --force
# kubectl apply -f bootcamp.yaml

Но после этого я получаю все тот же i/o timeout в новом развертывании.

Итак, в чем моя проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...