Ansible 自动化部署 k8s 二进制集群
Ansible 是一种 IT 自动化工具. 它可以配置系统, 部署软件以及协调更高级的 IT 任务, 例如持续部署, 滚动更新. Ansible 适用于管理企业 IT 基础设施. 这里我通过 Ansible 来实现 Kubernetes v1.16 高可用集群自动部署(离线版) (但是还是需要网络, 因为这里需要去部署 flannel,coredns,ingress,dashboard 插件, 需要拉取镜像
介绍
使用 ansible 自动化部署 k8s 集群 (支持单 master, 多 master) 离线版
软件架构
软件架构说明
单 master 架构
多 master 架构
1. 安装教程
先部署一台 Ansible 来做管控节点, 安装步骤这里省略
将两个文件都解压到 ansible 服务器上, 我的工作目录是在 / opt / 下, 将解压的目录都放在 / opt 下
修改 hosts 文件, 指定部署是单 master, 还是多 master, 以及 group_var 下的 all 的变量, 将 ip 指定需要修改的
2. 使用说明
单 master,4c,8g,(1 台 master,2 台 node,1 台 ansible)
多 master,4c,8g,(2 台 master,2 台 node,1 台 ansible,2 台 nginx)
如果部署的是多 master 主机, 那么需要在 nginx 上再跑 1 个 keepalived, 如果是云主机可以拿 slb 来补充
1. 系统初始化
关闭 selinux,firewalld
关闭 swap
时间同步
写 hosts
2. Etcd 集群部署
生成 etcd 证书
部署三个 etcd 集群
查看集群状态
部署 Master
生成 apiserver 证书
部署 apiserver,controller-manager 和 scheduler 组件
启动 TLS Bootstrapping
部署 Node
安装 Docker
部署 kubelet 和 kube-proxy
在 Master 上允许为新 Node 颁发证书
授权 apiserver 访问 kubelet
部署插件(准备好镜像)
- Flannel
- web UI
- CoreDNS
- Ingress Controller
Master 高可用
增加 Master 节点(与 Master1 一致)
部署 Nginx 负载均衡器
Nginx+Keepalived 高可用
修改 Node 连接 VIP
3.Roles 组织 K8S 各组件部署解析
编写建议:
梳理流程和 Roles 结构
如果配置文件有不固定内容, 使用 jinja 渲染
人工干预改动的内容应统一写到一个文件中
下载所需文件
确保所有节点系统时间一致
4. 下载 Ansible 部署文件:
Git clone Git@gitee.com:zhaocheng172/ansible-k8s.Git
拉取代码的时候, 请把你的公钥发给我, 不然你拉取不下来
下载软件包并解压:
- https://pan.baidu.com/s/1Wf9sFR4zkpx_D0BJbZK7ZQ
- tar zxf binary_pkg.tar.gz
修改 Ansible 文件
修改 hosts 文件, 根据规划修改对应 IP 和名称.
vi hosts
修改 group_vars/all.YAML 文件, 修改软件包目录和证书可信任 IP.
VIM group_vars/all.YAML
- software_dir: '/root/binary_pkg'
- ...
- cert_hosts:
- k8s:
- etcd:
5. 一键部署
单 Master 版
ansible-playbook -i hosts single-master-deploy.YAML -uroot -k
多 Master 版:
ansible-playbook -i hosts multi-master-deploy.YAML -uroot -k
6, 部署控制
如果安装某个阶段失败, 可针对性测试.
例如: 只运行部署插件
ansible-playbook -i hosts single-master-deploy.YAML -uroot -k --tags master
部署完效果
- [root@k8s-master1 ~]# kubectl get node
- NAME STATUS ROLES AGE VERSION
- k8s-master1 Ready <none> 2d3h v1.16.0
- k8s-node1 Ready <none> 2d3h v1.16.0
- k8s-node2 Ready <none> 2d3h v1.16.0
- [root@k8s-master1 ~]# kubectl get cs
- NAME AGE
- controller-manager <unknown>
- scheduler <unknown>
- etcd-2 <unknown>
- etcd-0 <unknown>
- etcd-1 <unknown>
- [root@k8s-master1 ~]# kubectl get pod,svc -A
- NAMESPACE NAME READY STATUS RESTARTS AGE
- ingress-nginx pod/nginx-ingress-controller-8zp8r 1/1 Running 0 2d3h
- ingress-nginx pod/nginx-ingress-controller-bfgj6 1/1 Running 0 2d3h
- ingress-nginx pod/nginx-ingress-controller-n5k22 1/1 Running 0 2d3h
- kube-system pod/coredns-59fb8d54d6-n6m5w 1/1 Running 0 2d3h
- kube-system pod/kube-flannel-ds-amd64-jwvw6 1/1 Running 0 2d3h
- kube-system pod/kube-flannel-ds-amd64-m92sg 1/1 Running 0 2d3h
- kube-system pod/kube-flannel-ds-amd64-xwf2h 1/1 Running 0 2d3h
- kubernetes-dashboard pod/dashboard-metrics-scraper-566cddb686-smw6p 1/1 Running 0 2d3h
- kubernetes-dashboard pod/kubernetes-dashboard-c4bc5bd44-zgd82 1/1 Running 0 2d3h
- NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- default service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 2d3h
- ingress-nginx service/ingress-nginx ClusterIP 10.0.0.22 <none> 80/TCP,443/TCP 2d3h
- kube-system service/kube-dns ClusterIP 10.0.0.2 <none> 53/UDP,53/TCP 2d3h
- kubernetes-dashboard service/dashboard-metrics-scraper ClusterIP 10.0.0.176 <none> 8000/TCP 2d3h
- kubernetes-dashboard service/kubernetes-dashboard NodePort 10.0.0.72 <none> 443:30001/TCP 2d3h
来源: http://blog.51cto.com/14143894/2456444