使用Kubespray部署生产可用的Kubernetes集群(1.11.2)
TIPS:
本文基于Kubespray 2.6.0,有点旧了。请参阅: 使用Kubespray 2.8.3部署生产可用的Kubernetes集群(1.12.5) 。
本文基于Kubespray 2.6.0,有点旧了。请参阅: 使用Kubespray 2.8.3部署生产可用的Kubernetes集群(1.12.5) 。
本文基于Kubespray 2.6.0,有点旧了。请参阅: 使用Kubespray 2.8.3部署生产可用的Kubernetes集群(1.12.5) 。
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,执行如下命令即可。
1 | setenforce 0 |
网络配置
在master机器上
1 | firewall-cmd --permanent --add-port=6443/tcp |
如果关闭了防火墙,则只需执行最下面三行。
在node机器上
1 | firewall-cmd --permanent --add-port=10250/tcp |
如果关闭了防火墙,则只需执行最下面两行。
【可选】关闭防火墙
1 | systemctl stop firewalld |
在ansible-client机器上安装ansible
安装ansible
1 | ~]# sudo yum install epel-release |
安装jinja2
1 | easy_install pip |
如果执行pip2 install jinja2 --upgrade
出现类似如下的提示:
1 | You are using pip version 9.0.1, however version 18.0 is available. |
则执行pip install --upgrade pip
升级pip,再执行pip2 install jinja2 --upgrade
安装Python 3.6
1 | sudo yum install python36 –y |
在ansible-client机器上配置免密登录
生成ssh公钥和私钥
在ansible-cilent机器上执行:
1 | ssh-keygen |
然后三次回车,生成ssh公钥和私钥。
建立ssh单向通道
在ansible-cilent机器上执行:
1 | ssh-copy-id root@172.20.0.88 #将公钥分发给88机器 |
在ansible-client机器上安装kubespray
下载kubespray
TIPS:本文下载的是master分支,如果大家要部署到线上环境,建议下载RELEASE分支。笔者撰写本文时,最新的RELEASE是2.6.0,RELEASE版本下载地址:https://github.com/kubernetes-incubator/kubespray/releases)
1
git clone https://github.com/kubernetes-incubator/kubespray.git
安装kubespray需要的包:
1
2cd kubespray
sudo pip install -r requirements.txt拷贝
inventory/sample
,命名为inventory/mycluster
,mycluster可以改为其他你喜欢的名字1
cp -r inventory/sample inventory/mycluster
使用inventory_builder,初始化inventory文件
1
2~]# 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
文件内容类似如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33[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
1
ansible-playbook -i inventory/mycluster/hosts.ini cluster.yml
大概20分钟左右,Kubernetes即可安装完毕。
验证
验证1:查看Node状态
1 | kubectl get nodes |
每个node都是ready的,说明OK。
验证2:部署一个NGINX
1 | 启动一个单节点nginx |
卸载
1 | 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/
评论系统未开启,无法评论!