mirror of
https://github.com/Microsoft/sql-server-samples.git
synced 2025-12-08 14:58:54 +00:00
Merge pull request #695 from ananto-msft/master
Merging all changes for Azure-Arc related fork to microsoft/sql-server-samples
This commit is contained in:
@@ -6,17 +6,17 @@ Using this sample bash script, you will deploy a single node Kubernetes cluster
|
||||
## Pre-requisites
|
||||
|
||||
1. A vanilla Ubuntu 16.04 or 18.04 virtual or physical machine. All dependencies will be setup by the script. Using Azure Linux VMs is not yet supported.
|
||||
1. Machine should have at least 8 CPUs, 64GB RAM and 100GB disk space. After installing the images you will be left with 50GB for data/logs across all components.
|
||||
1. Machine should have at least 8 CPUs, 32GB RAM and 128GB disk space. After installing the images you will be left with 50GB for data/logs across all components.
|
||||
1. Update existing packages using commands below to ensure that the OS image is up to date
|
||||
|
||||
``` bash
|
||||
sudo apt update&&apt upgrade -y
|
||||
sudo apt update&& sudo apt upgrade -y
|
||||
sudo systemctl reboot
|
||||
```
|
||||
|
||||
## Recommended Virtual Machine settings
|
||||
|
||||
1. Use static memory configuration for the virtual machine. For example, in hyper-v installations do not use dynamic memory allocation but instead allocate the recommended 64 GB or higher.
|
||||
1. Use static memory configuration for the virtual machine. For example, in hyper-v installations do not use dynamic memory allocation but instead allocate the recommended 32 GB or higher.
|
||||
|
||||
1. Use checkpoint or snapshot capability in your hyper visor so that you can rollback the virtual machine to a clean state.
|
||||
|
||||
@@ -34,14 +34,31 @@ curl --output setup-controller.sh https://raw.githubusercontent.com/microsoft/sq
|
||||
chmod +x setup-controller.sh
|
||||
```
|
||||
|
||||
3. Run the script (make sure you are running with sudo)
|
||||
3. Run the script
|
||||
|
||||
``` bash
|
||||
sudo ./setup-controller.sh
|
||||
./setup-controller.sh
|
||||
```
|
||||
|
||||
When prompted, provide your input for the password that will be used for all external endpoints: controller, SQL Server master and gateway. The password should be sufficiently complex based on existing rules for SQL Server password. The controller username is defaulted to *controlleradmin*.
|
||||
When prompted, provide your input for the password that will be used for all external endpoints: controller, SQL Server master and gateway. The password should be sufficiently complex based on existing rules for SQL Server password.
|
||||
In case the setup-controller.sh fails and does not complete successfully, you should cleanup your enviroment using [cleanup-controller.sh](cleanup-controller.sh/) before retrying the deployment.
|
||||
|
||||
## Cleanup
|
||||
|
||||
1. The [cleanup-controller.sh](cleanup-controller.sh/) script is provided as convenience to reset the environment in case of errors. However, we recommend that you use a virtual machine for testing purposes and use the snapshot capability in your hyper-visor to rollback the virtual machine to a clean state.
|
||||
|
||||
``` bash
|
||||
curl --output cleanup-controller.sh https://raw.githubusercontent.com/microsoft/sql-server-samples/master/samples/features/azure-arc/deployment/kubeadm/ubuntu-single-node-vm/cleanup-controller.sh
|
||||
```
|
||||
|
||||
2. Make the script executable
|
||||
|
||||
``` bash
|
||||
chmod +x cleanup-controller.sh
|
||||
```
|
||||
|
||||
3. Run the script
|
||||
|
||||
``` bash
|
||||
./cleanup-controller.sh
|
||||
```
|
||||
|
||||
+16
-18
@@ -1,39 +1,37 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ "$EUID" -ne 0 ]
|
||||
then echo "Please run as root"
|
||||
exit
|
||||
fi
|
||||
DIR_PREFIX=$1
|
||||
|
||||
kubeadm reset --force
|
||||
sudo kubeadm reset --force
|
||||
|
||||
# Clean up azdata-cli package.
|
||||
#
|
||||
unalias azdata
|
||||
unalias az
|
||||
sudo dpkg --remove --force-all azdata-cli
|
||||
sudo dpkg --remove --force-all azure-cli
|
||||
|
||||
systemctl stop kubelet
|
||||
rm -rf /var/lib/cni/
|
||||
rm -rf /var/lib/etcd/
|
||||
rm -rf /run/flannel/
|
||||
rm -rf /var/lib/kubelet/*
|
||||
rm -rf /etc/cni/
|
||||
rm -rf /etc/kubernetes/
|
||||
sudo systemctl stop kubelet
|
||||
sudo rm -rf /var/lib/cni/
|
||||
sudo rm -rf /var/lib/etcd/
|
||||
sudo rm -rf /run/flannel/
|
||||
sudo rm -rf /var/lib/kubelet/*
|
||||
sudo rm -rf /etc/cni/
|
||||
sudo rm -rf /etc/kubernetes/
|
||||
|
||||
ip link set cni0 down
|
||||
sudo ip link set cni0 down
|
||||
#brctl delbr cni0
|
||||
ip link set flannel.1 down
|
||||
sudo ip link set flannel.1 down
|
||||
#brctl delbr flannel.1
|
||||
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
|
||||
sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X
|
||||
|
||||
rm -rf .azdata/
|
||||
sudo rm -rf .azdata/
|
||||
|
||||
# Remove mounts.
|
||||
#
|
||||
SERVICE_STOP_FAILED=0
|
||||
|
||||
systemctl | grep "/var/lib/kubelet/pods" | while read -r line; do
|
||||
sudo systemctl | grep "/var/lib/kubelet/pods" | while read -r line; do
|
||||
|
||||
# Retrieve the mount path
|
||||
#
|
||||
@@ -50,7 +48,7 @@ systemctl | grep "/var/lib/kubelet/pods" | while read -r line; do
|
||||
echo "Mount "$MOUNT_PATH" no longer exists."
|
||||
echo "Stopping orphaned mount service: '$SERVICE'"
|
||||
|
||||
systemctl stop $SERVICE
|
||||
sudo systemctl stop $SERVICE
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
SERVICE_STOP_FAILED=1
|
||||
|
||||
+76
-60
@@ -1,33 +1,55 @@
|
||||
#!/bin/bash
|
||||
set -Eeuo pipefail
|
||||
|
||||
if [ "$EUID" -ne 0 ]
|
||||
then echo "Please run as root"
|
||||
exit
|
||||
# Get controller username and password as input. It is used as default for the controller.
|
||||
#
|
||||
if [ -z "$CONTROLLER_USERNAME" ]
|
||||
then
|
||||
read -p "Create Username for Azure Arc Data Controller: " username
|
||||
echo
|
||||
export CONTROLLER_USERNAME=$username
|
||||
fi
|
||||
if [ -z "$CONTROLLER_PASSWORD" ]
|
||||
then
|
||||
while true; do
|
||||
read -s -p "Create Password for Azure Arc Data Controller: " password
|
||||
echo
|
||||
read -s -p "Confirm your Password: " password2
|
||||
echo
|
||||
[ "$password" = "$password2" ] && break
|
||||
echo "Password mismatch. Please try again."
|
||||
done
|
||||
export CONTROLLER_PASSWORD=$password
|
||||
fi
|
||||
|
||||
# Prompt for private preview repository username and password provided by Microsoft
|
||||
#
|
||||
if [ -z "$DOCKER_USERNAME" ]
|
||||
then
|
||||
read -p 'Enter Azure Arc Data Controller repo username provided by Microsoft:' AADC_USERNAME
|
||||
echo
|
||||
export DOCKER_USERNAME=$AADC_USERNAME
|
||||
fi
|
||||
if [ -z "$DOCKER_PASSWORD" ]
|
||||
then
|
||||
read -sp 'Enter Azure Arc Data Controller repo password provided by Microsoft:' AADC_PASSWORD
|
||||
echo
|
||||
export DOCKER_PASSWORD=$AADC_PASSWORD
|
||||
fi
|
||||
|
||||
set -Eeuo pipefail
|
||||
|
||||
# This is a script to create single-node Kubernetes cluster and deploy Azure Arc Data Controller on it.
|
||||
#
|
||||
export AZUREARCDATACONTROLLER_DIR=aadatacontroller
|
||||
|
||||
# Get password as input. It is used as default for controller, SQL Server Master instance (sa account).
|
||||
#
|
||||
while true; do
|
||||
read -s -p "Create Password for Azure Arc Data Controller: " password
|
||||
echo
|
||||
read -s -p "Confirm your Password: " password2
|
||||
echo
|
||||
[ "$password" = "$password2" ] && break
|
||||
echo "Password mismatch. Please try again."
|
||||
done
|
||||
|
||||
# Name of virtualenv variable used.
|
||||
#
|
||||
export LOG_FILE="aadatacontroller.log"
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# Requirements file.
|
||||
export AZDATA_PRIVATE_PREVIEW_DEB_PACKAGE="https://aka.ms/aadatacontrollerazdata"
|
||||
export OSCODENAME=$(lsb_release -cs)
|
||||
export AZDATA_PRIVATE_PREVIEW_DEB_PACKAGE="https://aka.ms/azdata-"$OSCODENAME
|
||||
|
||||
# Kube version.
|
||||
#
|
||||
@@ -41,9 +63,6 @@ RETRY_INTERVAL=5
|
||||
|
||||
# Variables used for azdata cluster creation.
|
||||
#
|
||||
export CONTROLLER_USERNAME=controlleradmin
|
||||
export CONTROLLER_PASSWORD=$password
|
||||
|
||||
export ACCEPT_EULA=yes
|
||||
export CLUSTER_NAME=azure-arc-system
|
||||
export PV_COUNT="40"
|
||||
@@ -64,9 +83,9 @@ echo "Starting installing packages..."
|
||||
|
||||
# Install docker.
|
||||
#
|
||||
apt-get update -q
|
||||
sudo apt-get update -q
|
||||
|
||||
apt --yes install \
|
||||
sudo apt --yes install \
|
||||
software-properties-common \
|
||||
apt-transport-https \
|
||||
ca-certificates \
|
||||
@@ -74,21 +93,14 @@ apt --yes install \
|
||||
|
||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
|
||||
|
||||
add-apt-repository \
|
||||
sudo add-apt-repository \
|
||||
"deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
|
||||
|
||||
apt update -q
|
||||
apt-get install -q --yes docker-ce=18.06.2~ce~3-0~ubuntu --allow-downgrades
|
||||
apt-mark hold docker-ce
|
||||
sudo apt update -q
|
||||
sudo apt-get install -q --yes docker-ce=18.06.2~ce~3-0~ubuntu --allow-downgrades
|
||||
sudo apt-mark hold docker-ce
|
||||
|
||||
usermod --append --groups docker $USER
|
||||
|
||||
# Prompt for private preview repository username and password provided by Microsoft
|
||||
#
|
||||
read -p 'Enter Azure Arc Data Controller repo username provided by Microsoft:' AADC_USERNAME
|
||||
read -sp 'Enter Azure Arc Data Controller repo password provided by Microsoft:' AADC_PASSWORD
|
||||
export DOCKER_USERNAME=$AADC_USERNAME
|
||||
export DOCKER_PASSWORD=$AADC_PASSWORD
|
||||
sudo usermod --append --groups docker $USER
|
||||
|
||||
# Create working directory
|
||||
#
|
||||
@@ -96,8 +108,14 @@ rm -f -r setupscript
|
||||
mkdir -p setupscript
|
||||
cd setupscript/
|
||||
|
||||
# Download and install azdata prerequisites
|
||||
#
|
||||
sudo apt install -y libodbc1 odbcinst odbcinst1debian2 unixodbc
|
||||
|
||||
# Download and install azdata package
|
||||
#
|
||||
echo ""
|
||||
echo "Downloading azdata installer from" $AZDATA_PRIVATE_PREVIEW_DEB_PACKAGE
|
||||
curl --location $AZDATA_PRIVATE_PREVIEW_DEB_PACKAGE --output azdata_setup.deb
|
||||
sudo dpkg -i azdata_setup.deb
|
||||
cd -
|
||||
@@ -105,6 +123,9 @@ cd -
|
||||
azdata --version
|
||||
echo "Azdata has been successfully installed."
|
||||
|
||||
# Install Azure CLI
|
||||
#
|
||||
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
|
||||
|
||||
# Load all pre-requisites for Kubernetes.
|
||||
#
|
||||
@@ -113,14 +134,14 @@ echo "Starting to setup pre-requisites for kubernetes..."
|
||||
|
||||
# Setup the kubernetes preprequisites.
|
||||
#
|
||||
echo $(hostname -i) $(hostname) >> /etc/hosts
|
||||
echo $(hostname -i) $(hostname) >> sudo tee -a /etc/hosts
|
||||
|
||||
swapoff -a
|
||||
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
|
||||
sudo sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
|
||||
|
||||
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
|
||||
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
|
||||
|
||||
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
|
||||
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
|
||||
|
||||
deb http://apt.kubernetes.io/ kubernetes-xenial main
|
||||
|
||||
@@ -128,17 +149,17 @@ EOF
|
||||
|
||||
# Install docker and packages to allow apt to use a repository over HTTPS.
|
||||
#
|
||||
apt-get update -q
|
||||
sudo apt-get update -q
|
||||
|
||||
apt-get install -q -y ebtables ethtool
|
||||
sudo apt-get install -q -y ebtables ethtool
|
||||
|
||||
#apt-get install -y docker.ce
|
||||
|
||||
apt-get install -q -y apt-transport-https
|
||||
sudo apt-get install -q -y apt-transport-https
|
||||
|
||||
# Setup daemon.
|
||||
#
|
||||
cat > /etc/docker/daemon.json <<EOF
|
||||
sudo tee /etc/docker/daemon.json <<EOF
|
||||
{
|
||||
"exec-opts": ["native.cgroupdriver=systemd"],
|
||||
"log-driver": "json-file",
|
||||
@@ -149,19 +170,19 @@ cat > /etc/docker/daemon.json <<EOF
|
||||
}
|
||||
EOF
|
||||
|
||||
mkdir -p /etc/systemd/system/docker.service.d
|
||||
sudo mkdir -p /etc/systemd/system/docker.service.d
|
||||
|
||||
# Restart docker.
|
||||
#
|
||||
systemctl daemon-reload
|
||||
systemctl restart docker
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart docker
|
||||
|
||||
apt-get install -q -y kubelet=$KUBE_DPKG_VERSION kubeadm=$KUBE_DPKG_VERSION kubectl=$KUBE_DPKG_VERSION
|
||||
sudo apt-get install -q -y kubelet=$KUBE_DPKG_VERSION kubeadm=$KUBE_DPKG_VERSION kubectl=$KUBE_DPKG_VERSION
|
||||
|
||||
# Holding the version of kube packages.
|
||||
#
|
||||
apt-mark hold kubelet kubeadm kubectl
|
||||
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash
|
||||
sudo apt-mark hold kubelet kubeadm kubectl
|
||||
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | sudo bash
|
||||
|
||||
. /etc/os-release
|
||||
if [ "$UBUNTU_CODENAME" == "bionic" ]; then
|
||||
@@ -174,12 +195,12 @@ sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
|
||||
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
|
||||
sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=1
|
||||
|
||||
echo net.ipv6.conf.all.disable_ipv6=1 >> /etc/sysctl.conf
|
||||
echo net.ipv6.conf.default.disable_ipv6=1 >> /etc/sysctl.conf
|
||||
echo net.ipv6.conf.lo.disable_ipv6=1 >> /etc/sysctl.conf
|
||||
echo net.ipv6.conf.all.disable_ipv6=1 | sudo tee -a /etc/sysctl.conf
|
||||
echo net.ipv6.conf.default.disable_ipv6=1 | sudo tee -a /etc/sysctl.conf
|
||||
echo net.ipv6.conf.lo.disable_ipv6=1 | sudo tee -a /etc/sysctl.conf
|
||||
|
||||
|
||||
sysctl net.bridge.bridge-nf-call-iptables=1
|
||||
sudo sysctl net.bridge.bridge-nf-call-iptables=1
|
||||
|
||||
# Setting up the persistent volumes for the kubernetes.
|
||||
#
|
||||
@@ -187,9 +208,9 @@ for i in $(seq 1 $PV_COUNT); do
|
||||
|
||||
vol="vol$i"
|
||||
|
||||
mkdir -p /mnt/local-storage/$vol
|
||||
sudo mkdir -p /mnt/local-storage/$vol
|
||||
|
||||
mount --bind /mnt/local-storage/$vol /mnt/local-storage/$vol
|
||||
sudo mount --bind /mnt/local-storage/$vol /mnt/local-storage/$vol
|
||||
|
||||
done
|
||||
echo "Kubernetes pre-requisites have been completed."
|
||||
@@ -205,10 +226,9 @@ echo "Starting to setup Kubernetes master..."
|
||||
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=$KUBE_VERSION
|
||||
|
||||
mkdir -p $HOME/.kube
|
||||
mkdir -p /home/$SUDO_USER/.kube
|
||||
|
||||
sudo cp -f /etc/kubernetes/admin.conf $HOME/.kube/config
|
||||
sudo chown $(id -u $SUDO_USER):$(id -g $SUDO_USER) $HOME/.kube/config
|
||||
sudo chown $(id -u $USER):$(id -g $USER) $HOME/.kube/config
|
||||
|
||||
# To enable a single node cluster remove the taint that limits the first node to master only service.
|
||||
#
|
||||
@@ -266,7 +286,7 @@ echo "Starting to deploy azdata cluster..."
|
||||
|
||||
# Command to create cluster for single node cluster.
|
||||
#
|
||||
azdata control create -n $CLUSTER_NAME -c azure-arc-kubeadm-private-preview --accept-eula $ACCEPT_EULA
|
||||
azdata control create -n $CLUSTER_NAME -c azure-arc-kubeadm-private-preview-acr --accept-eula $ACCEPT_EULA
|
||||
echo "Azure Arc Data Controller cluster created."
|
||||
|
||||
# Setting context to cluster.
|
||||
@@ -277,9 +297,5 @@ kubectl config set-context --current --namespace $CLUSTER_NAME
|
||||
#
|
||||
azdata login -n $CLUSTER_NAME
|
||||
|
||||
if [ -d "$HOME/.azdata/" ]; then
|
||||
sudo chown -R $(id -u $SUDO_USER):$(id -g $SUDO_USER) $HOME/.azdata/
|
||||
fi
|
||||
|
||||
echo "Cluster successfully setup. Run 'azdata --help' to see all available options."
|
||||
}| tee $LOG_FILE
|
||||
|
||||
@@ -4,11 +4,11 @@ In this example, we will deploy Kubernetes over multiple Linux machines (physica
|
||||
|
||||
## Pre-requisites
|
||||
|
||||
1. Multiple Ubuntu Linux machines or virtual machines. Recommended configuration is 8 CPUs, 32 GB memory each and at least 100 GB storage for each machine. Minimum number of machines required is three machines
|
||||
1. Multiple Ubuntu Linux machines or virtual machines. Recommended configuration is 8 CPUs, 32 GB memory each and at least 128 GB storage for each machine. Minimum number of machines required is three machines
|
||||
1. Designate one machine as the Kubernetes master
|
||||
1. Rest of the machines will be used as the Kubernetes agents
|
||||
|
||||
**NOTE: Ensure there is sufficient local storage on your agents. Each volume will use up to 10GB by default. The script creates 25 volumes. Not all of the volumes will be used since it depends on the number of pods being deployed on each agent node. It is recommended to have at least 200 GB of storage on the agent nodes**
|
||||
**NOTE: Ensure there is sufficient local storage on your agents. Each volume will use up to 10GB by default. The script creates 40 volumes. Not all of the volumes will be used since it depends on the number of pods being deployed on each agent node. It is recommended to have at least 200 GB of storage on the agent nodes**
|
||||
|
||||
### Useful resources
|
||||
|
||||
|
||||
Reference in New Issue
Block a user