1. 程式人生 > >linux上安裝k8s主節點或者節點(指令碼直接跑)

linux上安裝k8s主節點或者節點(指令碼直接跑)

本指令碼轉載,忘記了哪個網站了(先分享給大家)

#!/bin/bash
#--------------------------------------------
#用於實現叢集環境的自動部署指令碼
#date: 20181229
#說明:適用於centos7系統
#--------------------------------------------
echo "開始進行叢集的安裝"
sleep 5
echo "3秒後開始安裝......"
sleep 3
#判斷當前使用者是否為root使用者
user=`whoami`
machinename=`uname -m`
if [ "$user" != "root" ]; then
    echo "請在root下執行該指令碼"
    exit 1
fi

#更換阿里雲源
change_aliyum(){
#檢測wget命令是否安裝
command -v wget >/dev/null 2>&1 || { echo >&2 "I require wget but it's not installed.  trying to get wget."; yum install -y wget; }
#更換阿里雲源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
}

#關閉防火牆
close_firewall(){
systemctl stop firewalld
systemctl disable firewalld
}
#安裝master元件
install_master_module(){
echo "請確定當前機器沒有安裝docker,etcd,kubernetes"
read -p "input (y/n):" yn
[ "$yn" == "Y" ] || [ "$yn" == "y" ]&& echo "ok,continue"&& yum install -y etcd docker kubernetes
[ "$yn" == "N" ] || [ "$yn" == "n" ]&& echo "請先完成乾淨解除安裝後,再執行本指令碼" && exit 1
}

#修改etcd配置檔案
update_etcd_conf(){
echo "ETCD_NAME=default
ETCD_DATA_DIR=\"/var/lib/etcd/default.etcd\"
ETCD_LISTEN_CLIENT_URLS=\"http://0.0.0.0:2379\"
ETCD_ADVERTISE_CLIENT_URLS=\"http://localhost:2379\"">/etc/etcd/etcd.conf
}

#修改apiserver配置檔案
update_apiserver_conf(){
echo "KUBE_API_ADDRESS=\"--address=0.0.0.0\"
KUBE_API_PORT=\"--port=8080\"
KUBELET_PORT=\"--kubelet_port=10250\"
KUBE_ETCD_SERVERS=\"--etcd_servers=http://127.0.0.1:2379\"
KUBE_SERVICE_ADDRESSES=\"--service-cluster-ip-range=10.254.0.0/16\"
KUBE_ADMISSION_CONTROL=\"--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota\"
KUBE_API_ARGS=\"\"">/etc/kubernetes/apiserver
}

#修改kubernetes配置檔案
update_kube_conf(){
read -p "輸入master節點的ip地址:" ip
echo "KUBE_LOGTOSTDERR=\"--logtostderr=true\"
KUBE_LOG_LEVEL=\"--v=0\"
KUBE_ALLOW_PRIV=\"--allow-privileged=false\"
KUBE_MASTER=\"--master=http://$ip:8080\"">/etc/kubernetes/config
}

#啟動master節點的相關服務
up_master_service(){
for SERVICES  in etcd docker kube-apiserver kube-controller-manager kube-scheduler;  do
    ZZH=`cat -n  /etc/sysconfig/docker | grep -enabled= | awk '{print $1}'`
    sed -i ""$ZZH"c OPTIONS='--selinux-enabled=false --log-driver=journald --signature-verification=false'"  /etc/sysconfig/docker
    systemctl restart $SERVICES
    systemctl enable $SERVICES
    systemctl status $SERVICES -l
done
}

#新增etcd網路配置
add_etcd_net(){
etcdctl mk /atomic.io/network/config '{"Network":"172.17.0.0/16"}'
}

#檢測叢集是否安裝成功
check_cluster_status(){
kubectl get nodes
}

#安裝node節點元件
install_node_module(){
echo "請確定當前機器沒有安裝flannel,docker,kubernetes"
read -p "input (y/n):" yn
[ "$yn" == "Y" ] || [ "$yn" == "y" ]&& echo "ok,continue"&& yum install -y flannel docker kubernetes
[ "$yn" == "N" ] || [ "$yn" == "n" ]&& echo "請先完成乾淨解除安裝後,再執行本指令碼" && exit 1
}

#配置flanneld
update_flanneld_conf(){
read -p "輸入master節點的ip地址:" ip
echo "FLANNEL_ETCD=\"http://$ip:2379\"
FLANNEL_ETCD_ENDPOINTS=\"http://$ip:2379\"
FLANNEL_ETCD_PREFIX=\"/atomic.io/network\"">/etc/sysconfig/flanneld
}

#配置kubelet
update_kubelet_conf(){
read -p "輸入master節點的ip地址:" master
read -p "輸入當前node節點的ip地址:" node
read -p "輸入pause映象的倉庫地址:" image
echo "KUBELET_ADDRESS=\"--address=0.0.0.0\"
KUBELET_PORT=\"--port=10250\"
KUBELET_HOSTNAME=\"--hostname-override=$node\"
KUBELET_API_SERVER=\"--api-servers=http://$master:8080\"
KUBELET_POD_INFRA_CONTAINER=\"--pod-infra-container-image=$image\"
KUBELET_ARGS=\"--cluster-dns=10.254.0.100 --cluster-domain=cluster.local\"">/etc/kubernetes/kubelet
}

#啟動node節點相關服務
up_node_service(){
for SERVICES in kube-proxy kubelet docker flanneld; do
    ZZH2=`cat -n  /etc/sysconfig/docker | grep -enabled= | awk '{print $1}'`
    sed -i ""$ZZH2"c OPTIONS='--selinux-enabled=false --log-driver=journald --signature-verification=false'"  /etc/sysconfig/docker
    systemctl restart $SERVICES
    systemctl enable $SERVICES
    systemctl status $SERVICES 
done
}

#指令碼入口
echo -n "選擇要安裝的角色“master”,“node”(嚴格大小寫):"
read answer
if [ "$answer" == master ];then

  change_aliyum
  close_firewall
  install_master_module
  update_etcd_conf
  update_apiserver_conf
  update_kube_conf
  up_master_service
  add_etcd_net

elif [ "$answer" == node ];then

  change_aliyum
  close_firewall
  install_node_module
  update_flanneld_conf
  update_kube_conf
  update_kubelet_conf
  up_node_service

fi