hadoop/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-submarine/installation/scripts/calico.sh

225 lines
6.6 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
## @description download calico bin
## @audience public
## @stability stable
function download_calico_bin()
{
# submarin http server
if [[ -n "$DOWNLOAD_HTTP" ]]; then
MY_CALICOCTL_DOWNLOAD_URL=${DOWNLOAD_HTTP}/downloads/calico/calicoctl
MY_CALICO_DOWNLOAD_URL=${DOWNLOAD_HTTP}/downloads/calico/calico
MY_CALICO_IPAM_DOWNLOAD_URL=${DOWNLOAD_HTTP}/downloads/calico/calico-ipam
else
MY_CALICOCTL_DOWNLOAD_URL=${CALICOCTL_DOWNLOAD_URL}
MY_CALICO_DOWNLOAD_URL=${CALICO_DOWNLOAD_URL}
MY_CALICO_IPAM_DOWNLOAD_URL=${CALICO_IPAM_DOWNLOAD_URL}
fi
mkdir -p ${DOWNLOAD_DIR}/calico
if [[ -f ${DOWNLOAD_DIR}/calico/calico ]]; then
echo "${DOWNLOAD_DIR}/calico/calico is exist."
else
echo "download ${MY_CALICO_DOWNLOAD_URL} ..."
wget -P ${DOWNLOAD_DIR}/calico ${MY_CALICO_DOWNLOAD_URL}
fi
if [[ -f ${DOWNLOAD_DIR}/calico/calicoctl ]]; then
echo "${DOWNLOAD_DIR}/calico is exist."
else
echo "download ${MY_CALICOCTL_DOWNLOAD_URL} ..."
wget -P ${DOWNLOAD_DIR}/calico ${MY_CALICOCTL_DOWNLOAD_URL}
fi
if [[ -f ${DOWNLOAD_DIR}/calico/calico-ipam ]]; then
echo "${DOWNLOAD_DIR}/calico/calico-ipam is exist."
else
echo "download ${MY_CALICO_IPAM_DOWNLOAD_URL} ..."
wget -P ${DOWNLOAD_DIR}/calico ${MY_CALICO_IPAM_DOWNLOAD_URL}
fi
}
## @description install calico bin
## @audience public
## @stability stable
function install_calico_bin()
{
download_calico_bin
cp -f ${DOWNLOAD_DIR}/calico/calico /usr/bin/calico
cp -f ${DOWNLOAD_DIR}/calico/calicoctl /usr/bin/calicoctl
cp -f ${DOWNLOAD_DIR}/calico/calico-ipam /usr/bin/calico-ipam
chmod +x /usr/bin/calico
chmod +x /usr/bin/calicoctl
chmod +x /usr/bin/calico-ipam
}
## @description install calico config
## @audience public
## @stability stable
function install_calico_config()
{
mkdir -p /etc/calico
cp -rf ${PACKAGE_DIR}/calico ${INSTALL_TEMP_DIR}/
# 1. replace etcdEndpoints
# etcdEndpoints: https://10.196.69.173:2379,https://10.196.69.174:2379,https://10.196.69.175:2379
etcdEndpoints=''
index=0
etcdHostsSize=${#ETCD_HOSTS[@]}
for item in ${ETCD_HOSTS[@]}
do
index=$(($index+1))
etcdEndpoints="${etcdEndpoints}http:\/\/${item}:2379"
if [[ ${index} -lt ${etcdHostsSize} ]]; then
etcdEndpoints=${etcdEndpoints}","
fi
done
# echo "etcdEndpoints=${etcdEndpoints}"
sed -i "s/ETCD_ENDPOINTS_REPLACE/${etcdEndpoints}/g" $INSTALL_TEMP_DIR/calico/calicoctl.cfg >>$LOG
if [[ ! -d /etc/calico ]]; then
mkdir /etc/calico
else
rm -rf /etc/calico/*
fi
cp -f $INSTALL_TEMP_DIR/calico/calicoctl.cfg /etc/calico/calicoctl.cfg
sed -i "s/ETCD_ENDPOINTS_REPLACE/${etcdEndpoints}/g" $INSTALL_TEMP_DIR/calico/calico-node.service >>$LOG
sed -i "s/CALICO_IPV4POOL_CIDR_REPLACE/${CALICO_IPV4POOL_CIDR}/g" $INSTALL_TEMP_DIR/calico/calico-node.service >>$LOG
cp $INSTALL_TEMP_DIR/calico/calico-node.service /etc/systemd/system/ >>$LOG
systemctl daemon-reload
systemctl enable calico-node.service
}
## @description modify kernel network config
## @audience public
## @stability stable
function kernel_network_config()
{
if [ `grep -c "net.ipv4.conf.all.rp_filter=1" /etc/sysctl.conf` -eq '0' ]; then
echo "net.ipv4.conf.all.rp_filter=1" >>/etc/sysctl.conf
fi
if [ `grep -c "net.ipv4.ip_forward=1" /etc/sysctl.conf` -eq '0' ]; then
echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf
fi
sysctl -p
}
## @description check if the calico-network exist
## @audience public
## @stability stable
function calico_network_exist()
{
local dockerNetwokInfo=`docker network ls --filter NAME=${CALICO_NETWORK_NAME}`
echo ${dockerNetwokInfo} | grep ${CALICO_NETWORK_NAME}
}
## @description verification calico
## @audience public
## @stability stable
function verification_calico()
{
echo " ===== Check if the network between 2 containers can be connected ====="
local claicoNetworkExist=`calico_network_exist`
if [[ "$claicoNetworkExist" = "" ]]; then
echo "Create a calico network"
docker network create --driver calico --ipam-driver calico-ipam ${CALICO_NETWORK_NAME}
else
echo "calico network ${CALICO_NETWORK_NAME} is exist."
fi
local verifyA="verify-calico-network-A"
local verifyAInfo=`containers_exist ${verifyA}`
if [[ -n "$verifyAInfo" ]]; then
echo "Delete existing container ${verifyA}."
docker stop ${verifyA}
docker rm ${verifyA}
fi
echo "Create containers verify-calico-network-A"
docker run --net ${CALICO_NETWORK_NAME} --name ${verifyA} -tid busybox
local verifyB="verify-calico-network-B"
local verifyBInfo=`containers_exist ${verifyB}`
if [[ -n "$verifyBInfo" ]]; then
echo "Delete existing container ${verifyB}."
docker stop ${verifyB}
docker rm ${verifyB}
fi
echo "Create containers verify-calico-network-B"
docker run --net ${CALICO_NETWORK_NAME} --name ${verifyB} -tid busybox
echo -e "\033[33m${verifyA} ping ${verifyB}\033[0m"
docker exec ${verifyA} ping ${verifyB} -c 5
}
## @description install calico
## @audience public
## @stability stable
function install_calico()
{
kernel_network_config
install_calico_bin
install_calico_config
start_calico
verification_calico
}
## @description uninstall calico
## @audience public
## @stability stable
function uninstall_calico()
{
echo "stop calico-node.service"
systemctl stop calico-node.service
echo "rm /usr/bin/calico ..."
rm /usr/bin/calicoctl
rm /usr/bin/calico
rm /usr/bin/calico-ipam
rm -rf /etc/calico/
rm /etc/systemd/system/calico-node.service
systemctl daemon-reload
}
## @description start calico
## @audience public
## @stability stable
function start_calico()
{
systemctl restart calico-node.service
systemctl status calico-node.service
}
## @description stop calico
## @audience public
## @stability stable
function stop_calico()
{
systemctl stop calico-node.service
systemctl status calico-node.service
}