kubernetes集群 - kubeasz方式搭建, 增加节点, 升级集群, 备份和恢复

本文主要是介绍kubernetes集群 - kubeasz方式搭建, 增加节点, 升级集群, 备份和恢复,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

软硬件限制:

准备4台虚机,搭建一个多主高可用集群。
推荐内存2G/硬盘30G以上
最小化安装Ubuntu 16.04 server或者CentOS 7 Minimal
配置基础网络、更新源、SSH登录等

  • 实际使用1vcpu2g内存20G硬盘的四台云主机

kubernetes官方github地址 https://github.com/kubernetes/kubernetes/releases

高可用集群所需节点规划:

部署节点------x1 : 运行这份 ansible 脚本的节点
etcd节点------x3 : 注意etcd集群必须是1,3,5,7…奇数个节点
master节点----x2 : 根据实际集群规模可以增加节点数,需要额外规划一个master VIP(虚地址)
lb节点--------x2 : 负载均衡节点两个,安装 haproxy+keepalived
node节点------x2 : 真正应用负载的节点,根据需要提升机器配置和增加节点数

机器规划:

ip主机名角色
172.7.15.113.128masterdeploy, master1, lb2, etcd
172.7.15.129node1etcd, node1
172.7.15.130node2etcd, node2
172.7.15.131master2master2, lb1
172.7.15.250vip

准备工作

四台机器,全部执行:

# 文档中脚本默认均以root用户执行
yum update
# 安装python
yum install python -y
  • 在deploy端安装和准备ansible
yum install git python-pip -y
# pip安装ansible(国内如果安装太慢可以直接用pip阿里云加速)
pip install pip --upgrade -i https://mirrors.aliyun.com/pypi/simple/
pip install ansible==2.6.18 netaddr==0.7.19 -i https://mirrors.aliyun.com/pypi/simple/
  • 在deploy控制端配置免密码登录
ssh-keygen -t rsa -b 2048 -N '' -f ~/.ssh/id_rsa
for s in 128 129 130 131; do ssh-copy-id 172.7.15.$s;done
#需要每一台机器的root密码;
  • 在deploy控制端编排k8s安装
    下载项目源码
    下载二进制文件
    下载离线docker镜像
    推荐使用 easzup 脚本下载上述所需文件;运行成功后,所有文件(kubeasz代码、二进制、离线镜像)均已整理好放入目录/etc/ansible
# 下载工具脚本easzup,举例使用kubeasz版本2.0.2
export release=2.0.2
curl -C- -fLO --retry 3 https://github.com/easzlab/kubeasz/releases/download/${release}/easzup
chmod +x ./easzup
# 使用工具脚本下载
./easzup -D
  • 配置集群参数
cd /etc/ansible && cp example/hosts.multi-node hosts
vim hosts  #按规划设置如下内容,其他部分不变;
[etcd]
172.7.15.113.128 NODE_NAME=etcd1
172.7.15.113.129 NODE_NAME=etcd2
172.7.15.113.130 NODE_NAME=etcd3# master node(s)
[kube-master]
172.7.15.113.128
172.7.15.113.131# work node(s)
[kube-node]
172.7.15.113.129
172.7.15.113.130# [optional] harbor server, a private docker registry
# 'NEW_INSTALL': 'yes' to install a harbor server; 'no' to integrate with existed one
[harbor]
#192.168.1.8 HARBOR_DOMAIN="harbor.yourdomain.com" NEW_INSTALL=no# [optional] loadbalance for accessing k8s from outside
[ex-lb] #这部分在云主机应该是不起作用,不支持VIP;
172.7.15.113.128 LB_ROLE=backup EX_APISERVER_VIP=192.168.1.250 EX_APISERVER_PORT=8443
172.7.15.113.131 LB_ROLE=master EX_APISERVER_VIP=192.168.1.250 EX_APISERVER_PORT=8443
  • 测试ansibel
ansible all -m ping
  • 开始安装
# 分步安装
ansible-playbook 01.prepare.yml
ansible-playbook 02.etcd.yml
#02验证
# 根据hosts中配置设置shell变量 $NODE_IPS
export NODE_IPS="172.7.15.113.129 172.7.15.113.130"
for ip in ${NODE_IPS}; doETCDCTL_API=3 etcdctl \--endpoints=https://${ip}:2379  \--cacert=/etc/kubernetes/ssl/ca.pem \--cert=/etc/etcd/ssl/etcd.pem \--key=/etc/etcd/ssl/etcd-key.pem \endpoint health; done
#预期结果:(忽略IP)
https://192.168.1.1:2379 is healthy: successfully committed proposal: took = 2.210885ms  
https://192.168.1.2:2379 is healthy: successfully committed proposal: took = 2.784043msansible-playbook 03.docker.yml
#03验证 - 每台机器都安装了docker;
systemctl status docker 	# 服务状态
journalctl -u docker 		# 运行日志
docker version
docker info
iptables-save|grep FORWARD 查看 iptables filter表 FORWARD链,最后要有一个 -A FORWARD -j ACCEPT 保底允许规则
#查看iptables验证:
iptables-save|grep FORWARD
:FORWARD ACCEPT [0:0]
:FORWARD DROP [0:0]
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -j ACCEPTansible-playbook 04.kube-master.yml
#04验证
运行 ansible-playbook 04.kube-master.yml 成功后,验证 master节点的主要组件:
# 查看进程状态
systemctl status kube-apiserver
systemctl status kube-controller-manager
systemctl status kube-scheduler
# 查看进程运行日志
journalctl -u kube-apiserver
journalctl -u kube-controller-manager
journalctl -u kube-scheduler
执行 kubectl get componentstatus 可以看到
NAME                 STATUS    MESSAGE              ERROR
scheduler            Healthy   ok                   
controller-manager   Healthy   ok                   
etcd-0               Healthy   {"health": "true"}   
etcd-2               Healthy   {"health": "true"}   
etcd-1               Healthy   {"health": "true"} ansible-playbook 05.kube-node.yml
#验证 node 状态systemctl status kubelet	# 查看状态
systemctl status kube-proxy
journalctl -u kubelet		# 查看日志
journalctl -u kube-proxy 
运行 kubectl get node 可以看到类似  #忽略IP;NAME           STATUS    ROLES     AGE       VERSION
192.168.1.42   Ready     <none>    2d        v1.9.0
192.168.1.43   Ready     <none>    2d        v1.9.0ansible-playbook 06.network.yml
ansible-playbook 07.cluster-addon.yml
# 一步安装
#ansible-playbook 90.setup.yml  #一次过安装以上01-07;
  • 其他验证
查看kube-system namespace下的服务
kubectl get svc -n kube-system
查看集群信息:
kubectl cluster-info
查看node/pod使用资源情况:
kubectl top node
kubectl top pod --all-namespaces

测试DNS

  • 创建一个nginx的pod然后使用另外一个pod测试nginx的默认域名,返回IP
a)创建nginx service
kubectl run nginx --image=nginx --expose --port=80
b)创建busybox 测试pod
kubectl run busybox --rm -it --image=busybox /bin/sh //进入到busybox内部 
nslookup nginx.default.svc.cluster.local //结果如下
Server: 10.68.0.2
Address: 10.68.0.2:53Name: nginx.default.svc.cluster.local 
Address: 10.68.9.156

增加节点

  • https://github.com/easzlab/kubeasz/blob/master/docs/op/op-node.md
  • https://github.com/easzlab/kubeasz/blob/master/docs/op/op-master.md
增加node节点 #未尝试
1)deploy节点免密码登录node
ssh-copy-id 新node ip 
2)修改/etc/ansible/hosts[new-node] 172.7.15.117
3)执行安装脚本
ansible-playbook /etc/ansible/20.addnode.yml
4)验证kubectl get node
kubectl get pod -n kube-system -o wide
5)后续工作 修改/etc/ansible/hosts,将new-node里面的所有ip全部移动到kube-node组里去

升级集群

  • https://github.com/easzlab/kubeasz/blob/master/docs/op/upgrade.md
升级集群 #未尝试
1)备份etcd
ETCDCTL_API=3 etcdctl snapshot save backup.db
查看备份文件信息
ETCDCTL_API=3 etcdctl --write-out=table snapshot status backup.db
2)到本项目的根目录kubeaszcd  /dir/to/kubeasz
拉取最新的代码
git pull origin master
3)下载升级目标版本的kubernetes二进制包,并替换/etc/ansible/bin/下的二进制文件
4)docker升级(),除非特别需要,否则不建议频繁升级docker 
5)如果接受业务中断,执行:
ansible-playbook -t upgrade_k8s,restart_dockerd 22.upgrade.yml
6)不能接受短暂中断,需要这样做:a)ansible-playbook -t upgrade_k8s 22.upgrade.yml b)到所有node上逐一:
kubectl cordon和kubectl drain //迁移业务pod 
systemctl restart docker
kubectl uncordon //恢复pod

备份和恢复

  • https://github.com/easzlab/kubeasz/blob/master/docs/op/cluster_restore.md

这篇关于kubernetes集群 - kubeasz方式搭建, 增加节点, 升级集群, 备份和恢复的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/816197

相关文章

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

C++链表的虚拟头节点实现细节及注意事项

《C++链表的虚拟头节点实现细节及注意事项》虚拟头节点是链表操作中极为实用的设计技巧,它通过在链表真实头部前添加一个特殊节点,有效简化边界条件处理,:本文主要介绍C++链表的虚拟头节点实现细节及注... 目录C++链表虚拟头节点(Dummy Head)一、虚拟头节点的本质与核心作用1. 定义2. 核心价值二

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2