利用ansible部署kubernetes准备:
集群介绍
本系列文档致力于提供快速部署高可用k8s集群的工具,并且也努力成为k8s实践、使用的参考书;基于二进制方式部署和利用ansible-playbook实现自动化:既提供一键安装脚本,也可以分步执行安装各个组件,同时讲解每一步主要参数配置和注意事项;二进制方式部署有助于理解系统各组件的交互原理和熟悉组件启动参数,有助于快速排查解决实际问题。
版本组件
kubernetes v1.9.7(最新的集群是1.14多) etcd v3.3.4 docker 18.03.0-ce calico/node:v3.0.6 calico/cni:v2.0.5 calico/kube-controllers:v2.0.4 centos 7.3+
集群规划和基础参数设定
高可用集群所需节点配置如下:
部署节 x1 : 运行这份 ansible 脚本的节点
etcd节点 x3 : 注意etcd集群必须是1,3,5,7...奇数个节点(就是说etcd节点的个数)
master节点 x1 : 运行集群主要组件
node节点 x3 : 真正应用部署的节点,根据需要增加机器配置和节点数
部署节点的操作
在部署节点准备ansible:使用ansible的doker环境启动
(1)下载内部源配置脚本
链接: https://pan.baidu.com/s/1hM0ry0k4FMr1fpC2HYwR9g 提取码: g5xp
(2)下载并安装docker
链接: https://pan.baidu.com/s/1eH9-Qu3ONLLO7YXeXYe96w 提取码: pvae
ls tar zxvf docker.tar.gz ls cd docker/ ls sh docker.sh systemctl status docker docker images
(3)下载并运行docker版ansible
链接: https://pan.baidu.com/s/1bA9lAHXx2K7KgZ8IAS9qUQ 提取码: us61
docker run -itd -v /etc/ansible:/etc/ansible -v /etc/kubernetes/:/etc/kubernetes/ -v /root/.kube:/root/.kube -v /usr/local/bin/:/usr/local/bin/ 1acb4fd5df5b /bin/sh
(4)配置每台机器之间主机名以及解析
下载k8s集群包
链接: https://pan.baidu.com/s/1WQRdvC1bHGyv5F-I60drNA 提取码: qgiv
(5)解压刚下载的包
tar xzf kubernetens.tar.gz
进入解压出来的目录
cd kubernetens
(6)再次解压k8s197.tar.gz、kube-yunwei-197.tar.gz这两个压缩包
tar xzf k8s197.tar.gz tar kube-yunwei-197.tar.gz
(7)将解压后的目录里的文件移动至/etc/ansible下
cd kube-yunwei-197 mv * /etc/ansible/ cd bin mv * /etc/ansible/bin/
(8)进入/etc/ansible
cd /etc/ansible
创建hosts文件
cd example
cp hosts.s-master.example ../hosts
修改配置文件
vim hosts 3行 修改为部署节点IP 7、8、9、行 修改为etcd节点IP 12行 修改为master节点IP 15、16、17行 修改为node节点IP 25行 修改为master节点IP 28行 修改为master节点IP 34行 网络改为calico,因为flannel是个二层的网络,它不支持跨网段通信 64行 修改为etcd节点IP 67行 修改为etcd节点IP 71行 密码改为admin 75行 修改为bin_dir="/usr/local/bin"
部署节点容器内操作
(1)进入ansible容器
docker exec -it e9f5c3454f97 /bin/sh
(2)设置主机名解析
vi /etc/hosts
(3)发送密钥
ssh-keygen ssh-copy-id kunbernetens ssh-copy-id master ssh-copy-id node1 ssh-copy-id node2
(4)测试能不能通信其他主机
ansible all –m ping
(5)创建CA证书和环境配置(容器内执行操作)
主要完成CA证书创建、分发、环境变量。
kubernetes 系统各组件需要使用 TLS 证书对通信进行加密,使用 CloudFlare 的 PKI 工具集生成自签名的CA证书,用来签名后续创建的其它 TLS 证书。
cd /etc/ansible ansible-playbook 01.prepare.yml
(6)安装etcd集群(容器内执行操作)
kuberntes 系统使用 etcd 存储所有数据,是最重要的组件之一,注意 etcd集群只能有奇数个节点(1,3,5...),本文档使用3个节点做集群。
ansible-playbook 02.etcd.yml
kubectl命令行工具
kubectl使用~/.kube/config 配置文件与kube-apiserver进行交互,且拥有完全权限,因此尽量避免安装在不必要的节点上。cat ~/.kube/config可以看到配置文件包含 kube-apiserver 地址、证书、用户名等信息。
(7)安装docker服务(容器内执行)
ansible-playbook 03.docker.yml
报如下错误怎么办?
手动去node节点启动docker
systemctl start docker
systemctl enable docker
而后删除错误日志文件
rm –rf 03.docker.retry
(8)安装kube-master节点(容器内操作)
部署master节点包含三个组件`apiserver` `scheduler` `controller-manager`,其中:
apiserver:提供集群管理的REST API接口,包括认证授权、数据校验以及集群状态变更等
1、只有API Server才直接操作etcd
2、其他模块通过API Server查询或修改数据
3、提供其他模块之间的数据交互和通信的枢纽
scheduler:负责分配调度Pod到集群内的node节点
1、监听kube-apiserver,查询还未分配Node的Pod
2、根据调度策略为这些Pod分配节点
controller-manager:由一系列的控制器组成,它通过apiserver监控整个集群的状态,并确保集群处于预期的工状态
ansible-playbook 04.kube-master.yml
(9)安装kube-node节点(容器内操作)
node 是集群中承载应用的节点,前置条件需要先部署好master节点(因为需要操作用户角色绑定、批准kubelet TLS 证书请求等),它需要部署如下组件:
1、docker:运行容器
2、calico: 配置容器网络
3、kubelet: node上最主要的组件
4、kube-proxy: 发布应用服务与负载均衡
ansible-playbook 05.kube-node.yml
master node1 node2节点操作
安装网络
(1)每个节点准备如下镜像tar包:(从部署节点发送)
(2)解压image.tar.gz得出如下镜像,各节点导入解压得到的镜像:
除bash-completion-2.1-6.el7.noarch.rpm这个包,其余包都移动至calico目录!!
进入calico目录
for im in `ls`;do docker load -i $im;done
(3)ansible容器中执行:
ansible-playbook 06.network.yml
可以在master节点或控制节点先验证一下
kubectl get node
(4)验证calico网络:
部署节点ansible容器操作
部署coredns服务
(1)进入/etc/ansible/manifests 目录:
(2)进入coredns工作目录,并创建pod(部署域名解析服务):
kubectl create -f coredns.yaml
(3)验证coredns:
在集群中任意节点都能ping通pod服务IP
部署dashboard
(1)进入dashboard工作目录,并创建pod:
kubectl create -f .
(2)验证dashboard:
(3)查看 dashboard 服务端点,并登陆:
kubectl cluster-info
将dashboard 服务端点复制到浏览器并打开(用户名/密码:admin/admin)
需要输入 Token 方可登陆,获取 Token:
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret|grep admin-user|awk '{print $1}')
登陆成功:
部署heapster监控
(1)进入heapster工作目录,并创建pod:
(2)验证监控: