Включение сети Calico на узлах EKS Windows
Фон:
По умолчанию, когда вы настраиваете кластер EKS в AWS, кластер, который вы получаете, имеет VPC CNI, который назначает IP-адреса модулей из сети VPC. Таким образом, вы быстро увидите, что IP-адреса исчерпываются, когда мы начинаем развертывать модули !!
Чтобы преодолеть вышеуказанную проблему, нам нужно использовать другое сетевое решение для EKS. Вот несколько доступных вариантов.
Я собираюсь поговорить о Калико.
Прежде чем мы начнем с Calico для Windows, важно, чтобы вы понимали ограничения и известные проблемы Calico для Window.
Предварительные требования
Установите и настройте AWS CLI, kubectl, eksctl и calicoctl на машине, которую вы будете использовать для создания кластера EKS и управления им.
Давай начнем
Поскольку компоненты управления Kubernetes и Calico еще не работают в Windows, требуется гибридный кластер Linux / Windows. Сначала вы создаете кластер Linux для компонентов Calico, а затем присоединяете узлы Windows к кластеру Linux.
Создайте кластер EKS и разверните компоненты Calico на узле Linux, следуя документации Calico.
Примечание. Если вы хотите создать собственный пул IP-адресов Calico, отредактируйте calico-vxlan.yaml
и обновите переменную среды CALICO_IPV4POOL_CIDR, указав свой собственный CIDR.
Убедитесь, что Calico DaemonSet работает с вашим требуемым пулом IP-адресов.
Включите Поддержка Windows для кластеров Amazon EKS.
Теперь присоедините к кластеру самоуправляемую группу узлов Windows с помощью утилиты eksctl.
Примените следующую привязку роли пользователя к кластеру.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: nodes-cluster-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: system:nodes
Убедитесь, что у вас есть единственный пул с VXLANMODE Always
.
Для управляющих узлов Linux, использующих сеть Calico, строгая привязка должна быть установлена на true
. Это необходимо, чтобы узлы Linux не заимствовали IP-адреса из узлов Windows:
$ calicoctl ipam configure --strictaffinity=true
Теперь давайте настроим Calico в качестве служб Windows на рабочих узлах EKS Windows.
Доступ к узлу Windows с помощью RDP.
Включить TLS v1.2
Создайте следующий каталог.
Загрузите kubectl cli и поместите его в папку c:\k\.
.
Поместите kubelet и kube-proxy в одно и то же место, c:\k\
. Поскольку мы используем AMI, оптимизированный для EKS, мы можем найти эти двоичные файлы в папке C: \ Program Files \ Kubernetes.
Скопируйте файл kubeconfig и kubelet-config (используемый kubelet) из c:\ProgramData\kubernetes
на каждый узел Windows в файл c:\k\config and c:\k\kubelet-config.json
.
Загрузите и запустите сценарии установки Calico для Windows.
Обновите выделенные переменные среды в файле конфигурации calico, расположенном внутри c:\CalicoWindows\config.ps1
, как показано ниже.
Запустите установщик.
AMI, оптимизированный для EKS, имеет предварительно настроенные службы kubelet и kube-proxy, которые настроены для работы с VPC CNI. Давайте удалим его, используя скрипты из пакета Calico.
После инициализации Calico для Windows сервер метаданных AWS становится недоступным. Чтобы исправить это, выполните следующие действия.
# View existing routes Get-NetRoute # Retrieve interface index for primary routes (assuming node's subnet is 192.168.64.0/19) $PvtIpIfaceIndex = (Get-NetRoute -DestinationPrefix 192.168.64.* | select -First 1).InterfaceIndex # add AWS metadata route New-NetRoute -DestinationPrefix 169.254.169.254/32 -InterfaceIndex $PvtIpIfaceIndex #Check metadata Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/
Обновите аргумент pod-infra-container-image внутри C: \ CalicoWindows \ kubernetes \ kubelet-service.ps1 как amazonaws.com/eks / pause-windows: latest.
Обновите аргумент config внутри C: \ CalicoWindows \ kubernetes \ kubelet-service.ps1 как c:\k\kubelet-config.json
Установите службу kubelet и kube-proxy, используя сценарий быстрого запуска из пакета Calico, C: \ CalicoWindows \ kubernetes \ install-kube-services.ps1.
Теперь запустите сервисы kubelet и kube-proxy.
Проверьте статус службы.
Теперь проверьте статус узла и убедитесь, что все узлы могут присоединиться к кластеру.
Теперь попробуйте развернуть образец приложения и убедитесь, что модули получают IP-адрес из пула Calico.
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: windows-server-iis
spec:
selector:
matchLabels:
app: windows-server-iis
replicas: 1
template:
metadata:
labels:
app: windows-server-iis
spec:
containers:
- name: windows-server-iis
image: mcr.microsoft.com/windows/servercore:1809
imagePullPolicy: IfNotPresent
command:
- powershell.exe
- -command
- "Add-WindowsFeature Web-Server; Invoke-WebRequest -UseBasicParsing -Uri 'https://dotnetbinaries.blob.core.windows.net/servicemonitor/2.0.1.6/ServiceMonitor.exe' -OutFile 'C:\\ServiceMonitor.exe'; echo '<html><body><br/><br/><marquee><H1>Hello EKS!!!<H1><marquee></body><html>' > C:\\inetpub\\wwwroot\\default.html; C:\\ServiceMonitor.exe 'w3svc'; "
nodeSelector:
kubernetes.io/os: windows
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
securityContext:
privileged: true
nodeSelector:
beta.kubernetes.io/os: linux
Проверьте статус модуля.
Заключение
Вот и все! Вы настроили рабочие узлы Windows / Linux для работы в сети Calico с открытым исходным кодом.
Ссылка:
Больше контента на plainenglish.io