======Docker host on CentOS 7====== =====Base installation===== * minimal install * disable kdump * do not configure network * no security policy * create own partition layout, choose LVM * create 512MB /boot * create swap of 4GB on LVM, rename volumename cl to rootvg. use all remaing space on disk for LVM * do not use all space for root filesystem. I choose 16GB for / and keep the rest unused. * choose ext4 for all filesystems. I do not believe in XFS as Redhat does. =====Configure network===== # remove old interface config nmcli con del eno1 nmcli con del eno2 ====Teaming==== I am going to use vlans on a teaming interface of two network interfaces. It is easy to assign vlan interfaces to Openstack. This is the configuration for one server: # create team device nmcli con add type team con-name team0 ifname team0 config '{"runner": {"name": "lacp"}}' # add NICs to team nmcli con add type team-slave con-name team0-uplink1 ifname eno1 master team0 nmcli con add type team-slave con-name team0-uplink2 ifname eno2 master team0 # bring up team nmcli con up team0-uplink1 nmcli con up team0-uplink2 # verify team0 ports ip link teamnl team0 ports teamdctl team0 state # disable ip addresses on team interface nmcli con mod team0 ipv4.method disabled nmcli con mod team0 ipv6.method ignore # finally bring up team0 nmcli con up team0 ====Bonding==== nmcli con add type bond con-name bond0 ifname bond0 mode 802.3ad # disable IP on bond0 interface nmcli c mod bond0 ipv4.method disabled nmcli c mod bond0 ipv6.method link-local # add slaves nmcli con add type bond-slave ifname eno1 master bond0 nmcli con add type bond-slave ifname eno2 master bond0 ====VLAN==== # create vlan devices nmcli con add type vlan con-name vlan2 dev team0 id 2 connection.interface-name vlan2 nmcli con add type vlan con-name vlan11 dev team0 id 11 connection.interface-name vlan11 # disable ip addresses on vlan11 interface. we are going to use this as an external network in openstack nmcli con mod vlan11 ipv4.method disabled nmcli con mod vlan11 ipv6.method link-local # ipv4 on vlan2 nmcli con mod vlan2 ipv4.method manual ipv4.addresses 172.16.2.12/24 ipv4.gateway 172.16.2.1 ipv4.dns 172.16.2.21,208.67.222.222 ipv4.dns-search mngt.bh.helux.nl # ipv6 on vlan2 nmcli con mod vlan2 ipv6.method manual ipv6.addresses 2a02:22a0:bbb7:402::12/64 ipv6.gateway 2a02:22a0:bbb7:402::1 ipv6.dns 2620:0:ccc::2 # set hostname hostnamectl set-hostname hp1.mngt.bh.helux.nl =====Configure firewalld===== Use my [[firewalld-zones-centos7|Using firewalld to create zones with subnets on CentOS 7]] howto to create the zones and rules. =====Configure disks===== We are going to create an LV for Docker to store its containers. lvcreate -L16G -n docker rootvg mkdir /var/lib/docker mkfs.ext4 -m0 /dev/rootvg/docker The disk is a SSD so adding noatime,discard to the mount options. Setting discard on the swap filesystems seems unstable. /dev/mapper/rootvg-root / ext4 defaults,noatime,discard 1 1 UUID=0b76534c-06fd-4428-97fc-9cd937c1d875 /boot ext4 defaults,noatime,discard 1 2 /dev/mapper/rootvg-swap swap swap defaults 0 0 /dev/mapper/rootvg-docker /var/lib/docker ext4 defaults,noatime,discard 1 2 mount -o remount / mount -o remount /boot mount /var/lib/docker =====Configure Chrony===== yum -y install chrony systemctl enable chronyd I use my own NTP reference clock: . . #server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst server 172.16.2.250 iburst . . systemctl restart chronyd =====Repositories and yum config===== Add EPEL and official Docker repository yum -y install epel-release [docker] name=Docker for Enterprise Linux 7 - $basearch baseurl=https://yum.dockerproject.org/repo/main/centos/7/ enabled=1 gpgcheck=0 . . installonly_limit=2 =====Packages===== Install some useful stuff yum -y install net-tools wget bind-utils deltarpm bash-completion yum-plugin-remove-with-leaves yum-utils Update everything yum -y update Install docker yum -y install docker-engine python-docker-py Docker setting for Kolla: # Create the drop-in unit directory for docker.service mkdir -p /etc/systemd/system/docker.service.d # Create the drop-in unit file tee /etc/systemd/system/docker.service.d/kolla.conf <<-'EOF' [Service] MountFlags=shared EOF systemctl daemon-reload systemctl enable docker systemctl restart docker =====Root CA certificate to communicate with the Docker repository===== On each node I trust my own root CA. update-ca-trust force-enable cd /etc/pki/ca-trust/source/anchors curl http://ldap.mngt.bh.helux.nl/cacert.pem -o HeluxCA.pem update-ca-trust extract =====Reboot and remove old kernel===== reboot package-cleanup --oldkernels --count=1 {{tag>centos}}