博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Kubespray部署生产可用的Kubernetes集群(1.11.2)
阅读量:6249 次
发布时间:2019-06-22

本文共 4272 字,大约阅读时间需要 14 分钟。

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

部署方案 优点 缺点
官方出品 部署较麻烦、不够透明
官方出品、部署较简单、懂Ansible就能上手 不够透明
部署较简单、需要花一些时间了解RKE的cluster.yml配置文件 不够透明
手动部署 完全透明、可配置、便于理解K8s各组件之间的关系 部署非常麻烦,容易出错

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

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

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

<!-- more -->

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

  • 考虑科学上网
  • 或修改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版本下载地址:)

~]# 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.88node2 ansible_host=172.20.0.89 ip=172.20.0.89node3 ansible_host=172.20.0.90 ip=172.20.0.90node4 ansible_host=172.20.0.91 ip=172.20.0.91node5 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 nodesNAME STATUS ROLES AGE VERSIONnode1 Ready master,node 2m v1.11.2node2 Ready master,node 2m v1.11.2node3 Ready node 2m v1.11.2node4 Ready node 2m v1.11.2node5 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 nginxNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEnginx NodePort 10.233.29.96 
80:32345/TCP 14s# 访问测试,如果能够正常返回NGINX首页,说明正常 ]# curl localhost:32345

卸载

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

遇到的问题

Calico网络插件部署失效。这是Calico 3.2所带来的问题,原因详见:

解决方法: ,即:将Calico降级到3.1.3。

本文转自开源中国-

转载地址:http://hcgia.baihongyu.com/

你可能感兴趣的文章
《计算机网络:自顶向下方法(原书第6版)》一2.1 应用层协议原理
查看>>
《基于ArcGIS的Python编程秘笈(第2版)》——2.8 添加图层到地图文档
查看>>
Gmail 即将落实阻止 JavaScript 的安全策略
查看>>
【PMP认证考试之个人总结】第 10 章 项目风险管理
查看>>
从超模转职成为程序媛是一种怎样的体验
查看>>
《C++入门经典(第6版)》——1.2 编译和链接源代码
查看>>
五个改善你服务器日志的技术
查看>>
Using Big Data to Build Customer Loyalty
查看>>
在 Ubuntu 中使用 NTP 进行时间同步
查看>>
《七周七数据库》一一2.3 第2天:高级查询、代码和规则
查看>>
《Java EE 7精粹》—— 1.3 Java EE 7有什么新功能
查看>>
利用OpenVSwitch构建多主机Docker网络
查看>>
如何从 Ubuntu 14.04 升级到 Ubuntu 14.10
查看>>
Andrew Ng机器学习公开课笔记 – Factor Analysis
查看>>
Docker Swarm介绍
查看>>
天猫618的美妆黑马出现了,背后是“肉毒杆菌之父”
查看>>
《HTML5 Canvas开发详解》——2.6 在画布上合成
查看>>
《妙手回春:网站可用性测试及优化指南(修订版)》一开场白:管我叫以实玛利吧...
查看>>
screen 命令使用及示例
查看>>
《C++游戏编程入门(第4版)》——1.4 使用算术运算符
查看>>