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)环 ...
随机推荐
- 一般web典型的项目目录结构
本文转自:http://blog.sina.com.cn/s/blog_4758a28b0100l3lp.html WebRoot- -common (系统框架公用jsp 如foote ...
- nyoj------------找球号(一)
找球号(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在某一国度里流行着一种游戏.游戏规则为:在一堆球中,每个球上都有一个整数编号i(0&l ...
- word中批量修改图片大小
一,在word中按alt+f11组合键,进入VBA模式二,在左边的工程资源管理器中找到你的word文档,在其上右键/添加/模块三,把下面代码复制,粘贴进去.四,更改数值, 改一下宽度和高度数值(10) ...
- 微信小程序四(设置底部导航)
好了 小程序的头部标题 设置好了,我们来说说底部导航栏是如何实现的. 我们先来看个效果图 这里,我们添加了三个导航图标,因为我们有三个页面,微信小程序最多能加5个. 那他们是怎么出现怎么着色的呢?两步 ...
- APK 本地化和去广告
APK 本地化 说起APK的汉化,目前大部分教程都是让用Hex Workshop或者Android ResEdit来做.但是实际操作后,就会发现: 1.Hex Workshop操作繁琐,经 ...
- Android开发之线性布局详解(布局权重)
布局权重 线性布局支持给个别的子视图设定权重,通过android:layout_weight属性.就一个视图在屏幕上占多大的空间而言,这个属性给其设 定了一个重要的值.一个大的权重值,允许它扩大到填充 ...
- fork函数相关总结
fork的作用是根据一个现有的进程复制出一个新进程,原来的进程称为父进程(Parent Process),新进程称为子进程(Child Process).系统中同时运行着很多进程,这些进程都是从最初只 ...
- hibernate,动态更新,插入 dynamic-insert,dynamic-update 我有话要说 ---稍后整理
http://dreamzhong.iteye.com/blog/1207377 http://blog.csdn.net/hsuxu/article/details/8108326 @org.hib ...
- 北风网VIP6级学习视频地址
账号密码是我的QQ http://www.爱北风.com/vip6.php
- struts中action名称反复导致的神秘事件
近期由于项目需求变更.须要本人对当中的某个业务功能进行改动.本人依照前台页面找action,依据action找代码的逻辑进行了改动(公司项目是ssh框架,struts配置全部是通过注解的方式进行.配置 ...