SlideShare a Scribd company logo
Stacki – The 1600+ Server Journey
David Peterson
Lead Systems Engineer
david.peterson@salesforce.com
Agenda
▪ Why Stacki
▪ Hardware and provisioning requirements
▪ Stacki configuration with chef integration
▪ ZFS and data safe re-provisioning
▪ Detecting issues and adhoc reporting
Why Stacki
Why Stacki
▪ Managing thousands of servers is easy (csv)
▪ HP raid controller support
▪ Easy out of the box provisioning but deep customization
available
▪ Ability to re-provision without losing data
▪ Easy network/subnet configuration
▪ YUM repo support
▪ Command line, command line, command line
▪ Support
Hardware and Provisioning
Requirements
Hardware and Provisioning Requirements
Firewall/ACL Ports
▪ bootpc and bootps (dhcp): UDP 67 and 68
▪ tftp: UDP 69
▪ tftp ephermeral: UDP 32765-65535
▪ http/https: TCP 80 and 443
Hardware and Provisioning Requirements
Host RAID LUNs and Partition Setup
LUNs:
▪ 4x 2TB SATA disks => RAID 10
▪ 200GB LUN (sda)
▪ 7.7TB LUN (sdb)
▪ 2x 480GB SSD disks => RAID 0
▪ 960GB LUN (sdc)
Hardware and Provisioning Requirements
Host RAID LUNs and Partition Setup
Partitions:
▪ sda
▪ /boot, ext4 (sda) => 500MB
▪ Swap => 5GB
▪ /, ext4 => ~195GB
▪ sdb
▪ No partitions
▪ sdc
▪ sdc1 => 10GB, non-formatted
▪ sdc2 => 200GB, non-formatted
Hardware and Provisioning Requirements
Latest LT Kernel and ZFS
▪ Kernel LT => 3.10.95-1
▪ ZFS => 0.6.5.2
Hardware and Provisioning Requirements
Chef Integration
▪ End to end server provisioning with chef
▪ Chef configured on each server, host added to
chef server, and a chef-client run to apply base
roles
Stacki Configuration
Stacki Configuration
Concurrent kickstart limitation
▪ /export/stack/sbin/kickstart.cgi:L154
# Use a semaphore to restrict the number of concurrent kickstart
# file generators. The first time through we set the semaphore
# to the number of CPUs (not a great guess, but reasonable).
▪ semaphore = stack.lock.Semaphore('/var/tmp/kickstart.semaphore')
[root@stacki]# echo 200 > /var/tmp/kickstart.semaphore
Stacki Configuration
Custom RAID Controller Setup
▪ /export/stack/site-profiles/prod/2.0/nodes/replace-storage-controller-client.xml
/export/stack/site-profiles/prod/2.0/nodes/replace-storage-controller-client.xml
<?xml version="1.0" standalone="no"?>
<kickstart>
<pre>
if [ "&nukecontroller;" == "true" ]
then
/opt/stack/sbin/hpssacli ctrl slot=0 delete forced override
/opt/stack/sbin/hpssacli ctrl slot=0 create type=ld 
drives=1I:1:1,1I:1:2,1I:1:3,1I:1:4 raid=1+0 size=200000
/opt/stack/sbin/hpssacli ctrl slot=0 create type=ld 
drives=1I:1:1,1I:1:2,1I:1:3,1I:1:4 raid=1+0
/opt/stack/sbin/hpssacli ctrl slot=0 create type=ld 
drives=2I:0:5,2I:0:6 raid=0
fi
</pre>
<!-- now reset the nukecontroller attribute to false -->
<pre>
<eval>
/opt/stack/bin/stack set host attr &hostname; attr=nukecontroller value=false
</eval>
</pre>
</kickstart>
/export/stack/site-profiles/prod/2.0/nodes/replace-storage-controller-client.xml
<pre cond="appliance in [’rabbitmq']">
if [ "&nukecontroller;" == "true" ]
then
/opt/stack/sbin/hpssacli ctrl slot=0 delete forced override
/opt/stack/sbin/hpssacli ctrl slot=0 create type=ld 
drives=1I:1:1,1I:1:2,1I:1:3,1I:1:4 raid=1+0 size=500000
/opt/stack/sbin/hpssacli ctrl slot=0 create type=ld 
drives=1I:1:1,1I:1:2,1I:1:3,1I:1:4 raid=1+0
/opt/stack/sbin/hpssacli ctrl slot=0 create type=ld 
drives=2I:0:5,2I:0:6 raid=1
fi
</pre>
/export/stack/site-profiles/prod/2.0/nodes/extend-backend.xml
<boot order="post">
# Set HP RAID controller cache settings
/opt/stack/sbin/hpssacli ctrl slot=0 ld 1 modify arrayaccelerator=enable
/opt/stack/sbin/hpssacli ctrl slot=0 ld 2 modify arrayaccelerator=enable
/opt/stack/sbin/hpssacli ctrl slot=0 modify cacheratio=80/20
/opt/stack/sbin/hpssacli ctrl slot=0 array b modify ssdsmartpath=disable
/opt/stack/sbin/hpssacli ctrl slot=0 logicaldrive 3 modify arrayaccelerator=enable
echo "y" | /opt/stack/sbin/hpssacli ctrl slot=0 modify dwc=enable
</boot>
Stacki Configuration
Custom Partitions
▪ /export/stack/site-profiles/prod/2.0/nodes/extend-partition.xml
/export/stack/site-profiles/prod/2.0/nodes/extend-partition.xml
<?xml version="1.0" standalone="no"?>
<kickstart>
<post>
<![CDATA[
/sbin/fdisk /dev/sdc << EOF
d
w
EOF
/sbin/fdisk /dev/sdc << EOF
n
p
1
1
+10G
w
EOF
/sbin/fdisk /dev/sdc << EOF
n
p
2
+200G
w
EOF
]]>
</post>
</kickstart>
Stacki Configuration
Custom Appliance Types
▪ /export/stack/site-profiles/prod/2.0/nodes/extend-backend.xml
[root@stacki]# stack list appliance
APPLIANCE MEMBERSHIP PUBLIC
frontend: Frontend no
backend: Backend yes
rabbitmq: Rabbitmq yes
redis: Redis yes
mysql: Mysql yes
[root@stacki]# stack add appliance loadbalancer
[root@stacki]# stack set appliance attr loadbalancer attr=managed value=true
[root@stacki]# stack set appliance attr loadbalancer attr=kickstartable value=true
[root@stacki]# stack set appliance attr loadbalancer attr=node value=backend
/export/stack/site-profiles/prod/2.0/nodes/extend-backend.xml
<boot order="post" cond="appliance == ’rabbitmq' and (nukecontroller or nukedisks)">
/sbin/zfs create data/rabbitmq
/sbin/zfs set mountpoint=/var/lib/rabbitmq data/rabbitmq
</boot>
<boot order="post" cond="appliance == ’redis' and (nukecontroller or nukedisks)">
/sbin/zfs create data/redis
/sbin/zfs set mountpoint=/var/lib/redis data/redis
adduser -r redis -U
chown redis:redis /var/lib/redis
</boot>
<boot order="post" cond="appliance == 'mysql' and (nukecontroller or nukedisks)">
# Disabling THP
<![CDATA[
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
sed -i 's/kernel.* console=ttyS0,19200n8$/& transparent_hugepage=never/' /boot/grub/grub.conf
sed -i 's/kernel.* crashkernel=auto$/& transparent_hugepage=never/' /boot/grub/grub.conf
]]>
/sbin/zfs create data/mysql
/sbin/zfs create data/mysql-log
/sbin/zfs create data/mysql-tmp
/sbin/zfs set recordsize=16K data/mysql
/sbin/zfs set mountpoint=/var/lib/mysql data/mysql
/sbin/zfs set mountpoint=/var/log/mysql data/mysql-log
/sbin/zfs set mountpoint=/var/lib/mysql/tmp data/mysql-tmp
adduser -r mysql -U
chown mysql:mysql /var/lib/mysql /var/log/mysql /var/lib/mysql/tmp
</boot>
Stacki Configuration
Custom Appliance Types
Stacki Configuration
Chef Cart
▪ /export/stack/carts/chef/nodes/cart-chef-backend.xml
/export/stack/carts/chef/nodes/cart-chef-backend.xml
<?xml version="1.0" standalone="no"?>
<kickstart>
<description>
chef cart backend appliance extensions
</description>
<package>chef</package>
<!-- shell code for post RPM installation -->
<post>
mkdir -p /etc/chef /var/log/chef /var/run/chef
</post>
<post cond="not ‘proxy’ in hostname">
<file name="/etc/chef/client.rb">
<![CDATA[
#
# Chef Client Config File
#
# Dynamically generated by Stacki
#
log_level :info
log_location STDOUT
chef_server_url "#CHEF_SERVER#"
validation_client_name ”chef-validator"
validation_key "/etc/chef/validation.pem"
client_key "/etc/chef/client.pem"
ssl_verify_mode :verify_none
http_proxy 'http://proxy1:3128'
https_proxy 'http://proxy2:3128'
no_proxy ’test1,localhost,127.0.0.1'
environment 'production'
# Using default node name (fqdn)
node_name "#HOSTNAME#”
Ohai::Config[:plugin_path] << '/etc/chef/ohai'
]]>
</file>
# Need to add the chef server and client hostname to the client.rb file
sed -i 's,#CHEF_SERVER#,&chef_server;,g' /etc/chef/client.rb
sed -i 's/#HOSTNAME#/&hostname;.&domainname;/g' /etc/chef/client.rb
</post>
/export/stack/carts/chef/nodes/cart-chef-backend.xml
<post>
<file name="/etc/chef/first-boot.json">
{
"run_list": [
"role[base_role]",
"role[dc_sfo]"
]
}
</file>
</post>
# If we are nuking disks we are assuming this is a new server
# or the chef client/node has been deleted out of the chef server if it existed.
<boot order="post" cond="nukedisks">
# Run chef-client for the first time
/usr/bin/chef-client -j /etc/chef/first-boot.json -L /var/log/chef/chef.log
# Make a backup of the chef private key in case we need to re-provision/upgrade a server
mkdir -p /data/chef-backup
chown root:root /data/chef-backup
chmod 700 /data/chef-backup
cp -a /etc/chef/* /data/chef-backup
</boot>
# If we are not nuking the disks we are assuming we are re-loading or upgrading
# the OS and need to keep the client.pem chef key so chef-client can run properly
<boot order="post" cond="not nukedisks">
cp /data/chef-backup/client.pem /etc/chef/
/usr/bin/chef-client -L /var/log/chef/chef.log
</boot>
Stacki Configuration
RCS Issues
▪ Stacki installs foundation-rcs package on provisioned servers
▪ Caused issues for our rsyslog daemon because of RCS config files being loaded.
Other daemons were affected as well.
▪ Let’s remove it and clean up all the RCS directories
/export/stack/site-profiles/prod/2.0/nodes/extend-backend.xml
<boot order="post">
# Remove rcs rpm and cleanup RCS directories
rpm -e foundation-rcs
find / -type d -name 'RCS' -print0 |xargs -0 rm –rf
</boot>
ZFS and Data Safe
Provisioning
ZFS and Data Safe Provisioning
What is ZFS?
▪ A combined file system and logical volume manager
▪ Data integrity
▪ Software raid
▪ Storage pools
▪ Sophisticated caching: ARC (RAM MFU/MRU), L2ARC
(SSDs), ZIL/SLOG
▪ Snapshots and Clones
▪ Compression
ZFS and Data Safe Provisioning
ZFS and Latest Kernel Installation
▪ YUM repos imported into Stacki
▪ http://elrepo.org/
▪ http://zfsonlinux.org/
<?xml version="1.0" standalone="no"?>
<kickstart>
<package>kernel-lt</package>
<package>kernel-lt-devel</package>
<package>kernel-lt-headers</package>
<package>zfs</package>
/export/stack/site-profiles/prod/2.0/nodes/extend-backend.xml
/export/stack/site-profiles/prod/2.0/nodes/extend-backend.xml
<post>
# Enable kernel 3.x
sed -i 's/^default=.*/default=1/g' /boot/grub/grub.conf
# Add zfs module config options
echo "options zfs zfs_arc_max=34359738368" >> /etc/modprobe.d/zfs.conf
echo "options zfs zfs_nocacheflush=1" >> /etc/modprobe.d/zfs.conf
echo "options zfs zfs_read_chunk_size=1310720" >> /etc/modprobe.d/zfs.conf
echo "options zfs zfs_prefetch_disable=1" >> /etc/modprobe.d/zfs.conf
echo "options zfs zil_slog_limit=104857600" >> /etc/modprobe.d/zfs.conf
</post>
/export/stack/site-profiles/prod/2.0/nodes/extend-backend.xml
<boot order="post" cond="nukedisks">
/sbin/modprobe zfs
/sbin/zpool create -f data sdb log sdc1 cache sdc2
/sbin/zfs set atime=off data
/sbin/zfs set compression=lz4 data
# Add /opt filesystem
/sbin/zfs create data/opt
/bin/mv /opt/* /data/opt/
/bin/rm -rf /opt
/sbin/zfs set mountpoint=/opt data/opt
# Add /var/log/httpd filesystem
/sbin/zfs create data/httpd-log
/sbin/zfs set mountpoint=/var/log/httpd data/httpd-log
chmod 700 /var/log/httpd
# Add /var/log/logstash filesystem
/sbin/zfs create data/logstash
/sbin/zfs set mountpoint=/var/log/logstash data/logstash
adduser -r logstash -U
chown logstash:logstash /var/log/logstash
echo "create zfs data pool..." > /tmp/zfs-create.log
</boot>
/export/stack/site-profiles/prod/2.0/nodes/extend-backend.xml
<boot order="post" cond="not nukedisks">
# We need to empty/move the data in /opt before we can import zfs
mkdir /tmp/opt
mv /opt/* /tmp/opt/
/sbin/modprobe zfs
/sbin/zpool import -d /dev/disk/by-path/ data
echo "Importing zfs data pool..." > /tmp/zfs-import.log
mv /tmp/opt/* /opt/
rm -rf /tmp/opt
</boot>
Detecting Issues and
AdHoc Reporting
Detecting Issues and AdHoc Reporting
What? We have Issues?
▪ Stacki is great at provisioning but getting the status of a provisioned
or currently being provisioned server is a little harder.
▪ A couple different ways but at various stages in the provisioning
process:
1. Tailing /var/log/messages for DHCP requests and acks
2. Watching the nukecontroller and nukedisks attributes
3. Tailing /var/log/httpd/access_log for rpm downloads
4. Watching the boot action flag
5. iftop
6. Chef node entry
▪ Note: Tailing log files for a couple servers is fine but when
provisioning hundreds of servers at a time, it is not viable.
Detecting Issues and AdHoc Reporting
What? We have Issues?
▪ Watching the nukecontroller and nukedisks attributes
[root@stacki]# stack list host attr chef1-1 |grep nuke
chef1-1: -------------------- nukecontroller true H
chef1-1: -------------------- nukedisks true H
192.168.10.50 - - [09/Feb/2016:20:39:52 -0700] "GET /install/sbin/public/setDbPartitions.cgi HTTP/1.1" 200 1
/var/log/httpd/ssl_access_log
Detecting Issues and AdHoc Reporting
What? We have Issues?
▪ Tailing /var/log/httpd/access_log for rpm downloads
192.168.10.50 - - [09/Feb/2016:17:09:32 -0700] "GET /install/distributions/prod/x86_64/RedHat/RPMS/gtk2-2.24.23-6.el6.x86_64.rpm HTTP/1.1" 200 3339880 "-" "-"
192.168.10.50 - - [09/Feb/2016:17:09:31 -0700] "GET /install/distributions/prod/x86_64/RedHat/RPMS/hdparm-9.43-4.el6.x86_64.rpm HTTP/1.1" 200 83060 "-" "-”
192.168.10.50 - - [09/Feb/2016:17:09:32 -0700] "GET /install/distributions/prod/x86_64/RedHat/RPMS/libXext-1.3.2-2.1.el6.x86_64.rpm HTTP/1.1" 200 35644 "-" "-"
192.168.10.50 - - [09/Feb/2016:17:09:32 -0700] "GET /install/distributions/prod/x86_64/RedHat/RPMS/filesystem-2.4.30-3.el6.x86_64.rpm HTTP/1.1" 200 1057228 "-" "-"
192.168.10.50 - - [09/Feb/2016:17:09:32 -0700] "GET /install/distributions/prod/x86_64/RedHat/RPMS/NetworkManager-0.8.1-99.el6.x86_64.rpm HTTP/1.1" 200 1185212 "-" "-"
192.168.10.50 - - [09/Feb/2016:17:09:32 -0700] "GET /install/distributions/prod/x86_64/RedHat/RPMS/libstoragemgmt-1.2.3-1.el6.x86_64.rpm HTTP/1.1" 200 211068 "-" "-"
tail –f /var/log/httpd/access_log | grep –E “192.168.10.50|192.168.10.51”
Detecting Issues and AdHoc Reporting
What? We have Issues?
▪ Watching the boot action flag
[root@stacki]# stack list host boot chef1-*
HOST ACTION
chef1-2: install
chef1-1: os
192.168.10.50 - - [09/Feb/2016:20:39:52 -0700] "GET /install/sbin/public/setPxeboot.cgi?params={"action":"os"} HTTP/1.1" 200 1
/var/log/httpd/ssl_access_log
Detecting Issues and AdHoc Reporting
What? We have Issues?
▪ Issues we encountered
• TORs ip helper-address not set properly
• ACL mis-match between racks causing DHCP/TFTP to be
blocked
• Mis-configured host networks causing the gateways to be wrong
which prevented DHCP/PXE from working properly
• Post boot zfs commands not running properly due to hardware
missing drives
Detecting Issues and AdHoc Reporting
AdHoc Reporting
▪ Find all hosts that still have the “install” flag and generate a report
for h in `stack list host boot |grep -w install|awk '{print $1}'|sed s/://`; 
do for ip in `stack list host interface $h|grep eth0|awk '{print $5}'`; 
do echo -e "Host: $hnChecking for IP: $ip"; echo ""; 
cat /var/log/messages /var/log/httpd/ssl_access_log /var/log/httpd/access_log|grep -iw $ip; echo ""; 
done; done > host_report.txt
Host: test1
Checking for IP: 192.168.10.50
Feb 9 19:32:12 stacki-host dhcpd: DHCPOFFER on 192.168.10.50 to ba:c2:3d:c3:ab:13 via 192.168.10.1
Feb 9 19:32:12 stacki-host dhcpd: DHCPOFFER on 192.168.10.50 to ba:c2:3d:c3:ab:13 via 192.168.10.1
Feb 9 19:32:16 stacki-host dhcpd: DHCPREQUEST for 192.168.10.50 (192.168.10.5) from ba:c2:3d:c3:ab:13 via 192.168.10.1
Feb 9 19:32:16 stacki-host dhcpd: DHCPACK on 192.168.10.50to ba:c2:3d:c3:ab:13 via 192.168.10.1
Feb 9 19:32:16 stacki-host dhcpd: DHCPREQUEST for 192.168.10.50 (192.168.10.5) from ba:c2:3d:c3:ab:13 via 192.168.10.1
Feb 9 19:32:16 stacki-host dhcpd: DHCPACK on 192.168.10.50 to ba:c2:3d:c3:ab:13 via 192.168.10.1
192.168.10.50 - - [09/Feb/2016:19:32:54 -0700] "GET /install/sbin/kickstart.cgi?arch=x86_64&np=40 HTTP/1.1" 200 96101
192.168.10.50 - - [09/Feb/2016:19:33:13 -0700] "GET /install/distributions/prod/x86_64/images/updates.img HTTP/1.1" 404 329 "-" "-”
192.168.10.50 - - [09/Feb/2016:19:33:33 -0700] "GET /install/distributions/prod/x86_64/images/product.img HTTP/1.1" 200 782336 "-" "-"
192.168.10.50 - - [09/Feb/2016:19:33:35 -0700] "GET /install/distributions/prod/x86_64/images/install.img HTTP/1.1" 200 236163072 "-" "-"
Host: test2
Checking for IP: 192.168.10.51
Host: test3
Checking for IP: 192.168.10.52
Detecting Issues and AdHoc Reporting
AdHoc Reporting
▪ Find the top racks with the most un-provisioned hosts. Helps us
identify racks with potential ACL issues.
[root@stacki]# stack list network|awk '{print $1}’
NETWORK
rack1-prod_vlan1:
rack2-prod_vlan2:
rack3-prod_vlan1:
rack4-prod_vlan2:
rack5-prod_vlan2:
[root@stacki]# for h in `stack list host boot |grep -w install|awk '{print $1}'|sed s/://`; do stack list host interface $h; done
|grep eth0|awk '{print $3}'|cut -d- -f 1|sort|uniq -c|sort -rn|head
40 rack2
9 rack3
7 rack5
6 rack1
6 rack4
Lessons Learned
▪ With thousands of servers, you need a standard naming convention for hosts, networks,
appliance types, etc.
▪ Standardized servers saves you time and headaches.
▪ Created custom scripts to augment stacki functionality and reduce human errors
• create-stack-appliances.sh: This script will look for appliance types in the extend-backend.xml file, check to
see if they already exist and if not, create them in Stacki.
• create-stack-networks.sh: This script will import a list of networks from a csv file you specify.
• stack-hosts.sh: This script enables or disables provisioning of hosts listed in a file and can optionally set the
nuke attributes.
▪ Stacki by default does not allow you to have a high number of concurrent kickstart
sessions.
▪ When making config changes, verify proper syntax and expected output by running:
stack list host profile <hostname> | less
thank y u

More Related Content

What's hot

docker build with Ansible
docker build with Ansibledocker build with Ansible
docker build with Ansible
Bas Meijer
 
Vagrant, Ansible, and OpenStack on your laptop
Vagrant, Ansible, and OpenStack on your laptopVagrant, Ansible, and OpenStack on your laptop
Vagrant, Ansible, and OpenStack on your laptop
Lorin Hochstein
 
Ansible, best practices
Ansible, best practicesAnsible, best practices
Ansible, best practices
Bas Meijer
 
Ansible
AnsibleAnsible
Ansible
Raul Leite
 
Apache Traffic Server & Lua
Apache Traffic Server & LuaApache Traffic Server & Lua
Apache Traffic Server & Lua
Kit Chan
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
Kumar Y
 
ansible why ?
ansible why ?ansible why ?
ansible why ?
Yashar Esmaildokht
 
SaltConf14 - Forrest Alvarez, Choice Hotels - Salt Formulas and States
SaltConf14 - Forrest Alvarez, Choice Hotels - Salt Formulas and StatesSaltConf14 - Forrest Alvarez, Choice Hotels - Salt Formulas and States
SaltConf14 - Forrest Alvarez, Choice Hotels - Salt Formulas and States
SaltStack
 
A quick intro to Ansible
A quick intro to AnsibleA quick intro to Ansible
A quick intro to Ansible
Dan Vaida
 
Herd your chickens: Ansible for DB2 configuration management
Herd your chickens: Ansible for DB2 configuration managementHerd your chickens: Ansible for DB2 configuration management
Herd your chickens: Ansible for DB2 configuration management
Frederik Engelen
 
Ansible Introduction - Ansible Brno #1 - David Karban
Ansible Introduction - Ansible Brno #1 - David KarbanAnsible Introduction - Ansible Brno #1 - David Karban
Ansible Introduction - Ansible Brno #1 - David Karban
ansiblebrno
 
Network Automation with Ansible
Network Automation with AnsibleNetwork Automation with Ansible
Network Automation with Ansible
Anas
 
Automação do físico ao NetSecDevOps
Automação do físico ao NetSecDevOpsAutomação do físico ao NetSecDevOps
Automação do físico ao NetSecDevOps
Raul Leite
 
Chef Provisioning a Chef Server Cluster - ChefConf 2015
Chef Provisioning a Chef Server Cluster - ChefConf 2015Chef Provisioning a Chef Server Cluster - ChefConf 2015
Chef Provisioning a Chef Server Cluster - ChefConf 2015
Chef
 
SaltConf14 - Oz Akan, Rackspace - Deploying OpenStack Marconi with SaltStack
SaltConf14 - Oz Akan, Rackspace - Deploying OpenStack Marconi with SaltStackSaltConf14 - Oz Akan, Rackspace - Deploying OpenStack Marconi with SaltStack
SaltConf14 - Oz Akan, Rackspace - Deploying OpenStack Marconi with SaltStack
SaltStack
 
Ansible for beginners
Ansible for beginnersAnsible for beginners
Ansible for beginners
Kuo-Le Mei
 
Ansible Automation to Rule Them All
Ansible Automation to Rule Them AllAnsible Automation to Rule Them All
Ansible Automation to Rule Them All
Tim Fairweather
 
PXEless Discovery with Foreman
PXEless Discovery with ForemanPXEless Discovery with Foreman
PXEless Discovery with Foreman
Stephen Benjamin
 
Ansible best practices
Ansible best practicesAnsible best practices
Ansible best practices
StephaneFlotat1
 
Automation with ansible
Automation with ansibleAutomation with ansible
Automation with ansible
Khizer Naeem
 

What's hot (20)

docker build with Ansible
docker build with Ansibledocker build with Ansible
docker build with Ansible
 
Vagrant, Ansible, and OpenStack on your laptop
Vagrant, Ansible, and OpenStack on your laptopVagrant, Ansible, and OpenStack on your laptop
Vagrant, Ansible, and OpenStack on your laptop
 
Ansible, best practices
Ansible, best practicesAnsible, best practices
Ansible, best practices
 
Ansible
AnsibleAnsible
Ansible
 
Apache Traffic Server & Lua
Apache Traffic Server & LuaApache Traffic Server & Lua
Apache Traffic Server & Lua
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
 
ansible why ?
ansible why ?ansible why ?
ansible why ?
 
SaltConf14 - Forrest Alvarez, Choice Hotels - Salt Formulas and States
SaltConf14 - Forrest Alvarez, Choice Hotels - Salt Formulas and StatesSaltConf14 - Forrest Alvarez, Choice Hotels - Salt Formulas and States
SaltConf14 - Forrest Alvarez, Choice Hotels - Salt Formulas and States
 
A quick intro to Ansible
A quick intro to AnsibleA quick intro to Ansible
A quick intro to Ansible
 
Herd your chickens: Ansible for DB2 configuration management
Herd your chickens: Ansible for DB2 configuration managementHerd your chickens: Ansible for DB2 configuration management
Herd your chickens: Ansible for DB2 configuration management
 
Ansible Introduction - Ansible Brno #1 - David Karban
Ansible Introduction - Ansible Brno #1 - David KarbanAnsible Introduction - Ansible Brno #1 - David Karban
Ansible Introduction - Ansible Brno #1 - David Karban
 
Network Automation with Ansible
Network Automation with AnsibleNetwork Automation with Ansible
Network Automation with Ansible
 
Automação do físico ao NetSecDevOps
Automação do físico ao NetSecDevOpsAutomação do físico ao NetSecDevOps
Automação do físico ao NetSecDevOps
 
Chef Provisioning a Chef Server Cluster - ChefConf 2015
Chef Provisioning a Chef Server Cluster - ChefConf 2015Chef Provisioning a Chef Server Cluster - ChefConf 2015
Chef Provisioning a Chef Server Cluster - ChefConf 2015
 
SaltConf14 - Oz Akan, Rackspace - Deploying OpenStack Marconi with SaltStack
SaltConf14 - Oz Akan, Rackspace - Deploying OpenStack Marconi with SaltStackSaltConf14 - Oz Akan, Rackspace - Deploying OpenStack Marconi with SaltStack
SaltConf14 - Oz Akan, Rackspace - Deploying OpenStack Marconi with SaltStack
 
Ansible for beginners
Ansible for beginnersAnsible for beginners
Ansible for beginners
 
Ansible Automation to Rule Them All
Ansible Automation to Rule Them AllAnsible Automation to Rule Them All
Ansible Automation to Rule Them All
 
PXEless Discovery with Foreman
PXEless Discovery with ForemanPXEless Discovery with Foreman
PXEless Discovery with Foreman
 
Ansible best practices
Ansible best practicesAnsible best practices
Ansible best practices
 
Automation with ansible
Automation with ansibleAutomation with ansible
Automation with ansible
 

Similar to StackiFest16: Stacki 1600+ Server Journey - Dave Peterson, Salesforce

Salesforce at Stacki Atlanta Meetup February 2016
Salesforce at Stacki Atlanta Meetup February 2016Salesforce at Stacki Atlanta Meetup February 2016
Salesforce at Stacki Atlanta Meetup February 2016
StackIQ
 
How to install squid proxy on server or how to install squid proxy on centos o
How to install squid proxy on server  or how to install squid proxy on centos oHow to install squid proxy on server  or how to install squid proxy on centos o
How to install squid proxy on server or how to install squid proxy on centos o
Proxiesforrent
 
Making Spinnaker Go @ Stitch Fix
Making Spinnaker Go @ Stitch FixMaking Spinnaker Go @ Stitch Fix
Making Spinnaker Go @ Stitch Fix
Diana Tkachenko
 
Hadoop Cluster - Basic OS Setup Insights
Hadoop Cluster - Basic OS Setup InsightsHadoop Cluster - Basic OS Setup Insights
Hadoop Cluster - Basic OS Setup Insights
Sruthi Kumar Annamnidu
 
Python Deployment with Fabric
Python Deployment with FabricPython Deployment with Fabric
Python Deployment with Fabricandymccurdy
 
Introduction to JumpStart
Introduction to JumpStartIntroduction to JumpStart
Introduction to JumpStart
Scott McDermott
 
在Oel5上安装配置oracle gird control 10.2.0.5
在Oel5上安装配置oracle gird control 10.2.0.5在Oel5上安装配置oracle gird control 10.2.0.5
在Oel5上安装配置oracle gird control 10.2.0.5maclean liu
 
Oracle 11g R2 RAC setup on rhel 5.0
Oracle 11g R2 RAC setup on rhel 5.0Oracle 11g R2 RAC setup on rhel 5.0
Oracle 11g R2 RAC setup on rhel 5.0
Santosh Kangane
 
TrinityCore server install guide
TrinityCore server install guideTrinityCore server install guide
TrinityCore server install guide
Seungmin Shin
 
Deployment with Fabric
Deployment with FabricDeployment with Fabric
Deployment with Fabricandymccurdy
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalability
Wim Godden
 
Stacki and Chef at Pardot
Stacki and Chef at PardotStacki and Chef at Pardot
Stacki and Chef at Pardot
Salesforce Engineering
 
kubernetes practice
kubernetes practicekubernetes practice
kubernetes practice
wonyong hwang
 
Railsconf2011 deployment tips_for_slideshare
Railsconf2011 deployment tips_for_slideshareRailsconf2011 deployment tips_for_slideshare
Railsconf2011 deployment tips_for_slidesharetomcopeland
 
RAC-Installing your First Cluster and Database
RAC-Installing your First Cluster and DatabaseRAC-Installing your First Cluster and Database
RAC-Installing your First Cluster and Database
Nikhil Kumar
 
Memcached Study
Memcached StudyMemcached Study
Memcached Study
nam kwangjin
 
Virtualization and automation of library software/machines + Puppet
Virtualization and automation of library software/machines + PuppetVirtualization and automation of library software/machines + Puppet
Virtualization and automation of library software/machines + PuppetOmar Reygaert
 
Deploy Rails Application by Capistrano
Deploy Rails Application by CapistranoDeploy Rails Application by Capistrano
Deploy Rails Application by Capistrano
Tasawr Interactive
 

Similar to StackiFest16: Stacki 1600+ Server Journey - Dave Peterson, Salesforce (20)

Salesforce at Stacki Atlanta Meetup February 2016
Salesforce at Stacki Atlanta Meetup February 2016Salesforce at Stacki Atlanta Meetup February 2016
Salesforce at Stacki Atlanta Meetup February 2016
 
How to install squid proxy on server or how to install squid proxy on centos o
How to install squid proxy on server  or how to install squid proxy on centos oHow to install squid proxy on server  or how to install squid proxy on centos o
How to install squid proxy on server or how to install squid proxy on centos o
 
Making Spinnaker Go @ Stitch Fix
Making Spinnaker Go @ Stitch FixMaking Spinnaker Go @ Stitch Fix
Making Spinnaker Go @ Stitch Fix
 
Hadoop Cluster - Basic OS Setup Insights
Hadoop Cluster - Basic OS Setup InsightsHadoop Cluster - Basic OS Setup Insights
Hadoop Cluster - Basic OS Setup Insights
 
Python Deployment with Fabric
Python Deployment with FabricPython Deployment with Fabric
Python Deployment with Fabric
 
Introduction to JumpStart
Introduction to JumpStartIntroduction to JumpStart
Introduction to JumpStart
 
在Oel5上安装配置oracle gird control 10.2.0.5
在Oel5上安装配置oracle gird control 10.2.0.5在Oel5上安装配置oracle gird control 10.2.0.5
在Oel5上安装配置oracle gird control 10.2.0.5
 
Dev ops
Dev opsDev ops
Dev ops
 
Oracle 11g R2 RAC setup on rhel 5.0
Oracle 11g R2 RAC setup on rhel 5.0Oracle 11g R2 RAC setup on rhel 5.0
Oracle 11g R2 RAC setup on rhel 5.0
 
TrinityCore server install guide
TrinityCore server install guideTrinityCore server install guide
TrinityCore server install guide
 
Deployment with Fabric
Deployment with FabricDeployment with Fabric
Deployment with Fabric
 
infra-as-code
infra-as-codeinfra-as-code
infra-as-code
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalability
 
Stacki and Chef at Pardot
Stacki and Chef at PardotStacki and Chef at Pardot
Stacki and Chef at Pardot
 
kubernetes practice
kubernetes practicekubernetes practice
kubernetes practice
 
Railsconf2011 deployment tips_for_slideshare
Railsconf2011 deployment tips_for_slideshareRailsconf2011 deployment tips_for_slideshare
Railsconf2011 deployment tips_for_slideshare
 
RAC-Installing your First Cluster and Database
RAC-Installing your First Cluster and DatabaseRAC-Installing your First Cluster and Database
RAC-Installing your First Cluster and Database
 
Memcached Study
Memcached StudyMemcached Study
Memcached Study
 
Virtualization and automation of library software/machines + Puppet
Virtualization and automation of library software/machines + PuppetVirtualization and automation of library software/machines + Puppet
Virtualization and automation of library software/machines + Puppet
 
Deploy Rails Application by Capistrano
Deploy Rails Application by CapistranoDeploy Rails Application by Capistrano
Deploy Rails Application by Capistrano
 

More from StackIQ

Installing a Cluster of Raspberry Pis with Stacki Ace
Installing a Cluster of Raspberry Pis with Stacki AceInstalling a Cluster of Raspberry Pis with Stacki Ace
Installing a Cluster of Raspberry Pis with Stacki Ace
StackIQ
 
Building a Hadoop Cluster with Stacki
Building a Hadoop Cluster with StackiBuilding a Hadoop Cluster with Stacki
Building a Hadoop Cluster with Stacki
StackIQ
 
How Teradata uses Stacki
How Teradata uses StackiHow Teradata uses Stacki
How Teradata uses Stacki
StackIQ
 
Installing a Cluster of Raspberry Pis with Stacki Ace
Installing a Cluster of Raspberry Pis with Stacki AceInstalling a Cluster of Raspberry Pis with Stacki Ace
Installing a Cluster of Raspberry Pis with Stacki Ace
StackIQ
 
StackiFest 2017 Technology Update
StackiFest 2017 Technology UpdateStackiFest 2017 Technology Update
StackiFest 2017 Technology Update
StackIQ
 
Automation of your OpenStack Infrastructure with Stacki
Automation of your OpenStack Infrastructure with StackiAutomation of your OpenStack Infrastructure with Stacki
Automation of your OpenStack Infrastructure with Stacki
StackIQ
 
StackiFest 2017 Welcome & Opening Address
StackiFest 2017 Welcome & Opening AddressStackiFest 2017 Welcome & Opening Address
StackiFest 2017 Welcome & Opening Address
StackIQ
 
Provisioning Heterogenous Bare Metal with Stacki
Provisioning Heterogenous Bare Metal with StackiProvisioning Heterogenous Bare Metal with Stacki
Provisioning Heterogenous Bare Metal with Stacki
StackIQ
 
Provisioning with Stacki at NIST
Provisioning with Stacki at NISTProvisioning with Stacki at NIST
Provisioning with Stacki at NIST
StackIQ
 
Public vs. Private Cloud Performance by Flex
Public vs. Private Cloud Performance by FlexPublic vs. Private Cloud Performance by Flex
Public vs. Private Cloud Performance by Flex
StackIQ
 
SF Bay Area OpenStack Meetup Stacki Presentation
SF Bay Area OpenStack Meetup Stacki Presentation SF Bay Area OpenStack Meetup Stacki Presentation
SF Bay Area OpenStack Meetup Stacki Presentation
StackIQ
 
Stacki at the Seattle Scalability Meetup
Stacki at the Seattle Scalability MeetupStacki at the Seattle Scalability Meetup
Stacki at the Seattle Scalability Meetup
StackIQ
 
StackiFest16: Automation for Event-Driven Infrastructure - Dave Boucha
StackiFest16: Automation for Event-Driven Infrastructure - Dave Boucha StackiFest16: Automation for Event-Driven Infrastructure - Dave Boucha
StackiFest16: Automation for Event-Driven Infrastructure - Dave Boucha
StackIQ
 
StackiFest16: CoreOS/Ubuntu on Stacki
StackiFest16: CoreOS/Ubuntu on Stacki StackiFest16: CoreOS/Ubuntu on Stacki
StackiFest16: CoreOS/Ubuntu on Stacki
StackIQ
 
Introduction to Stacki at Atlanta Meetup February 2016
Introduction to Stacki at Atlanta Meetup February 2016Introduction to Stacki at Atlanta Meetup February 2016
Introduction to Stacki at Atlanta Meetup February 2016
StackIQ
 
Private Cloud vs. Public Cloud
Private Cloud vs. Public CloudPrivate Cloud vs. Public Cloud
Private Cloud vs. Public Cloud
StackIQ
 
Datacenter Word Search
Datacenter Word SearchDatacenter Word Search
Datacenter Word Search
StackIQ
 
Stacki: Remove Commands
Stacki: Remove CommandsStacki: Remove Commands
Stacki: Remove Commands
StackIQ
 
The Big Picture on Hadoop
The Big Picture on HadoopThe Big Picture on Hadoop
The Big Picture on Hadoop
StackIQ
 
Stacki Crossword Puzzle
Stacki Crossword PuzzleStacki Crossword Puzzle
Stacki Crossword Puzzle
StackIQ
 

More from StackIQ (20)

Installing a Cluster of Raspberry Pis with Stacki Ace
Installing a Cluster of Raspberry Pis with Stacki AceInstalling a Cluster of Raspberry Pis with Stacki Ace
Installing a Cluster of Raspberry Pis with Stacki Ace
 
Building a Hadoop Cluster with Stacki
Building a Hadoop Cluster with StackiBuilding a Hadoop Cluster with Stacki
Building a Hadoop Cluster with Stacki
 
How Teradata uses Stacki
How Teradata uses StackiHow Teradata uses Stacki
How Teradata uses Stacki
 
Installing a Cluster of Raspberry Pis with Stacki Ace
Installing a Cluster of Raspberry Pis with Stacki AceInstalling a Cluster of Raspberry Pis with Stacki Ace
Installing a Cluster of Raspberry Pis with Stacki Ace
 
StackiFest 2017 Technology Update
StackiFest 2017 Technology UpdateStackiFest 2017 Technology Update
StackiFest 2017 Technology Update
 
Automation of your OpenStack Infrastructure with Stacki
Automation of your OpenStack Infrastructure with StackiAutomation of your OpenStack Infrastructure with Stacki
Automation of your OpenStack Infrastructure with Stacki
 
StackiFest 2017 Welcome & Opening Address
StackiFest 2017 Welcome & Opening AddressStackiFest 2017 Welcome & Opening Address
StackiFest 2017 Welcome & Opening Address
 
Provisioning Heterogenous Bare Metal with Stacki
Provisioning Heterogenous Bare Metal with StackiProvisioning Heterogenous Bare Metal with Stacki
Provisioning Heterogenous Bare Metal with Stacki
 
Provisioning with Stacki at NIST
Provisioning with Stacki at NISTProvisioning with Stacki at NIST
Provisioning with Stacki at NIST
 
Public vs. Private Cloud Performance by Flex
Public vs. Private Cloud Performance by FlexPublic vs. Private Cloud Performance by Flex
Public vs. Private Cloud Performance by Flex
 
SF Bay Area OpenStack Meetup Stacki Presentation
SF Bay Area OpenStack Meetup Stacki Presentation SF Bay Area OpenStack Meetup Stacki Presentation
SF Bay Area OpenStack Meetup Stacki Presentation
 
Stacki at the Seattle Scalability Meetup
Stacki at the Seattle Scalability MeetupStacki at the Seattle Scalability Meetup
Stacki at the Seattle Scalability Meetup
 
StackiFest16: Automation for Event-Driven Infrastructure - Dave Boucha
StackiFest16: Automation for Event-Driven Infrastructure - Dave Boucha StackiFest16: Automation for Event-Driven Infrastructure - Dave Boucha
StackiFest16: Automation for Event-Driven Infrastructure - Dave Boucha
 
StackiFest16: CoreOS/Ubuntu on Stacki
StackiFest16: CoreOS/Ubuntu on Stacki StackiFest16: CoreOS/Ubuntu on Stacki
StackiFest16: CoreOS/Ubuntu on Stacki
 
Introduction to Stacki at Atlanta Meetup February 2016
Introduction to Stacki at Atlanta Meetup February 2016Introduction to Stacki at Atlanta Meetup February 2016
Introduction to Stacki at Atlanta Meetup February 2016
 
Private Cloud vs. Public Cloud
Private Cloud vs. Public CloudPrivate Cloud vs. Public Cloud
Private Cloud vs. Public Cloud
 
Datacenter Word Search
Datacenter Word SearchDatacenter Word Search
Datacenter Word Search
 
Stacki: Remove Commands
Stacki: Remove CommandsStacki: Remove Commands
Stacki: Remove Commands
 
The Big Picture on Hadoop
The Big Picture on HadoopThe Big Picture on Hadoop
The Big Picture on Hadoop
 
Stacki Crossword Puzzle
Stacki Crossword PuzzleStacki Crossword Puzzle
Stacki Crossword Puzzle
 

Recently uploaded

Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Anthony Dahanne
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
Tendenci - The Open Source AMS (Association Management Software)
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
WSO2
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
kalichargn70th171
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
Software Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdfSoftware Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdf
MayankTawar1
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
XfilesPro
 
De mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FMEDe mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FME
Jelle | Nordend
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
Ortus Solutions, Corp
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
Juraj Vysvader
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
KrzysztofKkol1
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
takuyayamamoto1800
 

Recently uploaded (20)

Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
Software Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdfSoftware Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdf
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
 
De mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FMEDe mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FME
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 

StackiFest16: Stacki 1600+ Server Journey - Dave Peterson, Salesforce

  • 1. Stacki – The 1600+ Server Journey David Peterson Lead Systems Engineer david.peterson@salesforce.com
  • 2. Agenda ▪ Why Stacki ▪ Hardware and provisioning requirements ▪ Stacki configuration with chef integration ▪ ZFS and data safe re-provisioning ▪ Detecting issues and adhoc reporting
  • 4. Why Stacki ▪ Managing thousands of servers is easy (csv) ▪ HP raid controller support ▪ Easy out of the box provisioning but deep customization available ▪ Ability to re-provision without losing data ▪ Easy network/subnet configuration ▪ YUM repo support ▪ Command line, command line, command line ▪ Support
  • 6. Hardware and Provisioning Requirements Firewall/ACL Ports ▪ bootpc and bootps (dhcp): UDP 67 and 68 ▪ tftp: UDP 69 ▪ tftp ephermeral: UDP 32765-65535 ▪ http/https: TCP 80 and 443
  • 7. Hardware and Provisioning Requirements Host RAID LUNs and Partition Setup LUNs: ▪ 4x 2TB SATA disks => RAID 10 ▪ 200GB LUN (sda) ▪ 7.7TB LUN (sdb) ▪ 2x 480GB SSD disks => RAID 0 ▪ 960GB LUN (sdc)
  • 8. Hardware and Provisioning Requirements Host RAID LUNs and Partition Setup Partitions: ▪ sda ▪ /boot, ext4 (sda) => 500MB ▪ Swap => 5GB ▪ /, ext4 => ~195GB ▪ sdb ▪ No partitions ▪ sdc ▪ sdc1 => 10GB, non-formatted ▪ sdc2 => 200GB, non-formatted
  • 9. Hardware and Provisioning Requirements Latest LT Kernel and ZFS ▪ Kernel LT => 3.10.95-1 ▪ ZFS => 0.6.5.2
  • 10. Hardware and Provisioning Requirements Chef Integration ▪ End to end server provisioning with chef ▪ Chef configured on each server, host added to chef server, and a chef-client run to apply base roles
  • 12. Stacki Configuration Concurrent kickstart limitation ▪ /export/stack/sbin/kickstart.cgi:L154 # Use a semaphore to restrict the number of concurrent kickstart # file generators. The first time through we set the semaphore # to the number of CPUs (not a great guess, but reasonable). ▪ semaphore = stack.lock.Semaphore('/var/tmp/kickstart.semaphore') [root@stacki]# echo 200 > /var/tmp/kickstart.semaphore
  • 13. Stacki Configuration Custom RAID Controller Setup ▪ /export/stack/site-profiles/prod/2.0/nodes/replace-storage-controller-client.xml
  • 14. /export/stack/site-profiles/prod/2.0/nodes/replace-storage-controller-client.xml <?xml version="1.0" standalone="no"?> <kickstart> <pre> if [ "&nukecontroller;" == "true" ] then /opt/stack/sbin/hpssacli ctrl slot=0 delete forced override /opt/stack/sbin/hpssacli ctrl slot=0 create type=ld drives=1I:1:1,1I:1:2,1I:1:3,1I:1:4 raid=1+0 size=200000 /opt/stack/sbin/hpssacli ctrl slot=0 create type=ld drives=1I:1:1,1I:1:2,1I:1:3,1I:1:4 raid=1+0 /opt/stack/sbin/hpssacli ctrl slot=0 create type=ld drives=2I:0:5,2I:0:6 raid=0 fi </pre> <!-- now reset the nukecontroller attribute to false --> <pre> <eval> /opt/stack/bin/stack set host attr &hostname; attr=nukecontroller value=false </eval> </pre> </kickstart>
  • 15. /export/stack/site-profiles/prod/2.0/nodes/replace-storage-controller-client.xml <pre cond="appliance in [’rabbitmq']"> if [ "&nukecontroller;" == "true" ] then /opt/stack/sbin/hpssacli ctrl slot=0 delete forced override /opt/stack/sbin/hpssacli ctrl slot=0 create type=ld drives=1I:1:1,1I:1:2,1I:1:3,1I:1:4 raid=1+0 size=500000 /opt/stack/sbin/hpssacli ctrl slot=0 create type=ld drives=1I:1:1,1I:1:2,1I:1:3,1I:1:4 raid=1+0 /opt/stack/sbin/hpssacli ctrl slot=0 create type=ld drives=2I:0:5,2I:0:6 raid=1 fi </pre>
  • 16. /export/stack/site-profiles/prod/2.0/nodes/extend-backend.xml <boot order="post"> # Set HP RAID controller cache settings /opt/stack/sbin/hpssacli ctrl slot=0 ld 1 modify arrayaccelerator=enable /opt/stack/sbin/hpssacli ctrl slot=0 ld 2 modify arrayaccelerator=enable /opt/stack/sbin/hpssacli ctrl slot=0 modify cacheratio=80/20 /opt/stack/sbin/hpssacli ctrl slot=0 array b modify ssdsmartpath=disable /opt/stack/sbin/hpssacli ctrl slot=0 logicaldrive 3 modify arrayaccelerator=enable echo "y" | /opt/stack/sbin/hpssacli ctrl slot=0 modify dwc=enable </boot>
  • 17. Stacki Configuration Custom Partitions ▪ /export/stack/site-profiles/prod/2.0/nodes/extend-partition.xml
  • 18. /export/stack/site-profiles/prod/2.0/nodes/extend-partition.xml <?xml version="1.0" standalone="no"?> <kickstart> <post> <![CDATA[ /sbin/fdisk /dev/sdc << EOF d w EOF /sbin/fdisk /dev/sdc << EOF n p 1 1 +10G w EOF /sbin/fdisk /dev/sdc << EOF n p 2 +200G w EOF ]]> </post> </kickstart>
  • 19. Stacki Configuration Custom Appliance Types ▪ /export/stack/site-profiles/prod/2.0/nodes/extend-backend.xml [root@stacki]# stack list appliance APPLIANCE MEMBERSHIP PUBLIC frontend: Frontend no backend: Backend yes rabbitmq: Rabbitmq yes redis: Redis yes mysql: Mysql yes [root@stacki]# stack add appliance loadbalancer [root@stacki]# stack set appliance attr loadbalancer attr=managed value=true [root@stacki]# stack set appliance attr loadbalancer attr=kickstartable value=true [root@stacki]# stack set appliance attr loadbalancer attr=node value=backend
  • 20. /export/stack/site-profiles/prod/2.0/nodes/extend-backend.xml <boot order="post" cond="appliance == ’rabbitmq' and (nukecontroller or nukedisks)"> /sbin/zfs create data/rabbitmq /sbin/zfs set mountpoint=/var/lib/rabbitmq data/rabbitmq </boot> <boot order="post" cond="appliance == ’redis' and (nukecontroller or nukedisks)"> /sbin/zfs create data/redis /sbin/zfs set mountpoint=/var/lib/redis data/redis adduser -r redis -U chown redis:redis /var/lib/redis </boot> <boot order="post" cond="appliance == 'mysql' and (nukecontroller or nukedisks)"> # Disabling THP <![CDATA[ echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag sed -i 's/kernel.* console=ttyS0,19200n8$/& transparent_hugepage=never/' /boot/grub/grub.conf sed -i 's/kernel.* crashkernel=auto$/& transparent_hugepage=never/' /boot/grub/grub.conf ]]> /sbin/zfs create data/mysql /sbin/zfs create data/mysql-log /sbin/zfs create data/mysql-tmp /sbin/zfs set recordsize=16K data/mysql /sbin/zfs set mountpoint=/var/lib/mysql data/mysql /sbin/zfs set mountpoint=/var/log/mysql data/mysql-log /sbin/zfs set mountpoint=/var/lib/mysql/tmp data/mysql-tmp adduser -r mysql -U chown mysql:mysql /var/lib/mysql /var/log/mysql /var/lib/mysql/tmp </boot>
  • 22. Stacki Configuration Chef Cart ▪ /export/stack/carts/chef/nodes/cart-chef-backend.xml
  • 23. /export/stack/carts/chef/nodes/cart-chef-backend.xml <?xml version="1.0" standalone="no"?> <kickstart> <description> chef cart backend appliance extensions </description> <package>chef</package> <!-- shell code for post RPM installation --> <post> mkdir -p /etc/chef /var/log/chef /var/run/chef </post> <post cond="not ‘proxy’ in hostname"> <file name="/etc/chef/client.rb"> <![CDATA[ # # Chef Client Config File # # Dynamically generated by Stacki # log_level :info log_location STDOUT chef_server_url "#CHEF_SERVER#" validation_client_name ”chef-validator" validation_key "/etc/chef/validation.pem" client_key "/etc/chef/client.pem" ssl_verify_mode :verify_none http_proxy 'http://proxy1:3128' https_proxy 'http://proxy2:3128' no_proxy ’test1,localhost,127.0.0.1' environment 'production' # Using default node name (fqdn) node_name "#HOSTNAME#” Ohai::Config[:plugin_path] << '/etc/chef/ohai' ]]> </file> # Need to add the chef server and client hostname to the client.rb file sed -i 's,#CHEF_SERVER#,&chef_server;,g' /etc/chef/client.rb sed -i 's/#HOSTNAME#/&hostname;.&domainname;/g' /etc/chef/client.rb </post>
  • 24. /export/stack/carts/chef/nodes/cart-chef-backend.xml <post> <file name="/etc/chef/first-boot.json"> { "run_list": [ "role[base_role]", "role[dc_sfo]" ] } </file> </post> # If we are nuking disks we are assuming this is a new server # or the chef client/node has been deleted out of the chef server if it existed. <boot order="post" cond="nukedisks"> # Run chef-client for the first time /usr/bin/chef-client -j /etc/chef/first-boot.json -L /var/log/chef/chef.log # Make a backup of the chef private key in case we need to re-provision/upgrade a server mkdir -p /data/chef-backup chown root:root /data/chef-backup chmod 700 /data/chef-backup cp -a /etc/chef/* /data/chef-backup </boot> # If we are not nuking the disks we are assuming we are re-loading or upgrading # the OS and need to keep the client.pem chef key so chef-client can run properly <boot order="post" cond="not nukedisks"> cp /data/chef-backup/client.pem /etc/chef/ /usr/bin/chef-client -L /var/log/chef/chef.log </boot>
  • 25. Stacki Configuration RCS Issues ▪ Stacki installs foundation-rcs package on provisioned servers ▪ Caused issues for our rsyslog daemon because of RCS config files being loaded. Other daemons were affected as well. ▪ Let’s remove it and clean up all the RCS directories /export/stack/site-profiles/prod/2.0/nodes/extend-backend.xml <boot order="post"> # Remove rcs rpm and cleanup RCS directories rpm -e foundation-rcs find / -type d -name 'RCS' -print0 |xargs -0 rm –rf </boot>
  • 26. ZFS and Data Safe Provisioning
  • 27. ZFS and Data Safe Provisioning What is ZFS? ▪ A combined file system and logical volume manager ▪ Data integrity ▪ Software raid ▪ Storage pools ▪ Sophisticated caching: ARC (RAM MFU/MRU), L2ARC (SSDs), ZIL/SLOG ▪ Snapshots and Clones ▪ Compression
  • 28. ZFS and Data Safe Provisioning ZFS and Latest Kernel Installation ▪ YUM repos imported into Stacki ▪ http://elrepo.org/ ▪ http://zfsonlinux.org/ <?xml version="1.0" standalone="no"?> <kickstart> <package>kernel-lt</package> <package>kernel-lt-devel</package> <package>kernel-lt-headers</package> <package>zfs</package> /export/stack/site-profiles/prod/2.0/nodes/extend-backend.xml
  • 29. /export/stack/site-profiles/prod/2.0/nodes/extend-backend.xml <post> # Enable kernel 3.x sed -i 's/^default=.*/default=1/g' /boot/grub/grub.conf # Add zfs module config options echo "options zfs zfs_arc_max=34359738368" >> /etc/modprobe.d/zfs.conf echo "options zfs zfs_nocacheflush=1" >> /etc/modprobe.d/zfs.conf echo "options zfs zfs_read_chunk_size=1310720" >> /etc/modprobe.d/zfs.conf echo "options zfs zfs_prefetch_disable=1" >> /etc/modprobe.d/zfs.conf echo "options zfs zil_slog_limit=104857600" >> /etc/modprobe.d/zfs.conf </post>
  • 30. /export/stack/site-profiles/prod/2.0/nodes/extend-backend.xml <boot order="post" cond="nukedisks"> /sbin/modprobe zfs /sbin/zpool create -f data sdb log sdc1 cache sdc2 /sbin/zfs set atime=off data /sbin/zfs set compression=lz4 data # Add /opt filesystem /sbin/zfs create data/opt /bin/mv /opt/* /data/opt/ /bin/rm -rf /opt /sbin/zfs set mountpoint=/opt data/opt # Add /var/log/httpd filesystem /sbin/zfs create data/httpd-log /sbin/zfs set mountpoint=/var/log/httpd data/httpd-log chmod 700 /var/log/httpd # Add /var/log/logstash filesystem /sbin/zfs create data/logstash /sbin/zfs set mountpoint=/var/log/logstash data/logstash adduser -r logstash -U chown logstash:logstash /var/log/logstash echo "create zfs data pool..." > /tmp/zfs-create.log </boot>
  • 31. /export/stack/site-profiles/prod/2.0/nodes/extend-backend.xml <boot order="post" cond="not nukedisks"> # We need to empty/move the data in /opt before we can import zfs mkdir /tmp/opt mv /opt/* /tmp/opt/ /sbin/modprobe zfs /sbin/zpool import -d /dev/disk/by-path/ data echo "Importing zfs data pool..." > /tmp/zfs-import.log mv /tmp/opt/* /opt/ rm -rf /tmp/opt </boot>
  • 33. Detecting Issues and AdHoc Reporting What? We have Issues? ▪ Stacki is great at provisioning but getting the status of a provisioned or currently being provisioned server is a little harder. ▪ A couple different ways but at various stages in the provisioning process: 1. Tailing /var/log/messages for DHCP requests and acks 2. Watching the nukecontroller and nukedisks attributes 3. Tailing /var/log/httpd/access_log for rpm downloads 4. Watching the boot action flag 5. iftop 6. Chef node entry ▪ Note: Tailing log files for a couple servers is fine but when provisioning hundreds of servers at a time, it is not viable.
  • 34. Detecting Issues and AdHoc Reporting What? We have Issues? ▪ Watching the nukecontroller and nukedisks attributes [root@stacki]# stack list host attr chef1-1 |grep nuke chef1-1: -------------------- nukecontroller true H chef1-1: -------------------- nukedisks true H 192.168.10.50 - - [09/Feb/2016:20:39:52 -0700] "GET /install/sbin/public/setDbPartitions.cgi HTTP/1.1" 200 1 /var/log/httpd/ssl_access_log
  • 35. Detecting Issues and AdHoc Reporting What? We have Issues? ▪ Tailing /var/log/httpd/access_log for rpm downloads 192.168.10.50 - - [09/Feb/2016:17:09:32 -0700] "GET /install/distributions/prod/x86_64/RedHat/RPMS/gtk2-2.24.23-6.el6.x86_64.rpm HTTP/1.1" 200 3339880 "-" "-" 192.168.10.50 - - [09/Feb/2016:17:09:31 -0700] "GET /install/distributions/prod/x86_64/RedHat/RPMS/hdparm-9.43-4.el6.x86_64.rpm HTTP/1.1" 200 83060 "-" "-” 192.168.10.50 - - [09/Feb/2016:17:09:32 -0700] "GET /install/distributions/prod/x86_64/RedHat/RPMS/libXext-1.3.2-2.1.el6.x86_64.rpm HTTP/1.1" 200 35644 "-" "-" 192.168.10.50 - - [09/Feb/2016:17:09:32 -0700] "GET /install/distributions/prod/x86_64/RedHat/RPMS/filesystem-2.4.30-3.el6.x86_64.rpm HTTP/1.1" 200 1057228 "-" "-" 192.168.10.50 - - [09/Feb/2016:17:09:32 -0700] "GET /install/distributions/prod/x86_64/RedHat/RPMS/NetworkManager-0.8.1-99.el6.x86_64.rpm HTTP/1.1" 200 1185212 "-" "-" 192.168.10.50 - - [09/Feb/2016:17:09:32 -0700] "GET /install/distributions/prod/x86_64/RedHat/RPMS/libstoragemgmt-1.2.3-1.el6.x86_64.rpm HTTP/1.1" 200 211068 "-" "-" tail –f /var/log/httpd/access_log | grep –E “192.168.10.50|192.168.10.51”
  • 36. Detecting Issues and AdHoc Reporting What? We have Issues? ▪ Watching the boot action flag [root@stacki]# stack list host boot chef1-* HOST ACTION chef1-2: install chef1-1: os 192.168.10.50 - - [09/Feb/2016:20:39:52 -0700] "GET /install/sbin/public/setPxeboot.cgi?params={"action":"os"} HTTP/1.1" 200 1 /var/log/httpd/ssl_access_log
  • 37. Detecting Issues and AdHoc Reporting What? We have Issues? ▪ Issues we encountered • TORs ip helper-address not set properly • ACL mis-match between racks causing DHCP/TFTP to be blocked • Mis-configured host networks causing the gateways to be wrong which prevented DHCP/PXE from working properly • Post boot zfs commands not running properly due to hardware missing drives
  • 38. Detecting Issues and AdHoc Reporting AdHoc Reporting ▪ Find all hosts that still have the “install” flag and generate a report for h in `stack list host boot |grep -w install|awk '{print $1}'|sed s/://`; do for ip in `stack list host interface $h|grep eth0|awk '{print $5}'`; do echo -e "Host: $hnChecking for IP: $ip"; echo ""; cat /var/log/messages /var/log/httpd/ssl_access_log /var/log/httpd/access_log|grep -iw $ip; echo ""; done; done > host_report.txt
  • 39. Host: test1 Checking for IP: 192.168.10.50 Feb 9 19:32:12 stacki-host dhcpd: DHCPOFFER on 192.168.10.50 to ba:c2:3d:c3:ab:13 via 192.168.10.1 Feb 9 19:32:12 stacki-host dhcpd: DHCPOFFER on 192.168.10.50 to ba:c2:3d:c3:ab:13 via 192.168.10.1 Feb 9 19:32:16 stacki-host dhcpd: DHCPREQUEST for 192.168.10.50 (192.168.10.5) from ba:c2:3d:c3:ab:13 via 192.168.10.1 Feb 9 19:32:16 stacki-host dhcpd: DHCPACK on 192.168.10.50to ba:c2:3d:c3:ab:13 via 192.168.10.1 Feb 9 19:32:16 stacki-host dhcpd: DHCPREQUEST for 192.168.10.50 (192.168.10.5) from ba:c2:3d:c3:ab:13 via 192.168.10.1 Feb 9 19:32:16 stacki-host dhcpd: DHCPACK on 192.168.10.50 to ba:c2:3d:c3:ab:13 via 192.168.10.1 192.168.10.50 - - [09/Feb/2016:19:32:54 -0700] "GET /install/sbin/kickstart.cgi?arch=x86_64&np=40 HTTP/1.1" 200 96101 192.168.10.50 - - [09/Feb/2016:19:33:13 -0700] "GET /install/distributions/prod/x86_64/images/updates.img HTTP/1.1" 404 329 "-" "-” 192.168.10.50 - - [09/Feb/2016:19:33:33 -0700] "GET /install/distributions/prod/x86_64/images/product.img HTTP/1.1" 200 782336 "-" "-" 192.168.10.50 - - [09/Feb/2016:19:33:35 -0700] "GET /install/distributions/prod/x86_64/images/install.img HTTP/1.1" 200 236163072 "-" "-" Host: test2 Checking for IP: 192.168.10.51 Host: test3 Checking for IP: 192.168.10.52
  • 40. Detecting Issues and AdHoc Reporting AdHoc Reporting ▪ Find the top racks with the most un-provisioned hosts. Helps us identify racks with potential ACL issues. [root@stacki]# stack list network|awk '{print $1}’ NETWORK rack1-prod_vlan1: rack2-prod_vlan2: rack3-prod_vlan1: rack4-prod_vlan2: rack5-prod_vlan2: [root@stacki]# for h in `stack list host boot |grep -w install|awk '{print $1}'|sed s/://`; do stack list host interface $h; done |grep eth0|awk '{print $3}'|cut -d- -f 1|sort|uniq -c|sort -rn|head 40 rack2 9 rack3 7 rack5 6 rack1 6 rack4
  • 41. Lessons Learned ▪ With thousands of servers, you need a standard naming convention for hosts, networks, appliance types, etc. ▪ Standardized servers saves you time and headaches. ▪ Created custom scripts to augment stacki functionality and reduce human errors • create-stack-appliances.sh: This script will look for appliance types in the extend-backend.xml file, check to see if they already exist and if not, create them in Stacki. • create-stack-networks.sh: This script will import a list of networks from a csv file you specify. • stack-hosts.sh: This script enables or disables provisioning of hosts listed in a file and can optionally set the nuke attributes. ▪ Stacki by default does not allow you to have a high number of concurrent kickstart sessions. ▪ When making config changes, verify proper syntax and expected output by running: stack list host profile <hostname> | less