Нурмухамед Артыкалы

Блог обо всем

CoreOS: Установка кластера CoreOS

Установка кластера CoreOS

Рекомендую ознакомится со следующей статьей, здесь достаточно подробно описана технология coreos.

Для меня самой большой проблемой было понять, для чего нужен https://discovery.etcd.io/ и как быть, если в корпоративной сети нет доступа к этому ресурсу. Пока не прочел данную статью, где описан вариант Easy Development/Testing Cluster. этот вариант установки кластера буду использовать.

Варианты установки:

  • Установка через Cd-rom
  • Установка через netboot

Установка через Cd-rom

Я использовал этот вариант как самый простой способ. Необходимо скачать с сервера образ диска, при включение виртуальной машины указываем на наш образ и производим загрузку с образа.

Варианты сетевых настроек:

Рассмотрим различные варианты настроек сети

Простая настройка

NIC1 ens192
NIC2 NA
VLAN-ID NA
BONDING NA

    alias ip='sudo ip'

    ip ad add 192.168.254.202/24 dev ens192
    ip ro add default via 192.168.254.254

    sudo echo "search nurm.local" > /etc/resolv.conf
    sudo echo "nameserver 192.168.254.252" >> /etc/resolv.conf

Настройка VLAN

NIC1 ens192
NIC2 NA
VLAN-ID 777
BONDING NA

    alias ip='sudo ip'

    ip link add link ens192 name ens192.777 type vlan id 777

    ip ad add 192.168.254.202/24 dev ens192.777
    ip ro add default via 192.168.254.254

    sudo echo "search nurm.local" > /etc/resolv.conf
    sudo echo "nameserver 192.168.254.252" >> /etc/resolv.conf

Настройка Bonding

NIC1 ens192
NIC2 ens193
VLAN-ID NA
BONDING bond0

    alias ip='sudo ip'

    sudo modprobe bonding miimon=100

    ip link set dev ens192 down
    ip link set dev ens193 down

    ip link set dev ens192 master bond0
    ip link set dev ens193 master bond0

    ip ad add 192.168.254.202/24 dev bond0
    ip ro add default via 192.168.254.254

    echo "search nurm.local" > /etc/resolv.conf
    echo "nameserver 192.168.254.252" >> /etc/resolv.conf

Настройка VLAN over Bonding

NIC1 ens192
NIC2 ens193
VLAN-ID 777
BONDING bond0

    alias ip='sudo ip'

    sudo modprobe bonding miimon=100

    ip link set dev ens192 down
    ip link set dev ens193 down

    ip link set dev ens192 master bond0
    ip link set dev ens193 master bond0

    ip link add link bond0 name bond0.777 type vlan id 777

    ip ad add 192.168.254.202/24 dev bond0.777
    ip ro add default via 192.168.254.254

    echo "search nurm.local" > /etc/resolv.conf
    echo "nameserver 192.168.254.252" >> /etc/resolv.conf

Виртуальная машина: a.coreos

Виртуальная машина a.coreos будет основной, на ней будет запущен сервис etcd, необходимый для управления кластером. Подготовим cloud-config.yaml для этой виртуальной машины


#cloud-config
hostname: a.coreos.nurm.local
ssh_authorized_keys:
    - ssh-rsa AAAA....

users:
  - name: nurmukhamed
    passwd: ..../
    groups:
      - sudo
      - docker

write_files:
    - path: /etc/resolv.conf
      permissions: 0644
      content: |
        search nurm.local
        nameserver 192.168.254.252

coreos:
    etcd:
        addr: 192.168.254.202:4001
    units:
        - name: 10-eth0.network
          command: restart
          content: |
            [Match]
            Name=ens192

            [Network]
            Address=192.168.254.202/24
            Gateway=192.168.254.254
        - name: etcd.service
          command: start
        - name: fleet.service
          command: start

Виртуальная машина: b.coreos

Виртуальные машины {b,c,d,e}.coreos будут рабочими. Подготовим cloud-config.yaml для этой виртуальной машины


#cloud-config
hostname: b.coreos.nurm.local
ssh_authorized_keys:
    - ssh-rsa AAAA....
users:
  - name: nurmukhamed
    passwd: ..../
    groups:
      - sudo
      - docker
write_files:
    - path: /etc/resolv.conf
      permissions: 0644
      content: |
        search nurm.local
        nameserver 192.168.254.252
    - path: /etc/profile.d/etcdctl.sh
      permissions: 0644
      owner: core
      content: |
        # configure etcdctl to work with our etcd servers set above
        export ETCDCTL_PEERS="http://192.168.254.202:4001"
    - path: /etc/profile.d/fleetctl.sh
      permissions: 0644
      owner: core
      content: |
        # configure fleetctl to work with our etcd servers set above
        export FLEETCTL_ENDPOINT=/var/run/fleet.sock
        export FLEETCTL_EXPERIMENTAL_API=true
coreos:
    fleet:
      etcd_servers: "http://192.168.254.202:4001"
    units:
        - name: 10-eth0.network
          command: restart
          content: |
            [Match]
            Name=ens192

            [Network]
            Address=192.168.254.203/24
            Gateway=192.168.254.254
        - name: fleet.service
          command: start

Виртуальная машина: c.coreos

Виртуальные машины {b,c,d,e}.coreos будут рабочими. Подготовим cloud-config.yaml для этой виртуальной машины


#cloud-config
hostname: c.coreos.nurm.local
ssh_authorized_keys:
    - ssh-rsa AAAA....
users:
  - name: nurmukhamed
    passwd: ..../
    groups:
      - sudo
      - docker
write_files:
    - path: /etc/resolv.conf
      permissions: 0644
      content: |
        search nurm.local
        nameserver 192.168.254.252
    - path: /etc/profile.d/etcdctl.sh
      permissions: 0644
      owner: core
      content: |
        # configure etcdctl to work with our etcd servers set above
        export ETCDCTL_PEERS="http://192.168.254.202:4001"
    - path: /etc/profile.d/fleetctl.sh
      permissions: 0644
      owner: core
      content: |
        # configure fleetctl to work with our etcd servers set above
        export FLEETCTL_ENDPOINT=/var/run/fleet.sock
        export FLEETCTL_EXPERIMENTAL_API=true
coreos:
    fleet:
      etcd_servers: "http://192.168.254.202:4001"
    units:
        - name: 10-eth0.network
          command: restart
          content: |
            [Match]
            Name=ens192

            [Network]
            Address=192.168.254.204/24
            Gateway=192.168.254.254
        - name: fleet.service
          command: start

Виртуальная машина: d.coreos

Виртуальные машины {b,c,d,e}.coreos будут рабочими. Подготовим cloud-config.yaml для этой виртуальной машины


#cloud-config
hostname: d.coreos.nurm.local
ssh_authorized_keys:
    - ssh-rsa AAAA....
users:
  - name: nurmukhamed
    passwd: ..../
    groups:
      - sudo
      - docker
write_files:
    - path: /etc/resolv.conf
      permissions: 0644
      content: |
        search nurm.local
        nameserver 192.168.254.252
    - path: /etc/profile.d/etcdctl.sh
      permissions: 0644
      owner: core
      content: |
        # configure etcdctl to work with our etcd servers set above
        export ETCDCTL_PEERS="http://192.168.254.202:4001"
    - path: /etc/profile.d/fleetctl.sh
      permissions: 0644
      owner: core
      content: |
        # configure fleetctl to work with our etcd servers set above
        export FLEETCTL_ENDPOINT=/var/run/fleet.sock
        export FLEETCTL_EXPERIMENTAL_API=true
coreos:
    fleet:
      etcd_servers: "http://192.168.254.202:4001"
    units:
        - name: 10-eth0.network
          command: restart
          content: |
            [Match]
            Name=ens192

            [Network]
            Address=192.168.254.205/24
            Gateway=192.168.254.254
        - name: fleet.service
          command: start

Виртуальная машина: e.coreos

Виртуальные машины {b,c,d,e}.coreos будут рабочими. Подготовим cloud-config.yaml для этой виртуальной машины


#cloud-config
hostname: e.coreos.nurm.local
ssh_authorized_keys:
    - ssh-rsa AAAA....
users:
  - name: nurmukhamed
    passwd: ..../
    groups:
      - sudo
      - docker
write_files:
    - path: /etc/resolv.conf
      permissions: 0644
      content: |
        search nurm.local
        nameserver 192.168.254.252
    - path: /etc/profile.d/etcdctl.sh
      permissions: 0644
      owner: core
      content: |
        # configure etcdctl to work with our etcd servers set above
        export ETCDCTL_PEERS="http://192.168.254.202:4001"
    - path: /etc/profile.d/fleetctl.sh
      permissions: 0644
      owner: core
      content: |
        # configure fleetctl to work with our etcd servers set above
        export FLEETCTL_ENDPOINT=/var/run/fleet.sock
        export FLEETCTL_EXPERIMENTAL_API=true
coreos:
    fleet:
      etcd_servers: "http://192.168.254.202:4001"
    units:
        - name: 10-eth0.network
          command: restart
          content: |
            [Match]
            Name=ens192

            [Network]
            Address=192.168.254.206/24
            Gateway=192.168.254.254
        - name: fleet.service
          command: start

Установка системы

Я скопировал конфиги для хостов на dnsmasq.nurm.local. при установке системы, копирую конфиг с dnsmasq.nurm.local.

Вариант установки без прокси-сервера


    sudo -i
    scp nurmukhamed@dnsmasq:/tmp/a.coreos.cloud-config.yaml /tmp/cloud-config.yaml
    coreos-install -d /dev/sda -c /tmp/cloud-config.yaml
    reboot

Вариант установки c прокси-сервером


    sudo -i
    scp nurmukhamed@dnsmasq:/tmp/a.coreos.cloud-config.yaml /tmp/cloud-config.yaml

    export http_proxy="http://proxy.nurm.local:3128"
    export https_proxy="http://proxy.nurm.local:3128"
    export ftp_proxy="http://proxy.nurm.local:3128"

    coreos-install -d /dev/sda -c /tmp/cloud-config.yaml
    reboot

Провести данную процедуру на каждой виртуальной машине.

Comments

Comments