安装k8s,高可用3 master安装脚本
每个在新集群里,记得更改三个节点的IP即可。
第一步还是要执行那个root脚本,准备好系统环境,安装好软件。
先安装在每个节点上使用docker安装好etcd。(sh script domain etcd)
再在每个节点上安装master。(sh script domain master)
#!/bin/bash
# Version V0.09 2019-05-10-10:32
if [ `whoami` != "xxx" ];then echo "[error] You need to switch to docker user to execute this command" ; exit 1 ;fi
Domain_name=$1
Node_type=$2
K8S_VER=1.14.1
dir_path=$(cd `dirname $0`;cd ../;pwd)
cmd_path=$dir_path/cmd
cert_path=$dir_path/cert
rpm_path=$dir_path/rpm
software_path=$dir_path/software
yaml_path=$dir_path/yaml
# 每一个新集群,此处必须修改
HOST_1=1.1.1.1
HOST_2=1.1.1.2
HOST_3=1.1.1.3
Domain_name=$1
Node_type=$2
# 定义常量
THIS_HOST=$(hostname -i)
LOCAL_HOST=$(hostname)
LOCAL_HOST_L=${LOCAL_HOST,,}
pki_dir=/etc/kubernetes/pki
K8S_API_PORT=6443
K8S_JOIN_TOKEN=xxxxxx.xxxxxxxxxxxxxxxx
General_user=xxx
REGISTRY=harbor.xxx.cn/3rd_part/k8s.gcr.io
ETCD_VERSION=3.3.10
ETCD_CLI_PORT=2379
ETCD_CLU_PORT=2380
TOKEN=xxx-k8s-etcd-token
CLUSTER_STATE=new
CLUSTER=${HOST_1}=http://${HOST_1}:${ETCD_CLU_PORT},${HOST_2}=http://${HOST_2}:${ETCD_CLU_PORT},${HOST_3}=http://${HOST_3}:${ETCD_CLU_PORT}
etcd_data_dir=$HOME/etcd/etcd-data
cs=$software_path/cfssl
csj=$software_path/cfssljson
#判断本机IP是否在集群内
function ip_in_cluster() {
if [[ ${THIS_HOST} != ${HOST_1} && ${THIS_HOST} != ${HOST_2} && ${THIS_HOST} != ${HOST_3} ]]; then
echo "Ip not in the k8s cluster host. please modify the HOST_1, HOST_2, HOST_3 at k8s_ha_master.sh file."
exit 110
fi
}
function if_file_exist_del() {
if [ -e $1 ]; then
rm -f $1
fi
}
function kubeadmConf() {
kubeadm_conf=kubeadm-config.yaml
if_file_exist_del $kubeadm_conf
cat << EOF >$kubeadm_conf
apiVersion: kubeadm.k8s.io/v1beta1
kind: InitConfiguration
bootstrapTokens:
- token: ${K8S_JOIN_TOKEN}
ttl: 24h
usages:
- signing
- authentication
groups:
- system:bootstrappers:kubeadm:default-node-token
---
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
imageRepository: ${REGISTRY}
kubernetesVersion: ${K8S_VER}
controlPlaneEndpoint: ${Domain_name}:${K8S_API_PORT}
etcd:
external:
endpoints:
- https://${HOST_1}:${ETCD_CLI_PORT}
- https://${HOST_2}:${ETCD_CLI_PORT}
- https://${HOST_3}:${ETCD_CLI_PORT}
caFile: ${pki_dir}/etcd/ca.crt
certFile: ${pki_dir}/apiserver-etcd-client.crt
keyFile: ${pki_dir}/apiserver-etcd-client.key
apiServer:
extraArgs:
service-node-port-range: 30000-50000
networking:
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/12
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
EOF
}
cert_ha_init() {
mkdir -p k8s_cert_tmp
cp $cert_path/* ./k8s_cert_tmp
chmod +x $cs
chmod +x $csj
cd k8s_cert_tmp
sed -i "s/LOCAL_HOST_L/${LOCAL_HOST_L}/g;s/HOST_1/${HOST_1}/g;s/HOST_2/${HOST_2}/g;s/HOST_3/${HOST_3}/g;s/Domain_name/${Domain_name}/g" ha-etcd-server.json
sed -i "s/LOCAL_HOST_L/${LOCAL_HOST_L}/g;s/HOST_1/${HOST_1}/g;s/HOST_2/${HOST_2}/g;s/HOST_3/${HOST_3}/g;s/Domain_name/${Domain_name}/g" ha-etcd-peer.json
sed -i "s/LOCAL_HOST_L/${LOCAL_HOST_L}/g;s/HOST_1/${HOST_1}/g;s/HOST_2/${HOST_2}/g;s/HOST_3/${HOST_3}/g;s/Domain_name/${Domain_name}/g" ha-apiserver.json
$cs gencert -ca=ca.crt -ca-key=ca.key -config=ca-config.json -profile=server ha-etcd-server.json|$csj -bare server
$cs gencert -ca=ca.crt -ca-key=ca.key -config=ca-config.json -profile=client etcd-client.json|$csj -bare client
$cs gencert -ca=ca.crt -ca-key=ca.key -config=ca-config.json -profile=peer ha-etcd-peer.json|$csj -bare peer
$cs gencert -ca=front-proxy-ca.crt -ca-key=front-proxy-ca.key -config=ca-config.json -profile=client front-proxy-client.json|$csj -bare front-proxy-client
$cs gencert -ca=ca.crt -ca-key=ca.key -config=ca-config.json -profile=server ha-apiserver.json|$csj -bare apiserver
$cs gencert -ca=ca.crt -ca-key=ca.key -config=ca-config.json -profile=client apiserver-kubelet-client.json|$csj -bare apiserver-kubelet-client
mkdir -p $pki_dir/etcd
cp server.pem $pki_dir/etcd/server.crt&&cp server-key.pem $pki_dir/etcd/server.key
cp client.pem $pki_dir/etcd/healthcheck-client.crt&&cp client-key.pem $pki_dir/etcd/healthcheck-client.key
cp client.pem $pki_dir/apiserver-etcd-client.crt&&cp client-key.pem $pki_dir/apiserver-etcd-client.key
cp peer.pem $pki_dir/etcd/peer.crt&&cp peer-key.pem $pki_dir/etcd/peer.key
cp ca.crt $pki_dir/etcd/ca.crt&&cp ca.key $pki_dir/etcd/ca.key
cp front-proxy-ca.crt $pki_dir/front-proxy-ca.crt&&cp front-proxy-ca.key $pki_dir/front-proxy-ca.key
cp front-proxy-client.pem $pki_dir/front-proxy-client.crt&&cp front-proxy-client-key.pem $pki_dir/front-proxy-client.key
cp ca.crt $pki_dir/ca.crt&&cp ca.key $pki_dir/ca.key
cp apiserver.pem $pki_dir/apiserver.crt&cp apiserver-key.pem $pki_dir/apiserver.key
cp apiserver-kubelet-client.pem $pki_dir/apiserver-kubelet-client.crt&&cp apiserver-kubelet-client-key.pem $pki_dir/apiserver-kubelet-client.key
cp sa.pub $pki_dir/sa.pub&&cp sa.key $pki_dir/sa.key
cd ../
rm -rf k8s_cert_tmp
}
function etcd_install() {
# 如果有以前数据,先清除
set +e
sudo docker stop etcd &&sudo docker rm etcd
rm -rf ${etcd_data_dir}/*
sudo systemctl restart docker
set -e
# 运行docker
docker run \
-d \
-p ${ETCD_CLI_PORT}:${ETCD_CLI_PORT} \
-p ${ETCD_CLU_PORT}:${ETCD_CLU_PORT} \
--volume=${etcd_data_dir}:${etcd_data_dir} \
--volume=${pki_dir}:${pki_dir} \
--name etcd ${REGISTRY}/etcd:${ETCD_VERSION} \
/usr/local/bin/etcd \
--data-dir=${etcd_data_dir} --name ${THIS_HOST} \
--initial-advertise-peer-urls http://${THIS_HOST}:${ETCD_CLU_PORT} \
--listen-peer-urls http://0.0.0.0:${ETCD_CLU_PORT} \
--advertise-client-urls https://${THIS_HOST}:${ETCD_CLI_PORT} \
--listen-client-urls https://0.0.0.0:${ETCD_CLI_PORT} \
--initial-cluster ${CLUSTER} \
--initial-cluster-state ${CLUSTER_STATE} \
--initial-cluster-token ${TOKEN} \
--cert-file=${pki_dir}/etcd/server.crt \
--key-file=${pki_dir}/etcd/server.key \
--trusted-ca-file=${pki_dir}/etcd/ca.crt
echo "================================="
echo "etcd start success"
}
function etcd_reset() {
set +e
docker stop etcd
rm -rf ${etcd_data_dir}/*
docker rm etcd
set -e
}
function master_install(){
sudo /usr/local/bin/kubeadm init --config $kubeadm_conf
sudo chown -R docker /etc/kubernetes/
mkdir -p $HOME/.kube
\cp -f /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
General_user_HOME=`cat /etc/passwd |grep -e ^${General_user} |awk -F: '{print $6}'`
mkdir -p ${General_user_HOME}/.kube
\cp -f /etc/kubernetes/admin.conf ${General_user_HOME}/.kube/config
chown -R $(id -u ${General_user}):$(id -g ${General_user}) ${General_user_HOME}/.kube
kubectl apply -f $yaml_path/secret
kubectl apply -f $yaml_path/auto_cert_server
kubectl apply -f $yaml_path/flannel
}
function node_join(){
system_init
kubeadm join ${Domain_name}:${K8S_API_PORT} --token ${K8S_JOIN_TOKEN} --discovery-token-unsafe-skip-ca-verification
echo "================================="
echo "node join success"
}
case ${Node_type} in
"etcd")
ip_in_cluster
cert_ha_init
etcd_install
;;
"cert")
cert_ha_init
;;
"etcd_install")
etcd_install
;;
"master")
ip_in_cluster
kubeadmConf
master_install
;;
"node")
node_join
;;
*)
echo "usage `basename $0` [Domain] [etcd|master|node]"
;;
esac
安装k8s,高可用3 master安装脚本的更多相关文章
- 一、k8s介绍(第一章、k8s高可用集群安装)
作者:北京小远 出处:http://www.cnblogs.com/bj-xy/ 参考课程:Kubernetes全栈架构师(电脑端购买优惠) 文档禁止转载,转载需标明出处,否则保留追究法律责任的权利! ...
- 三、k8s集群可用性验证与调参(第一章、k8s高可用集群安装)
作者:北京小远 出处:http://www.cnblogs.com/bj-xy/ 参考课程:Kubernetes全栈架构师(电脑端购买优惠) 文档禁止转载,转载需标明出处,否则保留追究法律责任的权利! ...
- 安装ORACLE高可用RAC集群11g执行root脚本的输出信息
安装ORACLE高可用RAC集群11g执行root脚本的输出信息 作者:Eric 微信:loveoracle11g [root@node1 ~]# /u01/app/oraInventory/orai ...
- 使用kubeadm安装kubernetes高可用集群
kubeadm安装kubernetes高可用集群搭建 第一步:首先搭建etcd集群 yum install -y etcd 配置文件 /etc/etcd/etcd.confETCD_NAME=inf ...
- ActiveMQ 高可用集群安装、配置(ZooKeeper + LevelDB)
ActiveMQ 高可用集群安装.配置(ZooKeeper + LevelDB) 1.ActiveMQ 集群部署规划: 环境: JDK7 版本:ActiveMQ 5.11.1 ZooKeeper 集群 ...
- Neo4j 高可用集群安装
安装neo4j高可用集群,抓图安装过程 http://www.ibm.com/developerworks/cn/java/j-lo-neo4j/ Step1.下载neo4j商业版并解压,复制为neo ...
- 安装ORACLE高可用RAC集群11g校验集群安装的可行性输出信息
安装ORACLE高可用RAC集群11g校验集群安装的可行性输出信息 作者:Eric 微信:loveoracle11g [grid@node1 grid]$ ./runcluvfy.sh stage - ...
- kubeadm实现k8s高可用集群环境部署与配置
高可用架构 k8s集群的高可用实际是k8s各核心组件的高可用,这里使用主备模式,架构如下: 主备模式高可用架构说明: 核心组件 高可用模式 高可用实现方式 apiserver 主备 keepalive ...
- kubernetes高可用设计-master节点和kubectl
部署master 节点 上一遍是CA证书和etcd的部署,这一篇继续搭建k8s,废话不多说.开始部署. kubernetes master 节点包含的组件有: kube-apiserver kube- ...
随机推荐
- SOC中的DMIPS_GFLOPS_GMACS的含义
l DMIPS全称叫Dhrystone MIPS 这项测试是用来计算同一秒内系统的处理能力,它的单位以百万来计算,也就是(MIPS) 上面的意思也就是,这个处理器测整数计算能力为(200*100万) ...
- Go语言中的值类型和引用类型
一.值类型和引用类型值类型:int.float.bool和string这些类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,值类型的变量的值存储在栈中.当使用等号=将一个变量的值赋给另一个变 ...
- 最新 浩德钢圈java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.浩德钢圈等10家互联网公司的校招Offer,因为某些自身原因最终选择了浩德钢圈.6.7月主要是做系统复习.项目复盘.Leet ...
- 「模拟赛20191019」B 容斥原理+DP计数
题目描述 将\(n\times n\)的网格黑白染色,使得不存在任意一行.任意一列.任意一条大对角线的所有格子同色,求方案数对\(998244353\)取模的结果. 输入 一行一个整数\(n\). 输 ...
- PHP设计模式 - 门面模式
门面模式 (Facade)又称外观模式,用于为子系统中的一组接口提供一个一致的界面.门面模式定义了一个高层接口,这个接口使得子系统更加容易使用:引入门面角色之后,用户只需要直接与门面角色交互,用户与子 ...
- LeetCode 563. 二叉树的坡度(Binary Tree Tilt) 38
563. 二叉树的坡度 563. Binary Tree Tilt 题目描述 给定一个二叉树,计算整个树的坡度. 一个树的节点的坡度定义即为,该节点左子树的结点之和和右子树结点之和的差的绝对值.空结点 ...
- Echarts数据可视化grid直角坐标系(xAxis、yAxis)
mytextStyle={ color:"#333", //文字颜色 fontStyle:"normal", //italic斜体 oblique倾斜 font ...
- 【转帖】vim/sed/awk/grep等文件批处理总结
vim/sed/awk/grep等文件批处理总结 https://www.cnblogs.com/cangqiongbingchen/p/9760544.html Vim相关操作 1.基础 * 和 # ...
- day30——socket套接字(完全版)
day30 基于TCP协议的socket循环通信 server import socket phone = socket.socket() phone.bind(("127.0.0.1&qu ...
- 【LEETCODE】44、509. Fibonacci Number
package y2019.Algorithm.array; /** * @ProjectName: cutter-point * @Package: y2019.Algorithm.array * ...