kubernetes master 高可用一键部署
#地址见:https://github.com/SILLKY/kubernetes-pro/tree/master/Master-HA
#包括其他一些文件,适当版本1.6.1
#!/bin/bash host=master.k8s
host1=master1.k8s
host2=master2.k8s ip0=192.168.255.125
ip1=192.168.255.126
ip2=192.168.255.127 #etcd数据备份
kube::etcd_backup()
{ docker stop etcd_test&&docker rm etcd_test
rm -rf /home/etcd && cp -r /var/lib/etcd /home
docker run --name etcd_test -d -p 12379:2379 -p 12380:2380 -v /home/etcd:/data appcelerator/etcd:3.0.15
echo '备份数据完毕'
} #复制需要的文件到node节点
kube::copy_file()
{
#修改本机的etcd和apiserver
cp etcd.yaml /etc/kubernetes/manifests/
cp kube-apiserver.yaml /etc/kubernetes/manifests/kube-apiserver.yaml #修改mininode节点上的配置
scp /etc/hosts root@$host1:/etc/
scp /etc/hosts root@$host2:/etc/ scp -r /etc/kubernetes/manifests root@$host1:/etc/kubernetes/
scp -r /etc/kubernetes/pki root@$host1:/etc/kubernetes/
scp /etc/kubernetes/controller-manager.conf root@$host1:/etc/kubernetes/
scp /etc/kubernetes/scheduler.conf root@$host1:/etc/kubernetes/
scp /etc/kubernetes/admin.conf root@$host1:/etc/kubernetes/
scp etcd1.yaml root@$host1:/etc/kubernetes/manifests/etcd.yaml
scp kube-apiserver1.yaml root@$host1:/etc/kubernetes/manifests/kube-apiserver.yaml
scp create-pki1.sh root@$host1:/root/create-pki.sh scp -r /etc/kubernetes/manifests root@$host2:/etc/kubernetes/
scp -r /etc/kubernetes/pki root@$host2:/etc/kubernetes/
scp /etc/kubernetes/controller-manager.conf root@$host2:/etc/kubernetes/
scp /etc/kubernetes/scheduler.conf root@$host2:/etc/kubernetes/
scp /etc/kubernetes/admin.conf root@$host2:/etc/kubernetes/
scp etcd2.yaml root@$host2:/etc/kubernetes/manifests/etcd.yaml
scp kube-apiserver2.yaml root@$host2:/etc/kubernetes/manifests/kube-apiserver.yaml
scp create-pki2.sh root@$host2:/root/create-pki.sh
} # 修改相应的配置
kube::edit_file()
{
sed -i "s/{{ip}}/$ip0/g" /etc/kubernetes/manifests/kube-apiserver.yaml
rm -rf /var/lib/etcd ssh root@$host1 "sed -i \"s/{{ip}}/$ip1/g\"" /etc/kubernetes/manifests/kube-apiserver.yaml
ssh root@$host1 "sed -i \"s/{{ip}}/$ip1/g\"" /root/create-pki.sh
ssh root@$host1 "sed -i \"s/$ip0/$ip1/g\"" /etc/kubernetes/admin.conf
ssh root@$host1 "sed -i \"s/$ip0/$ip1/g\"" /etc/kubernetes/kubelet.conf
ssh root@$host1 "sed -i \"s/$ip0/$ip1/g\"" /etc/kubernetes/controller-manager.conf
ssh root@$host1 "sed -i \"s/$ip0/$ip1/g\"" /etc/kubernetes/scheduler.conf
ssh root@$host1 'cd /root &&chmod +x create-pki.sh&&./create-pki.sh'
ssh root@$host1 'rm -rf /var/lib/etcd' ssh root@$host2 "sed -i \"s/{{ip}}/$ip2/g\"" /etc/kubernetes/manifests/kube-apiserver.yaml
ssh root@$host2 "sed -i \"s/{{ip}}/$ip2/g\"" /root/create-pki.sh
ssh root@$host2 "sed -i \"s/$ip0/$ip2/g\"" /etc/kubernetes/admin.conf
ssh root@$host2 "sed -i \"s/$ip0/$ip2/g\"" /etc/kubernetes/kubelet.conf
ssh root@$host2 "sed -i \"s/$ip0/$ip2/g\"" /etc/kubernetes/controller-manager.conf
ssh root@$host2 "sed -i \"s/$ip0/$ip2/g\"" /etc/kubernetes/scheduler.conf
ssh root@$host2 'cd /root &&chmod +x create-pki.sh&&./create-pki.sh'
ssh root@$host2 'rm -rf /var/lib/etcd' } # 重启kubelet
kube::reset_kubelet()
{
systemctl daemon-reload
systemctl restart kubelet
ssh root@$host2 'systemctl daemon-reload'
ssh root@$host2 'systemctl restart kubelet'
ssh root@$host1 'systemctl daemon-reload'
ssh root@$host1 'systemctl restart kubelet'
} # 恢复etcd的数据到新的集群中
kube::etcd_recover()
{
#等待ETCD集群启动完毕
while :
do
result=$(kubectl get componentstatuses)
result0=$(echo $result | grep 'etcd-0 Healthy {"health": "true"}')
result1=$(echo $result | grep 'etcd-1 Healthy {"health": "true"}')
result2=$(echo $result | grep 'etcd-2 Healthy {"health": "true"}')
if [[ $result0 != "" && $result1 != "" && $result2 != "" ]]
then
echo "etcd集群启动完毕"
break
else
echo "等待etcd集群启动......"
fi
sleep 10
done
sleep 30
echo '准备还原数据'
echo "export ETCDCTL_API=3&&etcdctl make-mirror $ip0:2379 --endpoints=$ip0:12379"
docker exec etcd_test sh -c "export ETCDCTL_API=3&&etcdctl make-mirror $ip0:2379 --endpoints=$ip0:12379"&
echo '等待还原数据.....'
sleep 60
docker stop etcd_test && docker rm etcd_test
} # 最后设置loadBalace
kube::loadBalace()
{
#设置代理为loadBalaceIp
loadBalaceIp=kubernetes.default.svc
kubectl get configmap/kube-proxy -n kube-system -o yaml > kube-proxy-configmap.yaml
sed -i "s/$ip0/$loadBalaceIp/g" kube-proxy-configmap.yaml
kubectl apply -f kube-proxy-configmap.yaml #删除flanne,kube-proxyl让其自动重建
kubectl delete pod -l app=flannel -n kube-system
kubectl delete pod -l k8s-app=kube-proxy -n kube-system
} main()
{
kube::etcd_backup
kube::copy_file
kube::edit_file
kube::reset_kubelet
kube::etcd_recover
kube::loadBalace
sleep 20
echo "-------------------------------------------------------"
echo "已经完成master HA"
echo "-------------------------------------------------------"
kubectl get pods -n kube-system -o wide
}
main $@
kubernetes master 高可用一键部署的更多相关文章
- 关于Kubernetes Master高可用的一些策略
关于Kubernetes Master高可用的一些策略 Kubernetes高可用也许是完成了初步的技术评估,打算将生产环境迁移进Kubernetes集群之前普遍面临的问题. 为了减少因为服务器当机引 ...
- centos7.1使用kubeadm部署kubernetes 1.16.2的master高可用
机器列表,配置域名解析 cat /etc/hosts192.168.200.210 k8s-master1192.168.200.211 k8s-master2192.168.200.212 k8s- ...
- kubernetes二进制高可用部署实战
环境: 192.168.30.20 VIP(虚拟) 192.168.30.21 master1 192.168.30.22 master2 192.168.30.23 node1 192.168.30 ...
- 【葵花宝典】lvs+keepalived部署kubernetes(k8s)高可用集群
一.部署环境 1.1 主机列表 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 lvs-keepal ...
- K8S集群Master高可用实践
K8S集群Master高可用实践 https://blog.51cto.com/ylw6006/2164981 本文将在前文基础上介绍k8s集群的高可用实践,一般来讲,k8s集群高可用主要包含以 ...
- openstack pike 集群高可用 安装 部署 目录汇总
# openstack pike 集群高可用 安装部署#安装环境 centos 7 史上最详细的openstack pike版 部署文档欢迎经验分享,欢迎笔记分享欢迎留言,或加QQ群663105353 ...
- Centos下SFTP双机高可用环境部署记录
SFTP(SSH File Transfer Protocol),安全文件传送协议.有时也被称作 Secure File Transfer Protocol 或 SFTP.它和SCP的区别是它允许用户 ...
- Haproxy+Keepalived高可用环境部署梳理(主主和主从模式)
Nginx.LVS.HAProxy 是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,通常会结合Keepalive做健康检查,实现故障转移的高可用功能. 1)在四层(tcp)实现负载均衡的 ...
- LVS+Keepalived 高可用环境部署记录(主主和主从模式)
之前的文章介绍了LVS负载均衡-基础知识梳理, 下面记录下LVS+Keepalived高可用环境部署梳理(主主和主从模式)的操作流程: 一.LVS+Keepalived主从热备的高可用环境部署 1)环 ...
随机推荐
- Coding.net+Myeclipse 2014 Git配置
安装Git,然后 $ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # Creates a new ssh key, u ...
- [转载]windows7中没用boot.ini文件而是改用BCDEDIT来配置了
原文地址:windows7中没用boot.ini文件而是改用BCDEDIT来配置了作者:开心骝哥 本人安装的Win7,因为机上有两个系统,一个dos系统,一个win7系统,开机时总是会在系统选择的界面 ...
- iOS archiveRootObject 归档失败问题
归档失败问题出在路径上,NSHomeDirectory() NSString *stringPath = [NSSearchPathForDirectoriesInDomains(NSDocument ...
- 修改TreeList单元格格式(实现类似单元格合并效果)
关键点:(1)TreeList中显示的单元格默认不显示上.下.左.右边框,显示的是TreeList自身的行横边框.列纵边框,具体对应TreeList属性中OptionView项下的ShowVertLi ...
- AR_销售订单收款基本操作(流程)
2014-06-04 Created By BaoXinjian
- Android studio 如何让包有层次显示
Android studio中我新建的包在原来包名后面显示,而我想让包名能层次展示: 方法: 点击如图部分,在弹出框中 去掉 ”compact empty middle package“前面勾
- Service和广播联合更新UI的例子
sa111111 于 2010-11-19 10:56 发表在 [Android实例] [复制链接] [只看楼主] [上一主题] [下一主题] 在Android中,异步更新UI,通常我们会选用Ha ...
- python 例程的一个好例子
用例程来写一个求平均值的算法 #!/usr/local/python/bin/python3 def FunCore(): total=0 counter=0 average=None tmp=yie ...
- linux权限详解
一个用户.一个组 我们来看一看 Linux 权限和所有权模型.我们已经看到每个文件属于一个用户和一个组.这正是 Linux 中权限模型的核心.您可以在 ls -l 清单中查看用户和组: $ ls -l ...
- [Python]南邮OJ代码备份爬虫
之前看过Python学习的经验,说以project为导向学习. 自己分析了一下,一般接触Python的都有一定的其它语言基础,对于程序设计的基本逻辑,语法都有一个大概的了解.而Python这样的脚本语 ...