部署环境:
名称 | IP | 备注 |
master01 | 192.168.2.1 | master,etcd |
master02 | 192.168.2.2 | master,etcd |
master03 | 192.168.2.3 | master,etcd |
node01 | 192.168.2.4 | node |
node02 | 192.168.2.5 | node |
node03 | 192.168.2.6 | node |
node04 | 192.168.2.7 | node |
breeze | 192.168.2.8 | breeze部署机 |
harbor | 192.168.2.9 | harbor镜像仓库 |
部署机配置:
关闭selinux和配置firewalld防火墙
setenforce 0
sed --follow-symlinks -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
firewall-cmd --set-default-zone=trusted
firewall-cmd --complete-reload
服务器时间同步:
yum install ntp -y
ntpdate time.windows.com
安装使用工具:
yum install docker lrzsz vim net-tools wget epel-release -y
yum install ansible -y
安装docker-compose命令:
下载连接:https://github.com/docker/compose/releases/,下载需要的版本,实例使用1.24版本
cp docker-compose1.24-Linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
下载用于部署某个Kubernetes版本的docker-compose文件,实例是centos7,版本1.17.3
将文件内容https://github.com/wise2c-devops/breeze/blob/v1.17.3/docker-compose-centos.yml复制到本地
vim docker-compose.yml
docker启动:
systemctl start docker
systemctl enable docker
docker-compose运行部署文件:docker-compose up -d
部署完成截图:
部署机上安装其他服务器的ssh免密登录:
ssh-keygen 后面一直回车就行
ssh-copy-id 192.168.2.1
...
ssh-copy-id 192.168.2.9
中间会有两段交互信息,输入密码即可
Are you sure you want to continue connecting (yes/no)? yes
root@192.168.2.1's password:
使用ansible同步其他服务器的时间:
vim /etc/ansible/hosts #输入其他服务器,具体使用参考ansible配置
ansible all -m command -a 'yum install ntp -y'
ansible all -m command -a 'ntpdate time.windows.com'
ansible all -m cron -a "minute=00 hour=01 day=* month=* weekday=* name='Ntpdate server for sync time' job='ntpdate time.windows.com'"
WEB部署集群:
打开浏览器,访问部署程序的图形界面(部署机 IP 及端口 88),添加主机列表、添加服务角色并将加入的主机进行角色分配,然后开始部署:http://192.168.2.8:88
创建集群主机,master、node、harbor
添加组件:
docker组件添加:希望Breeze部署程序使用界面里输入的主机名代替当前服务器的主机名,则勾选format host name选项框
harbor组件安装:镜像仓库设置这里如果选择某个版本,那么Breeze会自动部署非https的Harbor,如果在版本里选择external,那么Breeze则不再部署Harbor而是和现有Harbor做对接;参数harbor entry point是指用户端访问镜像仓库的URL,可以直接写IP地址或写对应的域名;如果对接外部的Harbor,请注意勾选外部Harbor是以http访问还是以https访问的
高可用组件(haproxy+keepalived):vip for k8s master是指三个k8s master服务器的高可用虚拟浮动IP地址;网卡请填写实际操作系统下的网卡名,注意请保证3个节点网卡名一致;router id和virtual router id请确保不同k8s集群使用不同的值
etcd组件安装:Etcd可以选择部署于K8S Master节点也可以选择独立的三台主机,Back up etcd database folder and upgrade etcd cluster 和 Make a snapshot backup for etcd and upgrade etcd cluster 这两个选项是用于升级环节的,在升级Etcd集群前做备份,默认新装集群不要勾选这两项
kubernetes组件安装:Kubernetes entry point是指高可用的一个设定值,如果生产环境有硬件或软件负载均衡指向这里的k8s master所有节点,那么就可以在这里填写负载均衡的统一入口地址。相对于昂贵的F5专业硬件设备,我们也可以使用HAProxy和Keepalived的组合轻松完成这个设置,Breeze自带这个组合模块的部署。例如下图的 192.168.2.10:6444 就是k8s集群高可用的统一入口,k8s的worker node会使用这个地址访问API Server。请注意如果使用的是Breeze自带的高可用组件haproxy+keepalived,则请填写实际的虚IP与默认端口6444。Just add new worker nodes, do not reinstall this cluster这个选项是用于向现有集群添加计算节点(Worker Nodes),Upgrade existing cluster和Upgrade K8s nodes automatically选项用于升级现有集群而不是新装集群,而在生产环境升级集群一般采用对节点逐步进行,Breeze只负责将需要升级的镜像及脚本发到工作节点,应由管理员手动执行,并在执行过程中观察业务应用的高可用不受影响,如果勾选了Upgrade K8s nodes automatically这一切会全自动进行,如果所有业务都是有多副本分布在不同计算节点,那么这不会影响业务服务,否则不推荐使用这种方式进行集群在线升级。关于升级的详情,请参考breeze视频演示。Kubernetes的界面里还有CNI模型供选择,请按实际需求选择部署Flannel、Calico还是Canal,至于Calico又分为IPIP隧道模式和BGP路由模式,还需要注意集群规模,详情请参考Calico官方网站文档解释。对于网络地址范围CIDR参数共有三个,分别是Pod、Service、和ClusterIP的地址范围定义,默认值即可正常工作,除非它与你实际网络分配相冲突,才需要手动修改后进行部署
点击下一步,开始安装:
等待安装,当上图图标全都变为绿色时,就表示安装成功
可以在部署机上输入命令 docker logs -f deploy-main 来获取更详细的日志
安装完成查看:
访问dashboard:
Kubernetes Dashboard的访问入口我们采用了NodePort:30300的方式暴露端口,因此可以通过火狐浏览器访问 https://任意服务器IP:30300 来登录Dashboard页面,注意其它浏览器例如Chrome因为不接受自签名证书会拒绝访问请求;新版本Dashboard引入了验证模式,可以通过以下命令获取admin-user的访问令牌:
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
问题:安装后,发现集群并没有安装上dashboard
解决:登陆master01,进入目录/var/tmp/wise2c/kubernetes,运行命令:kubectl apply -f kubernetes-dashboard.yml和kubectl apply -f kubernetes-dashboard-svc.yml即可解决
参考文档:https://github.com/wise2c-devops/breeze/blob/v1.17.3/BreezeManual-CN.md
常见排错说明在此: https://github.com/wise2c-devops/breeze/blob/master/TroubleShooting-CN.md
-----------日常记录---------------