生产环境:ansible自动化部署kubernetes-1.14
概述:
本文提供ansible-playbooks用来帮助读者用ansible构建二进制kubernetes1.14,
集群包含calico、nginx-ingress、HA
提供资源有kubernetes-1.14二进制安装包、docker18/rpm包、calico所需镜像、nginx-ingress所需镜像、cfssl包等
执行tree /root/tmp/ansible-playbooks 可以在files目录下查看所需资源,后续会继续完善本文
资源地址:https://pan.baidu.com/s/1KAUOY7NWnGXrDmqSd1LVPA 密码:nhbl
后续会继续详写nfs、ceph、hostpath等volum;基于POD运行的registry镜像仓库;calico、ingress详解;ELK;federationv2联邦多集群管理等,有兴趣的小伙伴可以加入探讨!
1.配置服务器环境

!!!注意⚠️
生产环境建议如上配置,是否在master上部署kubelet\kube-proxy\docker\calico,可根据资源自行判断,服务器配置根据服务需求进行调整。
1、etcd节点x3 : 注意etcd必须是奇数个节点
2、master节点x3 : 没有奇数偶数的限制,后面可以根据实际情况再增加节点数,
3、node节点x1: 真正应用负载的节点,后面可以根据实际情况很方便的增加节点数
本文为了展示,服务器配置如下:

1.1.修改每台节点DNS
在每台节点上执行:
cat <<EOF >> /etc/hosts
192.168.33.1 k8s-master1
192.168.33.2 k8s-master2
192.168.33.3 k8s-master3
192.168.33.4 k8s-node1
192.168.33.5 k8s-node2
192.168.33.6 k8s-node3
192.168.33.7 k8s-node4
192.168.33.8 k8s-node5
EOF
1.2.开启k8s-master1对所有节点免密访问
定义变量,关闭shell后该变量会消失需要重新执行
ms="k8s-master1 k8s-master2 k8s-master3" && \
oms="k8s-master2 k8s-master3" &&\
ns="k8s-node1 "
生成并拷贝证书
ssh-keygen -t rsa && \
for i in $ms $ns; do ssh-copy-id -i ~/.ssh/id_rsa.pub $i; done
1.3.修改所有节点主机名
for host in $ms $ns; do
ssh $host "hostnamectl set-hostname $host";
Done
1.4.将ansible等资源上传到k8s-master1的~/tmp目录
解压
tar -zxvf ansible.tar.gz
将nodePrepare.sh拷贝到其他节点:
for host in $ms $ns; do
scp -r ~/tmp/nodePrepare,sh root@$host:/root/tmp/nodePrepare.sh";
done
1.5.设置基础环境
for host in $ms $ns; do
ssh $host "sh /root/tmp/nodePrepare.sh";
done
注意:若配置未生效,重启机器生效
2.部署Kubernetes集群
2.1.部署ansible运维工具
设置ansible的部署节点:
cat>>/etc/ansible/hosts<<EOF
[master]
10.8.4.133
10.8.4.134
10.8.4.135
[node]
10.8.4.136
EOF
执行:
ansible all -m ping -u root
如图所示

如果有失败节点,请检查ssh免秘是否执行成功。
2.2.开始部署docker、kubernetes集群组件、相应网络组件及镜像仓库
设置xxx/ansible-k8s/stage文件,更改环境地址。


根据自己的机器更改stage文件。
之后执行
ansible-playbook -i /root/tmp/ansible-playbooks/ansible-k8s/stage -u root /root/tmp/ansible-playbooks/ansible-k8s/kubernetes.yml
2.3.验证是否安装成功
在master节点执行如下命令
kubectl get cs

kubectl get nodes --all-namespaces
所有node状态为ready表示集群安装完成

kubectl get pod -n kube-system
calico 与 coredns pod搭建成功

route -n 查看tunl0网络,成功,节点可以ping通podIP

kubectl get pod -n ingress-nginx

2.3.1.部署my-nginx服务,检测
vi my-nginx.yaml
apiVersion: apps/v1
kind: Deployment*
metadata:
name: my-nginx
spec:
replicas: 2
selector:
matchLabels:
k8s-app: my-nginx
template:
metadata:
labels:
k8s-app: my-nginx
spec:
containers:
- name: my-nginx
image: nginx:1.9
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
k8s-app: my-nginx
spec:
type: NodePort
ports:
- port: 8080
targetPort: 80
protocol: TCP
name: http
- port: 443
protocol: TCP
name: https
selector:
k8s-app: my-nginx
2.3.2.部署my-nginx-ingress检测ingress
vi my-nginx-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: submodule-checker-ingress
spec:
rules:
- host: nginx.weave.pub
http:
paths:
- backend:
serviceName: my-nginx
servicePort: 80
kubectl create -f my-nginx-ingress.yaml && kubectl create -f my-nginx.yaml
vi /etc/hosts


ingress部署成功
检验coredns可以部署busybox的pod,进入pod,用nslookup查看dns是否可以得到clusterIP
以上如有问题,可以通过kubectl describe pod XXX或者systemctl status XXX进行查看问题并解决,也可以journalctl -u XXX查看日志信息
由于网上资源资料太少,所以ansible脚本及资源均为个人手码,整理拿出提供大家参考,觉得有帮助的小伙伴给个赞哟!
后续会继续详写nfs、ceph、hostpath等volum;基于POD运行的registry镜像仓库;calico、ingress详解;ELK等,有兴趣的小伙伴可以加入探讨。
哪里有不懂可以私我!欢迎打扰
参考资料:
生产环境:ansible自动化部署kubernetes-1.14的更多相关文章
- .NET持续集成与自动化部署之路第三篇——测试环境到生产环境的一键部署策略(Windows)
Jenkins测试环境到生产环境的一键部署策略(Windows) 一.前言 前面我们已经初步实现了开发集成环境.测试环境的持续集成(自动化构建.自动化测试.自动化部署).但生产环境自动化部署迟 ...
- Jenkins+Gitlab+Ansible自动化部署(六)
Pipeline Job实现Nginix+MySQL+PHP+Wordpress实现自动化部署交付(Jenkins+Gitlab+Ansible自动化部署(五)https://www.cnblogs. ...
- Jenkins+Gitlab+Ansible自动化部署(一)
首先准备实验环境 虚拟机 主机名 IP地址 服务 系统版本 内核版本 Vmware Workstation 14 gitlab.example.com 192.168.244.130 gitlab ...
- Ansible自动化部署K8S集群
Ansible自动化部署K8S集群 1.1 Ansible介绍 Ansible是一种IT自动化工具.它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部署,滚动更新.Ansible适用于管理企 ...
- 在生产环境使用Docker部署应用
导读 Docker现在越来越流行,但是真正在生产环境部署Docker还是个比较新的概念,还没有一个标准的流程.作者是ROR的程序员,作者结合平时的部署经验,联系Docker的特点,向大家分享了其在生产 ...
- Jenkins+Gitlab+Ansible自动化部署(五)
Freestyle Job实现静态网站部署交付(接Jenkins+Gitlab+Ansible自动化部署(四)https://www.cnblogs.com/zd520pyx1314/p/102445 ...
- Jenkins+Gitlab+Ansible自动化部署(三)
接Jenkins+Gitlab+Ansible自动化部署(一)https://www.cnblogs.com/zd520pyx1314/p/10210727.html 和(二)https://www. ...
- Jenkins+Gitlab+Ansible自动化部署(四)
接Jenkins+Gitlab+Ansible自动化部署(三)https://www.cnblogs.com/zd520pyx1314/p/10235394.html Jenkins应用 Jenkin ...
- Linux(四)—— 项目部署与ansible自动化部署
目录 项目部署与ansible自动化部署 一.项目部署 二.ansible自动化部署(python自动化运维) 1.安装ansible 2.ansible例子 3.ansible自动化部署nginx ...
- CentOS7系统 ansible自动化部署多台服务器部署
CentOS7系统 ansible自动化部署多台服务器部署 Ansible工作机制 从图中可以看出ansible分为以下几个部份: 1> Control Node:控制机器2> In ...
随机推荐
- 使用re.split 按标点+空格的一种分割办法
import re import string t1 = re.split("["+string.punctuation+" ]","(555) 12 ...
- SQL Server 数据完整性的实现——约束
SQL Server数据库采用的是关系数据模型,而关系数据模型本身的优点之一就是模型本身集成了数据完整性.作为模型一部分而实施的数据完整性(例如在创建数据表时的列属性定义)称作为声明式(Declara ...
- C#设计模式开启闯关之路
前言背景 这是一条望不到尽头的编程之路,自踏入编程之路开始.就面临着各式各样的挑战,而我们也需要不断的挑战自己.不断学习充实自己.打好坚实的基础.以使我们可以走的更远.刚踏入编程的时候.根据需求编程, ...
- Java中不得不谈的值传递和地址传递
个人的一些认识,希望能对初学Java的你,或者困惑于方法参数传递的你祈祷一丝帮助! 下面是一些作者的个人观点,如果有错,欢迎各位大牛指出错误,灰常感谢您的观看与支持... -------------- ...
- 微服务SpringCloud之Spring Cloud Config配置中心服务化
在前面两篇Spring Cloud Config配置中心的博客中都是需要指定配置服务的地址url:spring.cloud.config.uri,客户端都是直接调用配置中心的server端来获取配置文 ...
- maven项目编译通过,测试用例卡住,断点也用不了
maven项目编译通过,测试用例卡住,断点也用不了.如下图 maven的tomcat插件可以运行没报错,但是网页访问一直转圈 原因: 最后发现是typeAliasesPackage这里设置了别名,所以 ...
- app发布当天,用户无法登录
原因:当用户登录时候有商城用户的触发器存在,它会让商城用户也更新成登录状态. 由于用户量大,导致数据库锁死. 最后解决案:删掉触发器,在app的接口登录程序里,追加商城用户更新成登录的操作. 他案1: ...
- 用Canvas实现Photoshop的钢笔工具(贝塞尔曲线)
前两天在用Canvas实现一个绘制路径的小功能.做完之后发现加以完善可以“复刻”一下PS里面的钢笔工具. PS里的钢笔工具对我来说是PS中最好用的工具! 所以本文主要介绍如何用Canvas来实现Pho ...
- NanoPi NEO2 学习笔记 1:安装系统、首次开机和一些设置
初识NEO2 前几天搞到了一块NanoPi NEO2,A53的核心,512M内存,一个千兆网口,非常小的体积,质量也不错,非常满意,140元的价格可以买到这样一块ARM开发板也是非常划算了,非常适合低 ...
- Java任务调度框架Quartz教程实例
介绍: Quartz框架是一个全功能.开源的任务调度服务,可以集成几乎任何的java应用程序—从小的单片机系统到大型的电子商务系统.Quartz可以执行上千上万的任务调度. 核心概念 Quar ...