Breeze部署kubernetes1.13.2高可用集群
2019年07月23日 10:51:41 willblog 阅读数 673 标签: kubernetes 更多
个人分类: kubernetes
https://blog.csdn.net/networken/article/details/86550735 所知道的太少了.. 不过简单试了下 不是特别好用 国内公司做的系统.. 也可能跟我的虚拟机兼容性有关系..
breeze简介
项目地址:https://github.com/wise2c-devops/breeze
本次使用开源 Breeze工具部署 Kubernetes 高可用集群。
Breeze项目旨在提供一个可信的、安全的、稳定的Kubernetes集群部署工具,它可以帮助您通过图形化操作界面快捷地在生产环境部署一个或多个Kubernetes集群,而不需要连入互联网环境。
功能简介
- 运行简单:
Breeze将部署Kubernetes集群所需的全部资源文件打包在一个docker镜像内,这包括Kubernetes的组件镜像、docker、etcd、harbor、kubernetes集群部署的ansible
playbook脚本文件等。同时,Breeze部署主机自身也作为一个yum仓库服务器角色存在,因此,您只需准备一台安装了docker和docker-compose命令的主机即可轻松的使Breeze运行起来并进行Kubernetes集群的部署。 - 简化Kubernetes集群部署流程:
仅需几条简单命令,就能使Breeze程序运行起来,接下来的Kubernetes集群部署工作全都通过图形化操作界面完成。 - 支持离线部署:
在仅有的4个镜像(playbook, yum-repo, pagoda, deploy-ui)被加载在Breeze部署主机之后,所有操作都不需要互联网的访问。Breeze自身作为yum仓库对被部署机提供yum源服务并使用kubeadm进行Kubernetes的部署工作,同时Breeze还会部署一个Harbor服务器用于内网的镜像下载服务。 - 支持多个集群批量部署:
Breeze支持批量部署多个Kubernetes集群。 - 支持高可用架构:
使用Breeze部署的Kubernetes集群,默认提供3个master节点和3个etcd节点,结合haproxy+keepalived架构服务,所有工作节点都使用虚拟浮动IP地址和主节点服务器通信。
Breeze 软件架构简图:
组件
- breeze: 用于部署docker, harbor, haproxy+keepalived, etcd,
kubernetes等组件的Ansible playbook。 - yum-repo: 用于安装docker, docker-compose, kubelet, kubectl, kubeadm,
kubernetes-cni等的yum仓库源。 - deploy-ui: 图形界面组件。
- pagoda: 提供操作Ansible playbook的API。
- kubeadm-version: 获取Kubernetes组件版本清单,采用命令"kubeadm config"
部署要求
- 部署机: docker 1.13.1+ and docker-compose 1.12.0+ .
- Kubernetes集群节点: 兼容CentOS 7.4/7.5/7.6版本,Minimal安装模式是推荐的方式,为了确保部署的顺利进行,应尽可能保证系统的干净。
- 部署指南:https://github.com/wise2c-devops/breeze/blob/master/BreezeManual-CN.md
本安装方式通过了Kubernetes Conformance一致性认证,因此可用于生产环境。 - github项目中选择相应的Release Tag并下载其中的docker-compose.yml文件。(Tags列出的版本号a.b.c.d其中前三位a.b.c对应于Kubernetes的发行版本号,第四位只是Breeze自身部署功能所做的修订,不涉及对Kubernetes的任何修改)
部署环境准备
在本次实验环境中准备了6台服务器,使用Vmware Workstation进行部署,配置与角色如下(如果需要增加 Minion/Worker 节点请自行准备即可):
主机名 | IP 地址 | 角色 | OS | 组件 |
---|---|---|---|---|
deploy | 192.168.92.10 | Breeze Deploy | CentOS 7.6 x64 | docker / docker-compose / Breeze |
master01 | 192.168.92.11 | K8S Master Node | CentOS 7.6 x64 | K8S Master / etcd / HAProxy / Keepalived |
master02 | 192.168.92.12 | K8S Master Node | CentOS 7.6 x64 | K8S Master / etcd / HAProxy / Keepalived |
master03 | 192.168.92.13 | K8S Master Node | CentOS 7.6 x64 | K8S Master / etcd / HAProxy / Keepalived |
worker01 | 192.168.92.21 | K8S Worker Node | CentOS 7.6 x64 | K8S Worker / Prometheus |
harbor | 192.168.92.20 | Harbor | CentOS 7.6 x64 | Harbor 1.7.0 |
192.168.92.30 | VIP | HA 虚 IP 地址在 3 台 K8S Master 浮动 |
硬件资源规划:
主机名 | CPU | 内存 | 磁盘 | 网卡 |
---|---|---|---|---|
deploy | 1C | 2G | 系统盘50G x1,(可选数据盘300G x1) | x1 |
master01 | 2C | 4G | 系统盘50G x1,(可选数据盘300G x1) | x1 |
master02 | 2C | 4G | 系统盘50G x1,(可选数据盘300G x1) | x1 |
master03 | 2C | 4G | 系统盘50G x1,(可选数据盘300G x1) | x1 |
worker01 | 2C | 4G | 系统盘50G x1,(可选数据盘300G x1) | x1 |
harbor | 1C | 2G | 系统盘50G x1,(可选数据盘300G x1) | x1 |
注意master和worker节点至少配置2颗CPU、4G内存,否则可能导致资源不足部署失败。部署前可对所有虚拟机建立快照,方便回滚。
这里仅做测试不配置数据盘(对于集群master和worker节点,磁盘规划建议系统盘/dev/sda和数据盘/dev/sdb组成vg卷组,从卷组划分两个lv逻辑卷分别挂载至/var/lib/docker/目录下和/data目录下。)
deploy节点设置防火墙
关闭selinux并放开firewalld,请勿禁用firewalld服务,保证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
部署节点环境准备(deploy/192.168.92.10)
以下所有操作在部署节点执行
安装 docker-compose
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose
安装 docker
$ curl -sSL https://raw.githubusercontent.com/willzhang/shell/master/install_docker.sh | sh
在部署机上做好对集群内其它所有服务器的ssh免密登录:
#生成密钥 $ ssh-keygen #针对目标服务器做 ssh 免密登录,依次执行:
$ ssh-copy-id 192.168.92.11 $ ssh-copy-id 192.168.92.12 $ ssh-copy-id 192.168.92.13 $ ssh-copy-id 192.168.92.20 $ ssh-copy-id 192.168.92.21
下载用于部署某个Kubernetes版本的docker-compose文件并使部署程序运行起来,例如此次实验针对刚刚发布的 K8S v1.13.2。
$ curl -L https://raw.githubusercontent.com/wise2c-devops/breeze/v1.13.2/docker-compose.yml -o docker-compose.yml $ docker-compose up -d
查看拉取的镜像
[[email protected] ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE wise2c/playbook v1.13.2 6c57dc3440b1 3 days ago 1.17GB wise2c/yum-repo v1.13.2 d08304a41136 5 days ago 745MB wise2c/pagoda v1.1 d4f2b4cabdec 13 days ago 483MB wise2c/deploy-ui v1.3 2f159b37bf13 2 weeks ago 40.1MB
查看运行的容器
如果一切正常(注意deploy-playbook这个容器是个卷容器,它是退出状态这是正常现象),部署机的88端口将能够被正常访问。
[[email protected] ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0221f2177505 wise2c/deploy-ui:v1.3 "/root/entrypoint.sh" 8 minutes ago Up 8 minutes deploy-ui cd24a52cd499 wise2c/pagoda:v1.1 "sh -c ‘/root/pagoda…" 8 minutes ago Up 8 minutes 0.0.0.0:88->80/tcp, 0.0.0.0:8088->8080/tcp deploy-main a0dcf2bc42e6 wise2c/playbook:v1.13.2 "sh" 8 minutes ago Exited (0) 8 minutes ago deploy-playbook b1f92f68fffa wise2c/yum-repo:v1.13.2 "nginx -g ‘daemon of…" 8 minutes ago Up 8 minutes 80/tcp, 0.0.0.0:2009->2009/tcp deploy-yumrepo [[email protected] ~]#
访问部署工具
添加集群
打开浏览器,访问部署程序的图形界面(部署机 IP 及端口 88),添加主机列表、添加服务角色并将加入的主机进行角色分配,然后开始部署:http://192.168.92.10:88
点击 + 号添加一个集群:
添加主机
点击“添加主机”,输入主机名、主机IP、描述信息(主机用途),点击确定。重复该步骤直至将集群所需的全部节点服务器加入(k8s master服务器、k8s worker node服务器、harbor服务器等等):
添加组件
点击“下一步”再点击“添加组件”按钮,对每个组件进行设置和分配服务器(docker角色、harbor角色、loadbalance角色、etcd角色、kubernetes角色、prometheus角色):
如果希望Breeze部署程序使用界面里输入的主机名代替当前服务器的主机名,则勾选format host name选项框:
镜像仓库设置这里的harbor entry point是指用户端访问镜像仓库的URL,可以直接写IP地址或写对应的域名:
接下来是设置高可用组件(haproxy+keepalived):
vip for k8s master是指三个k8s master服务器的高可用虚拟浮动IP地址;网卡请填写实际操作系统下的网卡名,注意请保证3个节点网卡名一致;router id和virtual router id请确保不同k8s集群使用不同的值。
Etcd可以选择部署于K8S Master节点也可以选择独立的三台主机:
kubernetes entry point是指高可用的一个设定值,如果生产环境有硬件或软件负载均衡指向这里的k8s master所有节点,那么就可以在这里填写负载均衡的统一入口地址。
相对于昂贵的F5专业硬件设备,我们也可以使用HAProxy和Keepalived的组合轻松完成这个设置,Breeze自带这个组合模块的部署。
例如下图的 192.168.92.30:6444 就是k8s集群高可用的统一入口,k8s的worker node会使用这个地址访问API Server。请注意如果使用的是Breeze自带的高可用组件haproxy+keepalived,则请填写实际的虚IP与默认端口6444。
接下来是可选安装项Prometheus(基于Prometheus Operator方式部署,集成Prometheus、Alertmanager、Grafana),这里请择一台Worker节点进行部署即可,有三个服务暴露端口可自行设定,注意NodePort端口号大于30000。
所有角色定义完成如下:
点击“下一步”开始安装部署。
开始部署
如果界面上所有角色图标全部变为绿色,则表示部署任务结束。可以登录任一k8s节点运行命令 kubectl get nodes 查看结果。
以上例子是3台etcd、3台k8s master、1台k8s worker node、1台镜像仓库的环境。实际可以增减规模。
验证集群状态
访问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}‘)
- 1
将返回的token字串粘贴至登录窗口即可实现登录。
访问grafana
安装好Prometheus之后,可以访问以下服务页面:
Grafana:
用户名密码默认为admin/admin
这里使用ID 315的dashboard模板进行展示:
Prometheus:
http://任意服务器IP:30900
Alertmanager:
http://任意服务器IP:30903
访问Harbor
默认用户名密码admin/Harbor12345
登录成功:
查看集群状态
查看集群状态:
[[email protected] ~]# kubectl get cs NAME STATUS MESSAGE ERROR scheduler Healthy ok controller-manager Healthy ok etcd-1 Healthy {"health": "true"} etcd-2 Healthy {"health": "true"} etcd-0 Healthy {"health": "true"} [[email protected] ~]#
查看节点状态:
[[email protected] ~]# kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME master01 Ready master 25m v1.13.2 192.168.92.11 <none> CentOS Linux 7 (Core) 4.20.2-1.el7.elrepo.x86_64 docker://18.6.1 master02 Ready master 24m v1.13.2 192.168.92.12 <none> CentOS Linux 7 (Core) 4.20.2-1.el7.elrepo.x86_64 docker://18.6.1 master03 Ready master 24m v1.13.2 192.168.92.13 <none> CentOS Linux 7 (Core) 4.20.2-1.el7.elrepo.x86_64 docker://18.6.1 worker01 Ready <none> 23m v1.13.2 192.168.92.21 <none> CentOS Linux 7 (Core) 4.20.2-1.el7.elrepo.x86_64 docker://18.6.1 [[email protected] ~]#
查看集群组件pod状态:
[[email protected] ~]# kubectl -n kube-system get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES coredns-8595b69b-25nqs 1/1 Running 0 25m 10.244.1.2 master03 <none> <none> coredns-8595b69b-dfzwz 1/1 Running 0 25m 10.244.1.3 master03 <none> <none> kube-apiserver-master01 1/1 Running 0 25m 192.168.92.11 master01 <none> <none> kube-apiserver-master02 1/1 Running 0 24m 192.168.92.12 master02 <none> <none> kube-apiserver-master03 1/1 Running 0 24m 192.168.92.13 master03 <none> <none> kube-controller-manager-master01 1/1 Running 0 24m 192.168.92.11 master01 <none> <none> kube-controller-manager-master02 1/1 Running 0 24m 192.168.92.12 master02 <none> <none> kube-controller-manager-master03 1/1 Running 0 24m 192.168.92.13 master03 <none> <none> kube-flannel-ds-6v625 1/1 Running 0 24m 192.168.92.13 master03 <none> <none> kube-flannel-ds-8p8m7 1/1 Running 0 24m 192.168.92.12 master02 <none> <none> kube-flannel-ds-m4ppq 1/1 Running 0 23m 192.168.92.21 worker01 <none> <none> kube-flannel-ds-xrmd2 1/1 Running 0 24m 192.168.92.11 master01 <none> <none> kube-proxy-bh4vl 1/1 Running 0 25m 192.168.92.13 master03 <none> <none> kube-proxy-cq4fc 1/1 Running 0 23m 192.168.92.21 worker01 <none> <none> kube-proxy-dz6l2 1/1 Running 0 25m 192.168.92.12 master02 <none> <none> kube-proxy-qkmq8 1/1 Running 0 25m 192.168.92.11 master01 <none> <none> kube-scheduler-master01 1/1 Running 0 24m 192.168.92.11 master01 <none> <none> kube-scheduler-master02 1/1 Running 0 24m 192.168.92.12 master02 <none> <none> kube-scheduler-master03 1/1 Running 0 24m 192.168.92.13 master03 <none> <none> kubernetes-dashboard-6f9bfdf8cb-rn6wd 1/1 Running 0 24m 10.244.1.4 master03 <none> <none> [[email protected] ~]#
查看prometheus相关pod
[[email protected] ~]# kubectl -n monitoring get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES alertmanager-main-0 2/2 Running 0 19m 10.244.3.8 worker01 <none> <none> alertmanager-main-1 2/2 Running 0 19m 10.244.3.10 worker01 <none> <none> alertmanager-main-2 2/2 Running 0 19m 10.244.3.11 worker01 <none> <none> grafana-5c59c6fb9c-78ng5 1/1 Running 0 20m 10.244.3.4 worker01 <none> <none> kube-state-metrics-565c6647f7-sc8d5 4/4 Running 0 20m 10.244.3.5 worker01 <none> <none> node-exporter-5hdqk 2/2 Running 0 20m 192.168.92.21 worker01 <none> <none> node-exporter-nxllq 2/2 Running 0 20m 192.168.92.11 master01 <none> <none> node-exporter-q2znp 2/2 Running 0 20m 192.168.92.12 master02 <none> <none> node-exporter-shdt8 2/2 Running 0 20m 192.168.92.13 master03 <none> <none> prometheus-adapter-68c9d7dc54-bb9t4 1/1 Running 0 20m 10.244.3.6 worker01 <none> <none> prometheus-k8s-0 3/3 Running 1 19m 10.244.3.9 worker01 <none> <none> prometheus-k8s-1 3/3 Running 1 19m 10.244.3.7 worker01 <none> <none> prometheus-operator-5fcf4d9b4d-qkpb8 1/1 Running 0 20m 10.244.3.2 worker01 <none> <none> [[email protected] ~]#
查看service
[[email protected] ~]# kubectl get service -n kube-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE coredns-prometheus ClusterIP None <none> 9153/TCP 23m kube-controller-manager-prometheus-discovery ClusterIP None <none> 10252/TCP 23m kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 30m kube-scheduler-prometheus-discovery ClusterIP None <none> 10251/TCP 23m kubelet ClusterIP None <none> 10250/TCP 21m kubernetes-dashboard NodePort 10.99.39.217 <none> 8443:30300/TCP 30m [[email protected] ~]# kubectl get service -n monitoring NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE alertmanager-main NodePort 10.101.39.236 <none> 9093:30903/TCP 24m alertmanager-operated ClusterIP None <none> 9093/TCP,6783/TCP 23m etcd-k8s ClusterIP None <none> 2379/TCP 23m grafana NodePort 10.110.93.179 <none> 3000:30902/TCP 24m kube-state-metrics ClusterIP None <none> 8443/TCP,9443/TCP 24m node-exporter ClusterIP None <none> 9100/TCP 24m prometheus-adapter ClusterIP 10.105.49.184 <none> 443/TCP 24m prometheus-k8s NodePort 10.103.34.132 <none> 9090:30900/TCP 24m prometheus-operated ClusterIP None <none> 9090/TCP 23m prometheus-operator ClusterIP None <none> 8080/TCP 24m [[email protected] ~]#
增加worker节点
在已经部署的集群内添加新的Worker Nodes。
准备worker节点,执行之前部署环境准备的配置相关步骤,配置主机名,配置ssh免密登录等。
(1) 在Breeze界面添加主机(设定主机名、IP地址、备注)。
(2) 在Breeze界面编辑Kubernetes角色,将新主机加入到kubernetes worker nodes列表并勾选"Just add new worker nodes, do not reinstall this cluster"。
(3) 在Breeze界面仅仅勾选Docker和Kubernetes并开始部署。
添加节点完成
查看节点状态
[[email protected] ~]# kubectl get nodes -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME master01 Ready master 10h v1.13.2 192.168.92.11 <none> CentOS Linux 7 (Core) 4.20.2-1.el7.elrepo.x86_64 docker://18.6.1 master02 Ready master 10h v1.13.2 192.168.92.12 <none> CentOS Linux 7 (Core) 4.20.2-1.el7.elrepo.x86_64 docker://18.6.1 master03 Ready master 10h v1.13.2 192.168.92.13 <none> CentOS Linux 7 (Core) 4.20.2-1.el7.elrepo.x86_64 docker://18.6.1 worker01 Ready <none> 10h v1.13.2 192.168.92.21 <none> CentOS Linux 7 (Core) 4.20.2-1.el7.elrepo.x86_64 docker://18.6.1 worker02 Ready <none> 4m48s v1.13.2 192.168.92.22 <none> CentOS Linux 7 (Core) 4.20.2-1.el7.elrepo.x86_64 docker://18.6.1 [[email protected] ~]#
手动删除节点
在Master节点上运行:
[[email protected] ~]# kubectl drain worker02 --delete-local-data --force --ignore-daemonsets [[email protected] ~]# kubectl delete node worker02 node "worker02" deleted [[email protected] ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master01 Ready master 10h v1.13.2 master02 Ready master 10h v1.13.2 master03 Ready master 10h v1.13.2 worker01 Ready <none> 10h v1.13.2 [[email protected] ~]#
上面两条命令执行完成后,在k8s-node2节点执行清理命令,重置kubeadm的安装状态:
[[email protected] ~]# kubeadm reset
在master上删除node并不会清理k8s-node2运行的容器,需要在删除节点上面手动运行清理命令。
常见故障排错
常见故障排错方法
参考:https://github.com/wise2c-devops/breeze/blob/master/TroubleShooting-CN.md
前端Web UI的日志如果不能判断出具体问题所在,可以在部署机上输入以下命令来获取更详细的日志:
[[email protected] ~]# docker logs -f deploy-main
原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/11320586.html