calico.sh 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. #!/usr/bin/env bash
  2. # Licensed to the Apache Software Foundation (ASF) under one
  3. # or more contributor license agreements. See the NOTICE file
  4. # distributed with this work for additional information
  5. # regarding copyright ownership. The ASF licenses this file
  6. # to you under the Apache License, Version 2.0 (the
  7. # "License"); you may not use this file except in compliance
  8. # with the License. You may obtain a copy of the License at
  9. #
  10. # http://www.apache.org/licenses/LICENSE-2.0
  11. #
  12. # Unless required by applicable law or agreed to in writing, software
  13. # distributed under the License is distributed on an "AS IS" BASIS,
  14. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. # See the License for the specific language governing permissions and
  16. # limitations under the License.
  17. ## @description download calico bin
  18. ## @audience public
  19. ## @stability stable
  20. function download_calico_bin()
  21. {
  22. # submarin http server
  23. if [[ -n "$DOWNLOAD_HTTP" ]]; then
  24. MY_CALICOCTL_DOWNLOAD_URL=${DOWNLOAD_HTTP}/downloads/calico/calicoctl
  25. MY_CALICO_DOWNLOAD_URL=${DOWNLOAD_HTTP}/downloads/calico/calico
  26. MY_CALICO_IPAM_DOWNLOAD_URL=${DOWNLOAD_HTTP}/downloads/calico/calico-ipam
  27. else
  28. MY_CALICOCTL_DOWNLOAD_URL=${CALICOCTL_DOWNLOAD_URL}
  29. MY_CALICO_DOWNLOAD_URL=${CALICO_DOWNLOAD_URL}
  30. MY_CALICO_IPAM_DOWNLOAD_URL=${CALICO_IPAM_DOWNLOAD_URL}
  31. fi
  32. mkdir -p ${DOWNLOAD_DIR}/calico
  33. if [[ -f ${DOWNLOAD_DIR}/calico/calico ]]; then
  34. echo "${DOWNLOAD_DIR}/calico/calico is exist."
  35. else
  36. echo "download ${MY_CALICO_DOWNLOAD_URL} ..."
  37. wget -P ${DOWNLOAD_DIR}/calico ${MY_CALICO_DOWNLOAD_URL}
  38. fi
  39. if [[ -f ${DOWNLOAD_DIR}/calico/calicoctl ]]; then
  40. echo "${DOWNLOAD_DIR}/calico is exist."
  41. else
  42. echo "download ${MY_CALICOCTL_DOWNLOAD_URL} ..."
  43. wget -P ${DOWNLOAD_DIR}/calico ${MY_CALICOCTL_DOWNLOAD_URL}
  44. fi
  45. if [[ -f ${DOWNLOAD_DIR}/calico/calico-ipam ]]; then
  46. echo "${DOWNLOAD_DIR}/calico/calico-ipam is exist."
  47. else
  48. echo "download ${MY_CALICO_IPAM_DOWNLOAD_URL} ..."
  49. wget -P ${DOWNLOAD_DIR}/calico ${MY_CALICO_IPAM_DOWNLOAD_URL}
  50. fi
  51. }
  52. ## @description install calico bin
  53. ## @audience public
  54. ## @stability stable
  55. function install_calico_bin()
  56. {
  57. download_calico_bin
  58. cp -f ${DOWNLOAD_DIR}/calico/calico /usr/bin/calico
  59. cp -f ${DOWNLOAD_DIR}/calico/calicoctl /usr/bin/calicoctl
  60. cp -f ${DOWNLOAD_DIR}/calico/calico-ipam /usr/bin/calico-ipam
  61. chmod +x /usr/bin/calico
  62. chmod +x /usr/bin/calicoctl
  63. chmod +x /usr/bin/calico-ipam
  64. }
  65. ## @description install calico config
  66. ## @audience public
  67. ## @stability stable
  68. function install_calico_config()
  69. {
  70. mkdir -p /etc/calico
  71. cp -rf ${PACKAGE_DIR}/calico ${INSTALL_TEMP_DIR}/
  72. # 1. replace etcdEndpoints
  73. # etcdEndpoints: https://10.196.69.173:2379,https://10.196.69.174:2379,https://10.196.69.175:2379
  74. etcdEndpoints=''
  75. index=0
  76. etcdHostsSize=${#ETCD_HOSTS[@]}
  77. for item in ${ETCD_HOSTS[@]}
  78. do
  79. index=$(($index+1))
  80. etcdEndpoints="${etcdEndpoints}http:\/\/${item}:2379"
  81. if [[ ${index} -lt ${etcdHostsSize} ]]; then
  82. etcdEndpoints=${etcdEndpoints}","
  83. fi
  84. done
  85. # echo "etcdEndpoints=${etcdEndpoints}"
  86. sed -i "s/ETCD_ENDPOINTS_REPLACE/${etcdEndpoints}/g" $INSTALL_TEMP_DIR/calico/calicoctl.cfg >>$LOG
  87. if [[ ! -d /etc/calico ]]; then
  88. mkdir /etc/calico
  89. else
  90. rm -rf /etc/calico/*
  91. fi
  92. cp -f $INSTALL_TEMP_DIR/calico/calicoctl.cfg /etc/calico/calicoctl.cfg
  93. sed -i "s/ETCD_ENDPOINTS_REPLACE/${etcdEndpoints}/g" $INSTALL_TEMP_DIR/calico/calico-node.service >>$LOG
  94. sed -i "s/CALICO_IPV4POOL_CIDR_REPLACE/${CALICO_IPV4POOL_CIDR}/g" $INSTALL_TEMP_DIR/calico/calico-node.service >>$LOG
  95. cp $INSTALL_TEMP_DIR/calico/calico-node.service /etc/systemd/system/ >>$LOG
  96. systemctl daemon-reload
  97. systemctl enable calico-node.service
  98. }
  99. ## @description modify kernel network config
  100. ## @audience public
  101. ## @stability stable
  102. function kernel_network_config()
  103. {
  104. if [ `grep -c "net.ipv4.conf.all.rp_filter=1" /etc/sysctl.conf` -eq '0' ]; then
  105. echo "net.ipv4.conf.all.rp_filter=1" >>/etc/sysctl.conf
  106. fi
  107. if [ `grep -c "net.ipv4.ip_forward=1" /etc/sysctl.conf` -eq '0' ]; then
  108. echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf
  109. fi
  110. sysctl -p
  111. }
  112. ## @description check if the calico-network exist
  113. ## @audience public
  114. ## @stability stable
  115. function calico_network_exist()
  116. {
  117. local dockerNetwokInfo=`docker network ls --filter NAME=${CALICO_NETWORK_NAME}`
  118. echo ${dockerNetwokInfo} | grep ${CALICO_NETWORK_NAME}
  119. }
  120. ## @description verification calico
  121. ## @audience public
  122. ## @stability stable
  123. function verification_calico()
  124. {
  125. echo " ===== Check if the network between 2 containers can be connected ====="
  126. local claicoNetworkExist=`calico_network_exist`
  127. if [[ "$claicoNetworkExist" = "" ]]; then
  128. echo "Create a calico network"
  129. docker network create --driver calico --ipam-driver calico-ipam ${CALICO_NETWORK_NAME}
  130. else
  131. echo "calico network ${CALICO_NETWORK_NAME} is exist."
  132. fi
  133. local verifyA="verify-calico-network-A"
  134. local verifyAInfo=`containers_exist ${verifyA}`
  135. if [[ -n "$verifyAInfo" ]]; then
  136. echo "Delete existing container ${verifyA}."
  137. docker stop ${verifyA}
  138. docker rm ${verifyA}
  139. fi
  140. echo "Create containers verify-calico-network-A"
  141. docker run --net ${CALICO_NETWORK_NAME} --name ${verifyA} -tid busybox
  142. local verifyB="verify-calico-network-B"
  143. local verifyBInfo=`containers_exist ${verifyB}`
  144. if [[ -n "$verifyBInfo" ]]; then
  145. echo "Delete existing container ${verifyB}."
  146. docker stop ${verifyB}
  147. docker rm ${verifyB}
  148. fi
  149. echo "Create containers verify-calico-network-B"
  150. docker run --net ${CALICO_NETWORK_NAME} --name ${verifyB} -tid busybox
  151. echo -e "\033[33m${verifyA} ping ${verifyB}\033[0m"
  152. docker exec ${verifyA} ping ${verifyB} -c 5
  153. }
  154. ## @description install calico
  155. ## @audience public
  156. ## @stability stable
  157. function install_calico()
  158. {
  159. kernel_network_config
  160. install_calico_bin
  161. install_calico_config
  162. start_calico
  163. verification_calico
  164. }
  165. ## @description uninstall calico
  166. ## @audience public
  167. ## @stability stable
  168. function uninstall_calico()
  169. {
  170. echo "stop calico-node.service"
  171. systemctl stop calico-node.service
  172. echo "rm /usr/bin/calico ..."
  173. rm /usr/bin/calicoctl
  174. rm /usr/bin/calico
  175. rm /usr/bin/calico-ipam
  176. rm -rf /etc/calico/
  177. rm /etc/systemd/system/calico-node.service
  178. systemctl daemon-reload
  179. }
  180. ## @description start calico
  181. ## @audience public
  182. ## @stability stable
  183. function start_calico()
  184. {
  185. systemctl restart calico-node.service
  186. systemctl status calico-node.service
  187. }
  188. ## @description stop calico
  189. ## @audience public
  190. ## @stability stable
  191. function stop_calico()
  192. {
  193. systemctl stop calico-node.service
  194. systemctl status calico-node.service
  195. }