Установка Kubernetes на Ubuntu 18.04

Docker Ubuntu Kubernetes

Цели и задачи

  1. установить Docker на Ubuntu 18.04 LTS (будет использована как мастер узел)
  2. установить Docker на Windows Server 2019 (1809) (будет использоваться как рабочий узел)
  3. установить Kubernetes на мастер узле
  4. добавить в Kubernetes узел на базе Windows Server 2019 (1809)
  5. настроить Active Directory для использования gMSA
  6. настроить Kubernetes для использования gMSA
  7. запустить Pod от имени gMSA в Kubernetes

Установка Kubernetes на Ubuntu 18.04

Перед тем, как начать, надо отключить swap. Редактируем /etc/fstab и удаляем там все что связано со swap'ом. Затем запускаем:

sudo swapoff –a

Сейчас мы готовы начать.

Установка kubelet kubeadm kubectl:
$ sudo apt-get update && sudo apt-get install -y apt-transport-https curl

$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

$ cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
  deb https://apt.kubernetes.io/ kubernetes-xenial main
  EOF

$ sudo apt-get update

$ sudo apt-get install -y kubelet kubeadm kubectl

$ sudo apt-mark hold kubelet kubeadm kubectl
Инициализация кластера:
$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16

Если все успешно, то копируем kubeconfig, предварительно сохранив токен и хеш для подключения к кластеру. Токен и хеш на текущий момент должны отображаться на экране.

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
Настройка сети:
$ sudo sysctl net.bridge.bridge-nf-call-iptables=1
$ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Редактируем файл kube-flannel.yml и приводим в соответствие с следующим фрагментом:

cni-conf.json: |
    {
      "name": "vxlan0",
      "plugins": [
        {
          "type": "flannel",
          "delegate": {
            "hairpinMode": true,
            "isDefaultGateway": true
          }
        },
        {
          "type": "portmap",
          "capabilities": {
            "portMappings": true
          }
        }
      ]
    }
net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan",
        "VNI" : 4096,
        "Port": 4789
      }
    }

Отправляем файл в kubernetes:

$ kubectl apply -f kube-flannel.yml
$ wget https://raw.githubusercontent.com/microsoft/SDN/1d5c055bb195fecba07ad094d2d7c18c188f9d2d/Kubernetes/flannel/l2bridge/manifests/node-selector-patch.yml
$ kubectl patch ds/kube-flannel-ds-amd64 --patch "$(cat node-selector-patch.yml)" -n=kube-system

Осталось проверить что все работает:

$ kubectl get nodes -o wide