使用Kubespray部署生产可用的Kubernetes集群(1.11.2)

Kubernetes的安装部署是难中之难,每个版本安装方式都略有区别。笔者一直想找一种 支持多平台相对简单适用于生产环境 的部署方案。经过一段时间的调研,有如下几种解决方案进入笔者视野:

部署方案

优点

缺点

Kubeadm

官方出品

部署较麻烦、不够透明

Kubespray

官方出品、部署较简单、懂Ansible就能上手

不够透明

RKE

部署较简单、需要花一些时间了解RKE的cluster.yml配置文件

不够透明

手动部署 第三方操作文档

完全透明、可配置、便于理解K8s各组件之间的关系

部署非常麻烦,容易出错

其他诸如Kops之类的方案,由于无法跨平台,或者其他因素,被我pass了。

最终,笔者决定使用Kubespray部署Kubernetes集群。也希望大家能够一起讨论,总结出更加好的部署方案

废话不多说,以下是操作步骤。

注:撰写本文时,笔者临时租赁了几台海外阿里云机器,实现了科学上网。如果您的机器在国内,请:

  • 考虑科学上网
  • 或修改Kubespray中的gcr地址,改为其他仓库地址,例如阿里云镜像地址。

主机规划

IP

作用

172.20.0.87

ansible-client

172.20.0.88

master,node

172.20.0.89

master,node

172.20.0.90

node

172.20.0.91

node

172.20.0.92

node

准备工作

关闭selinux

所有机器都必须关闭selinux,执行如下命令即可。

~]# setenforce 0
~]# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

网络配置

在master机器上

~]# firewall-cmd --permanent --add-port=6443/tcp
~]# firewall-cmd --permanent --add-port=2379-2380/tcp
~]# firewall-cmd --permanent --add-port=10250/tcp
~]# firewall-cmd --permanent --add-port=10251/tcp
~]# firewall-cmd --permanent --add-port=10252/tcp
~]# firewall-cmd --permanent --add-port=10255/tcp
~]# firewall-cmd --reload
~]# modprobe br_netfilter
~]# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
~]# sysctl -w net.ipv4.ip_forward=1

如果关闭了防火墙,则只需执行最下面三行。

在node机器上

~]# firewall-cmd --permanent --add-port=10250/tcp
~]# firewall-cmd --permanent --add-port=10255/tcp
~]# firewall-cmd --permanent --add-port=30000-32767/tcp
~]# firewall-cmd --permanent --add-port=6783/tcp
~]# firewall-cmd  --reload
~]# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
~]# sysctl -w net.ipv4.ip_forward=1

如果关闭了防火墙,则只需执行最下面两行。

【可选】关闭防火墙

systemctl stop firewalld

在ansible-client机器上安装ansible

安装ansible

~]# sudo yum install epel-release
~]# sudo yum install ansible

安装jinja2

~]# easy_install pip
~]# pip2 install jinja2 --upgrade

如果执行 pip2 install jinja2--upgrade 出现类似如下的提示:

You are using pip version 9.0.1, however version 18.0 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

则执行 pip install--upgrade pip 升级pip,再执行 pip2 install jinja2--upgrade

安装Python 3.6

~]# sudo yum install python36 –y

在ansible-client机器上配置免密登录

生成ssh公钥和私钥

在ansible-cilent机器上执行:

~]# ssh-keygen

然后三次回车,生成ssh公钥和私钥。

建立ssh单向通道

在ansible-cilent机器上执行:

~]# ssh-copy-id root@172.20.0.88        #将公钥分发给88机器
~]# ssh-copy-id root@172.20.0.89
~]# ssh-copy-id root@172.20.0.90
~]# ssh-copy-id root@172.20.0.91
~]# ssh-copy-id root@172.20.0.92

在ansible-client机器上安装kubespray

1 下载kubespray

TIPS:本文下载的是master分支,如果大家要部署到线上环境,建议下载RELEASE分支。笔者撰写本文时,最新的RELEASE是2.6.0,RELEASE版本下载地址:https://github.com/kubernetes-incubator/kubespray/releases)

~]# git clone https://github.com/kubernetes-incubator/kubespray.git

2 安装kubespray需要的包:

~]# cd kubespray
~]# sudo pip install -r requirements.txt

3 拷贝 inventory/sample ,命名为 inventory/mycluster ,mycluster可以改为其他你喜欢的名字

cp -r inventory/sample inventory/mycluster

4 使用inventory_builder,初始化inventory文件

~]# declare -a IPS=(172.20.0.88 172.20.0.89 172.20.0.90 172.20.0.91 172.20.0.92)
~]# CONFIG_FILE=inventory/mycluster/hosts.ini python36 contrib/inventory_builder/inventory.py ${IPS[@]}

此时,会看到 inventory/mycluster/host.ini 文件内容类似如下:

[k8s-cluster:children]
kube-master      
kube-node        

[all]
node1    ansible_host=172.20.0.88 ip=172.20.0.88
node2    ansible_host=172.20.0.89 ip=172.20.0.89
node3    ansible_host=172.20.0.90 ip=172.20.0.90
node4    ansible_host=172.20.0.91 ip=172.20.0.91
node5    ansible_host=172.20.0.92 ip=172.20.0.92

[kube-master]
node1    
node2    

[kube-node]
node1    
node2    
node3    
node4    
node5    

[etcd]
node1    
node2    
node3    

[calico-rr]

[vault]
node1    
node2    
node3

5 使用ansible playbook部署kubespray

~]# ansible-playbook -i inventory/mycluster/hosts.ini cluster.yml

6 大概20分钟左右,Kubernetes即可安装完毕。

验证

验证1:查看Node状态

]# kubectl get nodes
NAME      STATUS    ROLES         AGE       VERSION
node1     Ready     master,node   2m        v1.11.2
node2     Ready     master,node   2m        v1.11.2
node3     Ready     node          2m        v1.11.2
node4     Ready     node          2m        v1.11.2
node5     Ready     node          2m        v1.11.2

每个node都是ready的,说明OK。

验证2:部署一个NGINX

# 启动一个单节点nginx
]# kubectl run nginx --image=nginx:1.7.9 --port=80

# 为“nginx”服务暴露端口
]# kubectl expose deployment nginx --type=NodePort

# 查看nginx服务详情
]# kubectl get svc nginx
NAME      TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
nginx     NodePort   10.233.29.96   <none>        80:32345/TCP   14s

# 访问测试,如果能够正常返回NGINX首页,说明正常
]# curl localhost:32345

卸载

]# ansible-playbook -i inventory/mycluster/hosts.ini reset.yml

遇到的问题

Calico网络插件部署失效。这是Calico 3.2所带来的问题,原因详见:https://github.com/kubernetes-incubator/kubespray/issues/3223

解决方法:https://github.com/wilmardo/kubespray/commit/1c87a49d1443bcdd237500a714f1a60d680c1ad8 ,即:将Calico降级到3.1.3。

参考文档:

  • Kubespray – 10 Simple Steps for Installing a Production-Ready, Multi-Master HA Kubernetes Cluster:https://dzone.com/articles/kubespray-10-simple-steps-for-installing-a-product

TIPS:主要的参考文档,里面还讲解了Kubespray的一些配置,与可能会遇到的问题及解决方案。

  • 使用Kubespray 部署kubernetes 高可用集群:https://yq.aliyun.com/articles/505382
  • kubespray(ansible)自动化安装k8s集群:https://www.cnblogs.com/iiiiher/p/8128184.html

TIPS:里面有将如何替换gcr镜像为国内镜像

  • Installing Kubernetes On-premises/Cloud Providers with Kubespray:https://kubernetes.io/docs/setup/custom-cloud/kubespray/

原文发布于微信公众号 - A周立SpringCloud(gh_e6849e368b5f)

原文发表时间:2018-09-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏NetCore

怎样制作GHOST系统盘

制作Windows XP万能克隆镜像 战前分析:对于Windows XP,制作万能克隆时的一个重要问题就是系统激活,因为Windows XP为了防止盗版,采取...

4398
来自专栏FreeBuf

Firefox/Chrome渗透测试插件推荐

注意:360安全浏览器有些比较不错的功能值得体验下(firefox/chrome有些功能我没能正常使用)不喜勿喷。firefox一直是各位渗透测试必备的利器,这...

8067
来自专栏FreeBuf

Linux爆新漏洞,长按回车键70秒即可获得root权限

按住回车70秒,黑客就能在linux系统绕过认证,进而获取root权限,并能远程控制经过加密的linux系统。 漏洞来源 这个安全问题来源于Cryptsetu...

3165
来自专栏FreeBuf

BurpSuite下一代渗透检测工具:BurpKit

有“渗透神器”之称的BurpSuite 是用于渗透测试Web 应用程序的集成平台。作为其丰富的功能之一,插件BurpKit提供了双向JavaScript桥梁AP...

2385
来自专栏漏斗社区

工具| 诸神之眼之邮件发送nmap的扫描报告

VPS上的Nmap还在扫描工作着,而你已经把它忘了忙着其他事情。突然,一封邮件发来,向你汇报本次扫描完毕,和具体的扫描报告。是不是觉得很方便?借助Nmap的库文...

2874
来自专栏小白安全

渗透一个网站需要做的事情

一,开始信息收集 1,获取域名的whois信息,获取注册者邮箱姓名电话等。 2,查询服务器旁站,因为主站一般比较难,所以先看看旁站有没有通用性的cm...

3959
来自专栏程序员的碎碎念

如何解决Python包依赖问题

以简洁高效(指编程较为高效, 而不是运行速度)出名的Python, 在包依赖问题上有时候让人挠头.

1822
来自专栏自由而无用的灵魂的碎碎念

实战解决使用ghost安装系统出现的各种问题

昨天使用ghost给人安装系统时,把另一个分区的数据都搞没了,安装完也只剩下一个分区,相信了解的同志们知道是什么原因。

1413
来自专栏沃趣科技

Oracle集群时间同步

在RAC中集群的时间应该是保持同步的,否则可能导致很多问题,比如:依赖于时间的应用会造成数据的错误,各种日志打印的顺序紊乱,这将会影响问题的诊断,严重的可能会导...

1544
来自专栏用户2442861的专栏

python项目打包部署

作者:张博 链接:https://www.zhihu.com/question/38081354/answer/81829426 来源:知乎 著作权归作者...

3.1K1

扫码关注云+社区

领取腾讯云代金券