首页 文章 精选 留言 我的

精选列表

搜索[快速],共10000篇文章
优秀的个人博客,低调大师

记一种分布式超大规模数据的实时快速排序算法

引言 对数据进行处理的同学,经常会遇到排序需求,无论是内存数据还是磁盘数据。 对于单点的数据,我们的处理比较简单,比如: select field_a from table_b order by field_a limit 100, 10; db.collection_b.find().sort({"field_a":1}).skip(100).limit(10); 存储服务的处理流程一般可抽象如下: 信息爆炸的时代,数据早已不是单点所能承载的了,数据一般分布在大量节点上,假设某库中的数据均匀地分布在以下的所有节点上。 这时sort, limit的一般方法是选择一个中间节点或者中间件来做合并处理: 一般处理流程的动态表示如下: 我们将过程抽象,流程简化如下: 注意第三步在数据节点中的查询结果范围为[0,skip+limit]。当我们想查询[skip

优秀的个人博客,低调大师

Shell脚本快速部署Kubernetes(K8S v1.1版本)集群系统

提醒:即使按照本篇文章一步一步做,也不一定部署成功。原因你懂得!如果失败,也建议你仔细看看脚本内容,从中寻找解决办法。同时,相信你也会从脚本中获取到其他有价值的信息。 实验环境: 操作系统:Ubuntu14.04_x64 master:192.168.1.150 minion01: 192.168.1.151 容器网段:172.17.1.0/24 minion02: 192.168.1.152 容器网段:172.17.2.0/24 安装包下载: etcd:http://pan.baidu.com/s/1c1wITMw kubernetes:http://pan.baidu.com/s/1kUoxgYb 相关脚本下载:http://pan.baidu.com/s/1o7nEaca 脚本说明: config_ssh_root_remote.sh #配置root SSH登录(默认ubuntu系统禁止root SSH登录) ssh_keypair_auth.sh #配置master主机与minion主机SSH免交互认证 kubernetes-install.sh #安装kubernetes的master端与minion端 config_gre_channel.sh #配置两台Docker主机容器实现跨主机访问(OVS) 安装步骤(请按照步骤做): 1)在minion主机root权限开启root允许SSH远程登录 操作命令:$ sudo bash config_ssh_root_remote.sh 脚本内容:$ cat config_ssh_root_remote.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 #!/bin/bash #Description:configurationrootaccountsshremotelogin if [$USER!= "root" ]; then echo "Pleaseuserootaccountoperationorsudo!" exit 1 fi function color_echo(){ if [$1== "green" ]; then echo -e "\033[32;40m$2\033[0m" elif [$1== "red" ]; then echo -e "\033[31;40m$2\033[0m" fi } function check_pkg(){ if !$(dpkg-l$PKG_NAME> /dev/null 2>&1); then echo no else echo yes fi } function install_pkg(){ local PKG_NAME=$1 if [$(check_pkg$PKG_NAME)== "no" ]; then apt-get install $PKG_NAME-y if [$(check_pkg$PKG_NAME)== "no" ]; then color_echogreen "$PKG_NAMEinstallationfailure!Trytoinstallagain." apt-getautoremove&&apt-getupdate apt-get install $PKG_NAME--force- yes -y [$(check_pkg$PKG_NAME)== "no" ]&&color_echored "The$PKG_NAMEinstallationfailure!" && exit 1 fi fi } install_pkgexpect #modifysshconfigfile sed -r-i 's/(PermitRootLogin).*/\1yes/' /etc/ssh/sshd_config service ssh restart> /dev/null #setrootaccountpassword echo "------------------------------------------------------>" while true ; do read -p "Pleaseenteryouwanttosettherootaccountpassword:" ROOT_PASS if [-n "$ROOT_PASS" ]; then break else color_echored "Passwordcannotbeempty!" continue fi done expect-c" spawn passwd root expect{ \"EnternewUNIXpassword:\"{send\"$ROOT_PASS\r\";exp_continue} \"RetypenewUNIXpassword:\"{send\"$ROOT_PASS\r\"} } expecteof "> /dev/null color_echogreen "Therootaccountpasswordis:$ROOT_PASS" 2)在master主机切换到root用户执行脚本与minion主机root用户建立SSH免交互登录 操作命令:# bashssh_keypair_auth.sh root@192.168.1.151-152@123 脚本内容:# catssh_keypair_auth.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 #!/bin/bash #Description:configurationlocalhostandremotehostsshkeypairauthentication,SupportUbuntuandCentOSoperationsystem. function color_echo(){ if [$1== "green" ]; then echo -e "\033[32;40m$2\033[0m" elif [$1== "red" ]; then echo -e "\033[31;40m$2\033[0m" fi } function os_version(){ local OS_V=$( cat /etc/issue | awk 'NR==1{print$1}' ) if [$OS_V== "\S" -o$OS_V== "CentOS" ]; then echo "CentOS" elif [$OS_V== "Ubuntu" ]; then echo "Ubuntu" fi } function check_ssh_auth(){ if $( grep "Permissiondenied" $EXP_TMP_FILE> /dev/null ); then color_echored "Host$IPSSHauthenticationfailure!Loginpassworderror." exit 1 elif $( ssh $INFO 'echoyes>/dev/null' ); then color_echogreen "Host$IPSSHauthenticationsuccessfully." fi rm $EXP_TMP_FILE> /dev/null } function check_pkg(){ local PKG_NAME=$1 if [$(os_version)== "CentOS" ]; then if !$(rpm-ql$PKG_NAME> /dev/null 2>&1); then echo no else echo yes fi elif [$(os_version)== "Ubuntu" ]; then if !$(dpkg-l$PKG_NAME> /dev/null 2>&1); then echo no else echo yes fi fi } function install_pkg(){ local PKG_NAME=$1 if [$(os_version)== "CentOS" ]; then if [$(check_pkg$PKG_NAME)== "no" ]; then yum install $PKG_NAME-y if [$(check_pkg$PKG_NAME)== "no" ]; then color_echogreen "The$PKG_NAMEinstallationfailure!Trytoinstallagain." yummakecache yum install $PKG_NAME-y [$(check_pkg$PKG_NAME)== "no" ]&&color_echored "The$PKG_NAMEinstallationfailure!" && exit 1 fi fi elif [$(os_version)== "Ubuntu" ]; then if [$(check_pkg$PKG_NAME)== "no" ]; then apt-get install $PKG_NAME-y if [$(check_pkg$PKG_NAME)== "no" ]; then color_echogreen "$PKG_NAMEinstallationfailure!Trytoinstallagain." apt-getautoremove&&apt-getupdate apt-get install $PKG_NAME--force- yes -y [$(check_pkg$PKG_NAME)== "no" ]&&color_echored "The$PKG_NAMEinstallationfailure!" && exit 1 fi fi fi } function generate_keypair(){ if [!-e~/. ssh /id_rsa .pub]; then color_echogreen "Thepublic/privatersakeypairnotexist,startGenerating..." expect-c" spawn ssh -keygen expect{ \" ssh /id_rsa ):\"{send\"\r\";exp_continue} \"passphrase):\"{send\"\r\";exp_continue} \"again:\"{send\"\r\";exp_continue} } "> /dev/null 2>&1 if [-e~/. ssh /id_rsa .pub]; then color_echogreen "Generatingpublic/privatersakeypairsuccessfully." else color_echored "Generatingpublic/privatersakeypairfailure!" exit 1 fi fi } EXP_TMP_FILE= /tmp/expect_ssh .tmp if [[$1=~^[a-z]+@[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}@.*]]; then install_pkgexpect;generate_keypair for i in $@; do USER=$( echo $i| cut -d@-f1) IP=$( echo $i| cut -d@-f2) PASS=$( echo $i| cut -d@-f3) INFO=$USER@$IP expect-c" spawn ssh -copy- id $INFO expect{ \"( yes /no )?\"{send\" yes \r\";exp_continue} \"password:\"{send\"$PASS\r\";exp_continue} } ">$EXP_TMP_FILE #ifloginfailed,loginerrorinfoappendtempfile check_ssh_auth done elif [[$1=~^[a-z]+@[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}-[0-9]{1,3}@.*]]; then install_pkgexpect;generate_keypair START_IP_NUM=$( echo $1| sed -r 's/.*\.(.*)-(.*)@.*/\1/' ) END_IP_NUM=$( echo $1| sed -r 's/.*\.(.*)-(.*)@.*/\2/' ) for ((i=$START_IP_NUM;i<=$END_IP_NUM;i++)); do USER=$( echo $1| cut -d@-f1) PASS=$( echo $1| cut -d@-f3) IP_RANGE=$( echo $1| sed -r 's/.*@(.*\.).*/\1/' ) IP=$IP_RANGE$i INFO=$USER@$IP_RANGE$i expect-c" spawn ssh -copy- id $INFO expect{ \"( yes /no )?\"{send\" yes \r\";exp_continue} \"password:\"{send\"$PASS\r\";exp_continue} } ">$EXP_TMP_FILE check_ssh_auth done else echo "Example1:$0<root@192.168.1.10-15@password>" echo "Example2:$0<root@192.168.1.10@password>" echo "Example3:$0[root@192.168.1.10@passwordroot@192.168.1.11@passwordroot@192.168.1.12@password...]" fi 3)在master主机root权限执行脚本安装master端服务 操作命令:$ sudo bash kubernetes-install.sh master 脚本内容:$ cat kubernetes-install.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 #!/bin/bash #Description:InstallationKubernetes1.1.3 #EtcdDownload:https://github.com/coreos/etcd/releases/download/v2.2.2/etcd-v2.2.2-linux-amd64.tar.gz #K8SDownload:https://storage.googleapis.com/kubernetes-release/release/v1.1.3/kubernetes.tar.gz . /lib/lsb/init-functions if [$( cat /etc/issue | awk '{print$1}' )!= "Ubuntu" ]; then echo "Onlysupportubuntuoperatingsystem!" exit 1 fi if [$USER!= "root" ]; then echo "Pleaseuserootaccountoperation!" exit 1 fi function color_echo(){ if [$1== "green" ]; then echo -e "\033[32;40m$2\033[0m" elif [$1== "red" ]; then echo -e "\033[31;40m$2\033[0m" fi } function check_install_pkg(){ if [!-e$ETCD_FILE-a!-e$K8S_FILE]; then color_echored "$ETCD_FILEand$K8S_FILEfilenotexist!" exit 1 elif [!-e$ETCD_FILE]; then color_echored "$ETCD_FILEfilenotexist!" exit 1 elif [!-e$K8S_FILE]; then color_echored "$K8S_FILEfilenotexist!" exit 1 fi } function local_ip(){ local NUMARRAY_LENGTH NUM=0 for NIC_NAME in $( ls /sys/class/net | grep -vE "lo|docker0" ); do NIC_IP=$( ifconfig $NIC_NAME| awk -F '[:]+' '/inetaddr/{print$4}' ) if [-n "$NIC_IP" ]; then NIC_IP_ARRAY[$NUM]= "$NIC_NAME:$NIC_IP" let NUM++ fi done ARRAY_LENGTH=${ #NIC_IP_ARRAY[*]} if [$ARRAY_LENGTH- eq 1]; then LOCAL_IP=${NIC_IP_ARRAY[0] #*:} return 0 elif [$ARRAY_LENGTH- eq 0]; then color_echored "Noavailablenetworkcard!" exit 1 else #multinetworkcardselect for NIC in ${NIC_IP_ARRAY[*]}; do echo $NIC done while true ; do read -p "Pleaseenterlocalusetonetworkcardname:" INPUT_NIC_NAME for NIC in ${NIC_IP_ARRAY[*]}; do NIC_NAME=${NIC%:*} if [$NIC_NAME== "$INPUT_NIC_NAME" ]; then LOCAL_IP=${NIC_IP_ARRAY[0] #*:} return 0 fi done echo "Notmatch!Pleaseinputagain." done fi } function check_ip(){ local IP=$1 VALID_CHECK=$( echo $IP| awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print"yes"}' ) if echo $IP| grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" > /dev/null ; then if [${VALID_CHECK:-no}== "yes" ]; then return 0 else echo "IP$IPnotavailable!" return 1 fi else echo "IPformaterror!" return 1 fi } function cluster_ip(){ if [$1== "master" ]; then while true ; do read -p "PleaseentermasterIP:" MASTER_IP check_ip$MASTER_IP [$?- eq 0]&& break done elif [$1== "minion" ]; then while true ; do local MINION_NUM read -p "Pleaseenterclusterminionnodenumber:" MINION_NUM if [[$MINION_NUM=~^[0-9]+$]]; then break else color_echored "Formaterror!" fi done NUM=1 while [$NUM- le $MINION_NUM]; do local MINION_IP read -p "Pleaseenterminionhost$NUMIP:" MINION_IP check_ip$MINION_IP if [$?- eq 0]; then let NUM++ MINION_IP_ARRAY+=($MINION_IP) fi done fi } function modify_init_script(){ if [$1== "master" ]; then cd $MASTER_MODULE_INIT_SCRIPT_DIR elif [$1== "minion" ]; then cd $MINION_MODULE_INIT_SCRIPT_DIR fi for MODULE_INIT_SCRIPT in $( ls | grep - v etcd); do if [-x$MODULE_INIT_SCRIPT]; then sed -r-i '/\/sbin\/initctl/{s/(if)(.*)/\1false\&\&\2/}' $MODULE_INIT_SCRIPT fi done } function check_service_status(){ sleep 1 if [$( ps -ef| grep - v grep | grep -c "$BIN_DIR/$MODULE_INIT_SCRIPT" )- eq 1]; then log_begin_msg "Starting$MODULE_INIT_SCRIPT" log_end_msg0 #0istherightcommandexecutionstatus else log_failure_msg "$(color_echored" Starting$MODULE_INIT_SCRIPT ")" log_end_msg1 #1isthewrongcommandexecutionstatus fi } function check_exec_status(){ if [$?- ne 0]; then color_echogreen "Pleasetrytorunthescript!" exit 1 fi } BASE_DIR=$PWD ETCD_FILE=$BASE_DIR /etcd-v2 .2.2-linux-amd64. tar .gz K8S_FILE=$BASE_DIR /kubernetes . tar .gz BIN_DIR= /opt/bin INIT_SCRIPT_DIR= /etc/init .d OPTS_FILE_DIR= /etc/default MODULE_BIN_DIR=$BASE_DIR /kubernetes/server/bin MASTER_MODULE_INIT_SCRIPT_DIR=$BASE_DIR /kubernetes/cluster/ubuntu/master/init_scripts MINION_MODULE_INIT_SCRIPT_DIR=$BASE_DIR /kubernetes/cluster/ubuntu/minion/init_scripts case $1 in master) check_install_pkg pkilletcd;pkillkube cluster_ipminion #Createbinaryfiledirectory [!-d$BIN_DIR]&& mkdir $BIN_DIR #Installationstoragesystemetcd log_action_msg "Unzipthe$ETCD_FILE" tar zxf$ETCD_FILE;check_exec_status cp $BASE_DIR /etcd-v2 .2.2-linux-amd64 /etc *$BIN_DIR;check_exec_status echo " ETCD_OPTS=\"\ --listen-client-urlshttp: //0 .0.0.0:4001\ --advertise-client-urlshttp: //0 .0.0.0:4001\ --data- dir /var/lib/etcd/default .etcd\" ">$OPTS_FILE_DIR /etcd #Installationmodulekube-apiserverkube-schedulerandkube-controller-manager log_action_msg "Unzipthe$K8S_FILE" tar zxf$BASE_DIR /kubernetes . tar .gz;check_exec_status tar zxf$BASE_DIR /kubernetes/server/kubernetes-server-linux-amd64 . tar .gz;check_exec_status cd $MODULE_BIN_DIR&& cp -akubectlkube-apiserverkube-schedulerkube-controller-manager$BIN_DIR;check_exec_status #Configureinitscripts modify_init_scriptmaster cp -aetcdkube-*$INIT_SCRIPT_DIR;check_exec_status sed -i '63s/.*/"/' $INIT_SCRIPT_DIR /etcd #Removetheappendlogfile,Otherwiseetcdmaycannotbestarted #ModuleConfigureoption log_action_msg "Create$OPTS_FILE_DIR/kube-apiserverstartupoptionsfile..." echo " KUBE_APISERVER_OPTS=\"\ --insecure-bind-address=0.0.0.0\ --insecure-port=8080\ --service-cluster-ip-range=10.0.0.0 /16 \ --etcd_servers=http: //127 .0.0.1:4001\ --logtostderr= true \" ">$OPTS_FILE_DIR /kube-apiserver check_exec_status log_action_msg "Create$OPTS_FILE_DIR/kube-controller-managerstartupoptionsfile..." echo " KUBE_CONTROLLER_MANAGER_OPTS=\"\ --master=127.0.0.1:8080\ --logtostderr= true \" ">$OPTS_FILE_DIR /kube-controller-manager log_action_msg "Create$OPTS_FILE_DIR/kube-schedulerstartupoptionsfile..." echo " KUBE_SCHEDULER_OPTS=\"\ --master=127.0.0.1:8080\ --logtostderr= true \" ">$OPTS_FILE_DIR /kube-scheduler #Startingmodule for MODULE_INIT_SCRIPT in $( ls $INIT_SCRIPT_DIR| grep -E "(etcd|kube.*)" ); do service$MODULE_INIT_SCRIPTstart> /dev/null check_service_status done #setvariable echo "exportPATH=$PATH:$BIN_DIR" >> /etc/profile . /etc/profile #Copymodulekubeletandkube-proxytominion SSH_OPTS= "-oConnectTimeout=1-oConnectionAttempts=3" cd $MODULE_BIN_DIR for MINION_IP in ${MINION_IP_ARRAY[*]}; do log_action_msg "Copymoduleto$MINION_IP:$BIN_DIR..." ssh $SSH_OPTSroot@$MINION_IP "mkdir$BIN_DIR2>/dev/null" ;check_exec_status scp $SSH_OPTSkubeletkube-proxyroot@$MINION_IP:$BIN_DIR done #Copymoduleinitscriptstominion modify_init_scriptminion cd $MINION_MODULE_INIT_SCRIPT_DIR for MINION_IP in ${MINION_IP_ARRAY[*]}; do log_action_msg "Copymoduleinitscriptsto$MINION_IP:$INIT_SCRIPT_DIR..." scp $SSH_OPTSkubeletkube-proxyroot@$MINION_IP:$INIT_SCRIPT_DIR;check_exec_status done color_echogreen "Kubernetesmasterinstallationcomplete." ;; minion) cluster_ipmaster #Noticeinputmasterip local_ip pkillkube #InstallDocker if !$(dpkg-ldocker-engine> /dev/null 2>&1)&&!$(dockerinfo> /dev/null 2>&1); then log_action_msg "StarttheinstallationDocker..." apt-keyadv--keyserverhkp: //p80 .pool.sks-keyservers.net:80--recv-keys58118E89F3A912897C070ADBF76221572C52609D> /dev/null 2>&1 [$?- ne 0]&& echo "Dockersourcesecretkeyregisterfailure!" DOCKER_U_SOURCE= /tmp/docker_source .tmp echo " debhttps: //apt .dockerproject.org /repo ubuntu-precisemain debhttps: //apt .dockerproject.org /repo ubuntu-trustymain debhttps: //apt .dockerproject.org /repo ubuntu-vividmain debhttps: //apt .dockerproject.org /repo ubuntu-wilymain ">$DOCKER_U_SOURCE OS_CODE_V=$(lsb_release-cs) DOKER_SOURCE=$( grep $OS_CODE_V$DOCKER_U_SOURCE) echo "$DOKER_SOURCE" > /etc/apt/sources .list.d /docker .list rm $DOCKER_U_SOURCE apt-getupdate apt-get install docker-engine-y if $(dpkg-ldocker-engine> /dev/null )&&$(dockerinfo> /dev/null ); then color_echogreen "Dockerinstallationsuccessfully." else apt-getremove;apt-get install docker-engine--force- yes -y if !$(dpkg-ldocker-engine> /dev/null )&&!$(dockerinfo> /dev/null ); then color_echored "Dockerinstallationfailure!" exit 1 fi fi fi #ModuleConfigureoption log_action_msg "Create$OPTS_FILE_DIR/kubeletstartupoptionsfile..." echo " KUBELET_OPTS=\"\ --address=0.0.0.0\ --port=10250\ --hostname_override=$LOCAL_IP\ --api_servers=http: // $MASTER_IP:8080\ --pod-infra-container-image=docker.io /kubernetes/pause :latest\ --logtostderr= true \" ">$OPTS_FILE_DIR /kubelet log_action_msg "Create$OPTS_FILE_DIR/kube-proxystartupoptionsfile..." echo " KUBE_PROXY_OPTS=\"\ --master=http: // $MASTER_IP:8080\ --proxy-mode=iptables\ --logtostderr= true \" ">$OPTS_FILE_DIR /kube-proxy #Startingmodule for MODULE_INIT_SCRIPT in $( ls $INIT_SCRIPT_DIR| grep kube.*); do service$MODULE_INIT_SCRIPTstart> /dev/null check_service_status done color_echogreen "Kubernetesminioninstallationcomplete." ;; *) echo "Usage:$0{master|minion}" exit 1 ;; esac 4)在minion主机root权限执行脚本安装minion端服务 操作命令:$ sudo bashkubernetes-install.shminion 脚本内容:同上 5)在minion主机root权限执行脚本创建GRE通道 操作命令:$ sudo bashconfig_gre_channel.sh 脚本内容:$ cat config_gre_channel.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 #!/bin/bash #Description:configurationdockerhostbetweenGREChannel if [$( cat /etc/issue | awk '{print$1}' )!= "Ubuntu" ]; then echo "Onlysupportubuntuoperatingsystem!" exit 1 fi if [$USER!= "root" ]; then echo "Pleaseuserootaccountoperation!" exit 1 fi function color_echo(){ if [$1== "green" ]; then echo -e "\033[32;40m$2\033[0m" elif [$1== "red" ]; then echo -e "\033[31;40m$2\033[0m" fi } function check_ip(){ local IP=$1 local VALID_CHECK=$( echo $IP| awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print"yes"}' ) if echo $IP| grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" > /dev/null ; then if [${VALID_CHECK:-no}== "yes" ]; then return 0 else echo "IP$IPnotavailable!" return 1 fi else echo "IPformaterror!" return 1 fi } function docker_host_ip(){ color_echogreen "Notice:OnlysupporttwoDockerhostconfigurationGREChannel!" NUM=1 while [$NUM- le 2]; do local DOCKER_IP read -p "PleaseenterDockerhost$NUMIP:" DOCKER_HOST_IP check_ip$DOCKER_HOST_IP if [$?- eq 0]; then let NUM++ DOCKER_HOST_IP_ARRAY+=($DOCKER_HOST_IP) fi done } function local_nic_info(){ local NUMARRAY_LENGTH NUM=0 for NIC_NAME in $( ls /sys/class/net | grep -vE "lo|docker0" ); do NIC_IP=$( ifconfig $NIC_NAME| awk -F '[:]+' '/inetaddr/{print$4}' ) if [-n "$NIC_IP" ]; then NIC_IP_ARRAY[$NUM]= "$NIC_NAME:$NIC_IP" let NUM++ fi done ARRAY_LENGTH=${ #NIC_IP_ARRAY[*]} if [$ARRAY_LENGTH- eq 1]; then LOCAL_NIC=${NIC_IP_ARRAY[0]%:*} LOCAL_IP=${NIC_IP_ARRAY[0] #*:} return 0 elif [$ARRAY_LENGTH- eq 0]; then color_echored "Noavailablenetworkcard!" exit 1 else #multinetworkcardselect for NIC in ${NIC_IP_ARRAY[*]}; do echo $NIC done while true ; do read -p "Pleaseenterlocalusetonetworkcardname:" INPUT_NIC_NAME for NIC in ${NIC_IP_ARRAY[*]}; do NIC_NAME=${NIC%:*} if [$NIC_NAME== "$INPUT_NIC_NAME" ]; then LOCAL_NIC=${NIC_IP_ARRAY[0]%:*} LOCAL_IP=${NIC_IP_ARRAY[0] #*:} return 0 fi done echo "Notmatch!Pleaseinputagain." done fi } function check_pkg(){ if !$(dpkg-l$PKG_NAME> /dev/null 2>&1); then echo no else echo yes fi } function install_pkg(){ local PKG_NAME=$1 if [$(check_pkg$PKG_NAME)== "no" ]; then apt-get install $PKG_NAME-y if [$(check_pkg$PKG_NAME)== "no" ]; then color_echogreen "The$PKG_NAMEinstallationfailure!Trytoinstallagain." apt-getautoremove&&apt-getupdate apt-get install $PKG_NAME--force- yes -y [$(check_pkg$PKG_NAME)== "no" ]&&color_echored "The$PKG_NAMEinstallationfailure!" && exit 1 fi fi } function config_gre_channel(){ install_pkgopenvswitch-switch install_pkgbridge-utils if [${DOCKER_HOST_IP_ARRAY[0]}== "$LOCAL_IP" ]; then REMOTE_HOST_IP=${DOCKER_HOST_IP_ARRAY[1]} #remotehostip REMOTE_DOCKER_IP= "172.17.2.0/24" #remotedockerhostdefaultcontaineriprange LOCAL_DOCKER_IP= "172.17.1.0" #kbr0gateway elif [${DOCKER_HOST_IP_ARRAY[1]}== "$LOCAL_IP" ]; then REMOTE_HOST_IP=${DOCKER_HOST_IP_ARRAY[0]} REMOTE_DOCKER_IP= "172.17.1.0/24" LOCAL_DOCKER_IP= "172.17.2.0" else echo "IPnotmatch!Pleaseinputagain." exit 1 fi ovs-vsctladd-brobr02> /dev/null ovs-vsctladd-portobr0gre0-- set Interfacegre0 type =greoptions:remote_ip=$REMOTE_HOST_IP2> /dev/null brctladdbrkbr02> /dev/null brctladdifkbr0obr02> /dev/null iplink set devkbr0up if [$( grep -cE "kbr0" /etc/network/interfaces )- ne 2]; then echo " autokbr0 ifacekbr0inetstatic address$( echo $LOCAL_DOCKER_IP| sed 's/0$/1/' ) netmask255.255.255.0 gateway$LOCAL_DOCKER_IP bridge_portsobr0 ">> /etc/network/interfaces fi if $( ls /sys/class/net | grep docker0> /dev/null ); then servicedockerstop> /dev/null iplink set devdocker0down iplinkdeletedevdocker0 echo "DOCKER_OPTS=\"-b=kbr0\"" > /etc/default/docker servicedockerstart> /dev/null fi ifdownkbr0> /dev/null 2>&1;ifupkbr0> /dev/null 2>&1 #rebootinvalid #iprouteadd$REMOTE_DOCKER_IPvia$REMOTE_HOST_IPdev$LOCAL_NIC2>/dev/null #permanentvalid if !$( grep "$REMOTE_DOCKER_IPvia$REMOTE_HOST_IP" /etc/rc . local > /dev/null ); then sed -i "$i\iprouteadd$REMOTE_DOCKER_IPvia$REMOTE_HOST_IPdev$LOCAL_NIC" /etc/rc . local fi } #main docker_host_ip echo "--------------------------------------------" local_nic_info config_gre_channel color_echogreen "GREChannelconfigurationcomplete." brctlshow echo "-------------------------------------------------" ovs-vsctlshow 1、配置minion主机root SSH登录 先将config_gre_channel.sh、config_ssh_root_remote.sh和kubernetes-install.sh这三个文件上传各自的minion主机,以备后用。 说明:操作成功,root密码为123 2、配置master主机与minion主机SSH免交互认证 将kubernetes-install.sh、ssh_keypair_auth.sh和etcd-v2.2.2-linux-amd64.tar.gz、kubernetes.tar.gz安装包上传到master主机 3、安装master端 说明:先解压文件,在创建启动选项文件,再启动服务,最后将minion相关包通过scp工具拷贝过去。通过ps工具看到服务进程已经启动。 4、安装minion端 说明:Docker源秘钥注册失败,没关系,一般不会影响安装。当提示安装docker成功后才能继续,否则报错退出。通过ps 工具看到服务进程都已经启动。 5、配置GRE通道 说明:目前配置GRE通道脚本只支持两台Docker主机 6、查看集群是否配置成功 # 通过kubectl命令创建一个pod 说明:在master端可以看到两台minion端状态是Ready,并且创建的Pod已经成功运行。 注意:如果没有kubectl命令,先尝试执行source /etc/profile下看看,如果还没有,直接使用/opt/bin/kubectl 本文转自 李振良OK 51CTO博客,原文链接:http://blog.51cto.com/lizhenliang/1738807,如需转载请自行联系原作者

优秀的个人博客,低调大师

快速接入阿里云应用配置管理工具 轻松开启企业效率新时代

日前,阿里云正式推出了应用配置管理(Application Configuration Manangement,简称 ACM)工具产品,这是一款在分布式架构环境中对应用配置进行集中管理和推送的工具类产品,在微服务、DevOps、大数据等场景下极大地减轻配置管理的工作量,增强配置管理的服务能力。配置是管理应用变更的常见手段之一,在应用生命周期管理中,通常会将应用发布后需要改变的一些配置项或者元数据从代码中分离出来,放在单独的配置文件中管理,以便应用在发布之后,运维人员或最终用户可以通过调整配置来适配环境,调整应用程序的运行时的行为。ACM 是分布式系统的配置中心,通过提供配置变更,配置推送,历史版本管理,灰度发布,配置变更审计等配置管理工具,帮助集中化的管理所有应用环境中的配置,降低分布式系统中管理配置的成本,降低因错误的配置变更带

优秀的个人博客,低调大师

十分钟快速玩转 Aliware MQ-阿里云消息队列Demo工程实践

环境准备 本 Demo 主要目的在于帮助初次接触 Aliware MQ 的工程师,一步一步搭建 MQ 测试工程。Demo 程序以 Java 为例,包括普通消息、事务消息、定时消息的测试代码,以及相关 Spring 的配置示例。 安装 IDE 本文以 IDEA 为例。您可以使用 IDEA 或者 Eclipse。 在https://www.jetbrains.com/idea/ 下载 IDEA。请下载 Ultimate 版本。 执行 IDEA 安装包,安装 IDEA。 选择 License server 激活方式,填入 License server address(填入合法地址),例如 http://idea.iteblog.com/key.php (仅做参考)。 单击 Discover server。 单击最下方激活按钮,激活成功。 安装 Git 请按

优秀的个人博客,低调大师

软件授权管理平台 v1.0.3 发布,快速集成到任何编程语言开发的软件产品

软件授权管理系统:任何编程语言编写的软件产品都可以通过SDK或者直接编码集成离线或在线授权模块。 ✨ 新增功能 授权管理功能与限制设置:增加授权管理功能与限制设置,支持动态配置和多语言文本,优化许可证表单交互体验 添加仪表盘背景图片:优化主题切换按钮和样式,调整统计卡片暗模式背景 增加客户端对接的go语言SDK 官方首页:License Manager

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册