使用kubespray安装kubernetes
1. 环境准备
1.1. 部署机器
以下机器为虚拟机
172.16.94.140
kube-master-0
k8s master
Centos 4.17.14
内存:3G
172.16.94.141
kube-node-41
k8s node
Centos 4.17.14
内存:3G
172.16.94.142
kube-node-42
k8s node
Centos 4.17.14
内存:3G
172.16.94.135
部署管理机
-
1.2. 配置管理机
管理机主要用来部署k8s集群,需要安装以下版本的软件,具体可参考:
https://github.com/kubernetes-incubator/kubespray#requirements
https://github.com/kubernetes-incubator/kubespray/blob/master/requirements.txt
ansible>=2.4.0
jinja2>=2.9.6
netaddr
pbr>=1.6
ansible-modules-hashivault>=3.9.4
hvac1、安装及配置ansible
参考ansible的使用。
给部署机器配置SSH的免密登录权限,具体参考ssh免密登录。
2、安装python-netaddr
3、升级Jinja
1.3. 配置部署机器
部署机器即用来运行k8s集群的机器,包括Master和Node。
1、确认系统版本
本文采用centos7的系统,建议将系统内核升级到4.x.x以上。
2、关闭防火墙
3、关闭swap
Kubespary v2.5.0的版本需要关闭swap,具体参考
https://github.com/kubernetes-incubator/kubespray/blob/02cd5418c22d51e40261775908d55bc562206023/roles/kubernetes/preinstall/tasks/verify-settings.yml#L75
V2.6.0版本去除了swap的检查,具体参考:
https://github.com/kubernetes-incubator/kubespray/commit/b902602d161f8c147f3d155d2ac5360244577127#diff-b92ae64dd18d34a96fbeb7f7e48a6a9b
执行关闭swap命令swapoff -a。
4、确认部署机器内存
由于本文采用虚拟机部署,内存可能存在不足的问题,因此将虚拟机内存调整为3G或以上;如果是物理机一般不会有内存不足的问题。具体参考:
https://github.com/kubernetes-incubator/kubespray/blob/95f1e4634a1c50fa77312d058a2b713353f4307e/roles/kubernetes/preinstall/tasks/verify-settings.yml#L52
1.4. 涉及镜像
Docker版本为17.03.2-ce。
1、Master节点
gcr.io/google-containers/hyperkube
v1.9.5
620 MB
a7e7fdbc5fee
k8s
quay.io/coreos/etcd
v3.2.4
35.7 MB
498ffffcfd05
gcr.io/google_containers/pause-amd64
3.0
747 kB
99e59f495ffa
quay.io/calico/node
v2.6.8
282 MB
e96a297310fd
calico
quay.io/calico/cni
v1.11.4
70.8 MB
4c4cb67d7a88
calico
quay.io/calico/ctl
v1.6.3
44.4 MB
46d3aace8bc6
calico
2、Node节点
gcr.io/google-containers/hyperkube
v1.9.5
620 MB
a7e7fdbc5fee
k8s
gcr.io/google_containers/pause-amd64
3.0
747 kB
99e59f495ffa
quay.io/calico/node
v2.6.8
282 MB
e96a297310fd
calico
quay.io/calico/cni
v1.11.4
70.8 MB
4c4cb67d7a88
calico
quay.io/calico/ctl
v1.6.3
44.4 MB
46d3aace8bc6
calico
gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64
1.14.8
40.9 MB
c2ce1ffb51ed
dns
gcr.io/google_containers/k8s-dns-sidecar-amd64
1.14.8
42.2 MB
6f7f2dc7fab5
dns
gcr.io/google_containers/k8s-dns-kube-dns-amd64
1.14.8
50.5 MB
80cc5ea4b547
dns
gcr.io/google_containers/cluster-proportional-autoscaler-amd64
1.1.2
50.5 MB
78cf3f492e6b
gcr.io/google_containers/kubernetes-dashboard-amd64
v1.8.3
102 MB
0c60bcf89900
dashboard
nginx
1.13
109 MB
ae513a47849c
-
3、说明
镜像被墙并且全部镜像下载需要较多时间,建议提前下载到部署机器上。
hyperkube镜像主要用来运行k8s核心组件(例如kube-apiserver等)。
此处使用的网络组件为calico。
2. 部署集群
2.1. 下载kubespary的源码
2.2. 编辑配置文件
2.2.1. hosts.ini
hosts.ini主要为部署节点机器信息的文件,路径为:kubespray/inventory/sample/hosts.ini。
例如:
hosts.ini文件可以填写部署机器的登录密码,也可以不填密码而设置ssh的免密登录。
2.2.2. k8s-cluster.yml
k8s-cluster.yml主要为k8s集群的配置文件,路径为:kubespray/inventory/k8s/group_vars/k8s-cluster.yml。该文件可以修改安装的k8s集群的版本,参数为:kube_version: v1.9.5。具体可参考:
https://github.com/kubernetes-incubator/kubespray/blob/master/inventory/sample/group_vars/k8s-cluster.yml#L22
2.3. 执行部署操作
涉及文件为cluster.yml。
-vvv 参数表示输出运行日志
如果需要重置可以执行以下命令:
涉及文件为reset.yml。
3. 确认部署结果
3.1. ansible的部署结果
ansible命令执行完,出现以下日志,则说明部署成功,否则根据报错内容进行修改。
以下为部分部署执行日志:
3.2. k8s集群运行结果
1、k8s组件信息
2、k8s节点信息
3、组件健康信息
4. k8s集群扩容节点
4.1. 修改hosts.ini文件
如果需要扩容Node节点,则修改hosts.ini文件,增加新增的机器信息。例如,要增加节点机器kube-node-43(IP为172.16.94.143),修改后的文件内容如下:
4.2. 执行扩容命令
涉及文件为scale.yml。
4.3. 检查扩容结果
1、ansible的执行结果
2、k8s的节点信息
可以看到新增的kube-node-43节点已经扩容完成。
3、k8s组件信息
5. 部署高可用集群
将hosts.ini文件中的master和etcd的机器增加到多台,执行部署命令。
例如:
6. 升级k8s集群
选择对应的k8s版本信息,执行升级命令。涉及文件为upgrade-cluster.yml。
7. troubles shooting
在使用kubespary部署k8s集群时,主要遇到以下报错。
7.1. python-netaddr未安装
报错内容:
解决方法:
需要安装 python-netaddr,具体参考上述[环境准备]内容。
7.2. swap未关闭
报错内容:
解决方法:
所有部署机器执行swapoff -a关闭swap,具体参考上述[环境准备]内容。
7.3. 部署机器内存过小
报错内容:
解决方法:
调大所有部署机器的内存,本示例中调整为3G或以上。
7.4. kube-scheduler组件运行失败
kube-scheduler组件运行失败,导致http://localhost:10251/healthz调用失败。
报错内容:
解决方法:
可能是内存不足导致,本示例中调大了部署机器的内存。
7.5. docker安装包冲突
报错内容:
解决方法:
卸载旧的docker版本,由kubespary自动安装。
参考文章:
https://github.com/kubernetes-incubator/kubespray
https://github.com/kubernetes-incubator/kubespray/blob/master/docs/upgrades.md
最后更新于
这有帮助吗?