使用kubespray安装kubernetes

1. 环境准备

1.1. 部署机器

以下机器为虚拟机

机器IP
主机名
角色
系统版本
备注

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
hvac

1、安装及配置ansible

2、安装python-netaddr

3、升级Jinja

1.3. 配置部署机器

部署机器即用来运行k8s集群的机器,包括MasterNode

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节点

镜像
版本
大小
镜像ID
备注

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节点

镜像
版本
大小
镜像ID
备注

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

最后更新于

这有帮助吗?