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,执行如下命令即可。
网络配置
在master机器上
如果关闭了防火墙,则只需执行最下面三行。
在node机器上
如果关闭了防火墙,则只需执行最下面两行。
【可选】关闭防火墙
在ansible-client机器上安装ansible
安装ansible
安装jinja2
如果执行pip2 install jinja2 --upgrade
出现类似如下的提示:
则执行pip install --upgrade pip
升级pip,再执行pip2 install jinja2 --upgrade
安装Python 3.6
在ansible-client机器上配置免密登录
生成ssh公钥和私钥
在ansible-cilent机器上执行:
然后三次回车,生成ssh公钥和私钥。
建立ssh单向通道
在ansible-cilent机器上执行:
在ansible-client机器上安装kubespray
- 安装kubespray需要的包:
- 拷贝
inventory/sample
,命名为inventory/mycluster
,mycluster可以改为其他你喜欢的名字
- 使用inventory_builder,初始化inventory文件
此时,会看到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
- 使用ansible playbook部署kubespray
- 大概20分钟左右,Kubernetes即可安装完毕。
验证
验证1:查看Node状态
每个node都是ready的,说明OK。
验证2:部署一个NGINX
卸载