Автор оригинала: Vyacheslav.
Я парень Linux, но одна из моих рабочих ящиков — это включение Intel под Windows с довольно хорошими характеристиками памяти. До сих пор я использовал его, чтобы разгрузить Docker Builds и использовать несколько виртуальных машин на гиперве. Последнее обновление Docker сделало вещи еще более интересными — Docker для Windows теперь способен запустить один узел Kubernetes 1.1x кластер, который вы также можете использовать для своих экспериментов.
Даже если 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.708080/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/
Мы можем достичь того же эффекта от определения ямла
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.708080/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»