Рубрики
Uncategorized

Встроенные Кубернаны в докере для Windows в качестве быстрой альтернативы Minikube

POC на использовании Kubernetes в комплекте с Docker для Windows в качестве быстрой альтернативы Minikube или Minishift. Мы обсуждаем, как выставить кластер за пределами Windows Localhost, а также как развернуть.

Автор оригинала: Vyacheslav.

Я парень Linux, но одна из моих рабочих ящиков — это включение Intel под Windows с довольно хорошими характеристиками памяти. До сих пор я использовал его, чтобы разгрузить Docker Builds и использовать несколько виртуальных машин на гиперве. Последнее обновление Docker сделало вещи еще более интересными — Docker для Windows теперь способен запустить один узел Kubernetes 1.1x кластер, который вы также можете использовать для своих экспериментов.

Ui

Даже если Windows имеет WSL, он до сих пор не ведет себя так, как мой обычный рабочее место в Linux, таким образом, в моей локальной лаборатории (Примечание: Небезопасно) Я делаю — обнаруживает мои окна Kubernetes и Docker Ports на мой ноутбук Linux

Выставить Docker TCP демон на 2375

SET EXTERNAL_IP=192.168.2.2
netsh interface portproxy add v4tov4 listenport=2375 connectaddress=127.0.0.1 connectport=2375 listenaddress=%EXTERNAL_IP% protocol=tcp

Разоблачать

SET EXTERNAL_IP=192.168.2.2
netsh interface portproxy add v4tov4 listenport=6445 connectaddress=127.0.0.1 connectport=6445 listenaddress=%EXTERNAL_IP% protocol=tcp

Доступ к вашему кластеру с Kubectl с вашей машины Linux:

По умолчанию Docker Patches Ваша конфигурация Windows Kube с изменениями, аналогичными ниже:

apiVersion: v1
clusters:
- cluster:
    insecure-skip-tls-verify: true
    server: https://localhost:6445
  name: docker-for-desktop-cluster
contexts:
- context:
    cluster: docker-for-desktop-cluster
    user: docker-for-desktop
  name: docker-for-desktop
current-context: docker-for-desktop-cluster
kind: Config
preferences: {}
users:
- name: docker-for-desktop
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED

То, что вам нужно — это реплицировать конфигурацию на вашем поле Linux и настройте адрес сервера на внешний адрес интерфейса вашего окна.

После этого вы можете увидеть контекст на вашем поле Linux

kubectx
docker-for-desktop
MINIKUBE

и контролировать его, используя нативный инструмент Kubectl

kubectl get pods
NAME       READY     STATUS      RESTARTS   AGE
dns-test   0/1       Completed   0          23h

Давайте тестировать установить панель инструментов Kubernetes, Потому что Docker для Windows не дает конкретного пользовательского интерфейса для этой части

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml
echo kubectl create -f k8s/dashboard-admin.yaml

Новый выпуск приборной панели поставляется с RBAC в качестве по умолчанию, но для этого конкретного случая мы можем пойти на более простой настройку, а Получить права администратора с самого начала: Kubectl Создать -F K8S/Dashboard-admin.yaml куда Dashboard-admin.yaml. является

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
  labels:
    k8s-app: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard
  namespace: kube-system

Теперь вы можете запустить Kubectl Proxy В какой-то консоли, а также какой-то лучший контроль над кластером Kubernetes, доступных на http://localhost: 8001/API/V1/пространства имен/Kube-System/Services/http: Kubernetes-Dashboard:/Proxy/#!/Обзор? Простовое пространство = по умолчанию

Щиток приборов

Доказательство концепции развертывания

Теперь давайте тестируем развертывание приложения CrocoHunter

Kubectl Create -f Croc-hunter.yaml —save-config

apiVersion: v1
kind: Service
metadata:
  name: croc-hunter
  labels:
    component: croc-hunter
spec:
  ports:
    - port: 8080
      targetPort: 8080
  selector:
    component: croc-hunter
  type: "ClusterIP"

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: croc-hunter
  labels:
    component: croc-hunter
spec:
  replicas: 1
  strategy:
    type: RollingUpdate
  selector:
    matchLabels:
      component: "croc-hunter"
  template:
    metadata:
      labels:
        component: "croc-hunter"
    spec:
      containers:
        - name: croc-hunter
          image: "voronenko/docker-sample-image:47372c4"
          imagePullPolicy: "Always"
          ports:
          - name: http
            containerPort: 8080
          resources:
            requests:
              cpu: "10m"
              memory: "128Mi"
          livenessProbe:
            httpGet:
              path: /healthz
              port: http
          readinessProbe:
            httpGet:
              path: /healthz
              port: http


и попасть в него

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
     kubernetes.io/ingress.class: nginx
  name: croc-hunter
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: croc-hunter
          servicePort: 8080

Теперь мы можем проверить, если приложение было развернуто правильно:

kubectl get deployments
NAME          DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
croc-hunter   1         1         1            0           48s

kubectl get pods
NAME                           READY     STATUS    RESTARTS   AGE
croc-hunter-55c74b5b69-sxn9b   1/1       Running   0          1m

Определенно работает. Мы также можем получить доступ к приложению через Kube Proxy http://localhost: 8001/API/V1/пространства имен/по умолчанию/Услуги/http: croc-hunter:/proxy/

Охотник через прокси

Разоблачение развертывания внешне

Поскольку обычное приложение имеет по крайней мере одну конечную точку, к которой можно получить доступ внешне, мы хотели бы также эмулировать, что функциональность (Примечание: Redhat Minishift делает это из коробки).

Мы могли бы сделать это грязным в консоли, как

kubectl expose deployment croc-hunter --type=NodePort --name=croc-hunter-dirty-cmd
service "croc-hunter-dirty-cmd" exposed

kubectl get services
NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
croc-hunter             ClusterIP   10.106.108.70           8080/TCP         29m
croc-hunter-dirty-cmd   NodePort    10.105.89.88            8080:30815/TCP   31s
kubernetes              ClusterIP   10.96.0.1               443/TCP          1d

ПРИМЕЧАНИЕ TCP PORT 30815 выше.

Как вы можете получить доступ к открытым портам?

Опция (а), в том же окне Windows, вы можете просто перейти к http://127.0.0.1:30815/

Охотник, доступный через порт на localhost

Мы можем достичь того же эффекта от определения ямла

apiVersion: v1
kind: Service
metadata:
  name: croc-hunter-nodeport-service
  labels:
    component: croc-hunter
spec:
  ports:
    - port: 8080
      targetPort: 8080
  selector:
    component: croc-hunter
  type: NodePort

kubectl create -f croc-hunter-nodeport.yml --save-config
service "croc-hunter-nodeport-service" created

kubectl get services
NAME                           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
croc-hunter                    ClusterIP   10.106.108.70           8080/TCP         31m
croc-hunter-nodeport-service   NodePort    10.102.97.238           8080:30688/TCP   6s
kubernetes                     ClusterIP   10.96.0.1               443/TCP          1d

Примечание Порт TCP также 30688 Отказ

Опция (B) — в основном я также могу получить доступ к порту, выставленному на коробке с моего внешнего ящика Linux:

Охотник доступен на внешний сетевой интерфейс

Что такое круто.

Резюме: Вы можете использовать встроенный узел Node Kubernetes для небольшой детской площадки с вашими экспериментами Kubernetes не только локально, но и на удаленном использовании набора инструментов.

Спасибо!

Код в действии:

Репозиторий с фрагментами кода выше: https://github.com/voronenko/win-k8s-croco Croco Игра Изображение: https://github.com/voronenko-p/docker-sample-image, который немного модифицирован HTTPS://github.com/lachie83/croc-hunter (фиксированные абсолютные ссылки на ресурсы, чтобы обеспечить правильный прогон под прокси)

в первый раз

make deploy

Для последующего …

make apply 

Доступ к отладке — требует работает Kubectl Proxy в фоновом режиме …

Запустите приборную панель Kubernetes с URL http://localhost: 8001/API/V1/пространства имен/Kube-System/Services/http: Kubernetes-Dashboard:/Proxy/#!/Обзор? Простовое пространство = по умолчанию Если вы установили один

make dashboard

Запустить развернутый микросервис http://localhost:8001/api/v1/namespaces/default/services/http:croc-hunter:/proxy/

make hunter

Оригинал: «https://www.codementor.io/@slavko/built-in-kubernetes-in-docker-for-windows-as-a-quick-alternative-to-minikube-lu7d8mfc1»