搭建文档
设备要求
至少三台 Linux 设备,即至少一台 master 两台 node;
每台设备需要至少 2 核 CPU,8G 内存和 40G 硬盘空间;
Linux 系统需要支持 overlay2 存储驱动,可用指令
xfs_info /
查看系统是否支持,1
2
3
4
5
6
7
8
9
10
11## 如果 ftype=1 ,说明支持 overlay2 驱动
[root@localhost ~]# xfs_info /
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=3276800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=13107200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=6400, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
安装
修改系统设置
修改主机名
为了方便起见,修改主机的 hostname,以三台机器为例:
1 | ## 在 master 机器 |
然后退出登录,重新登录进来,就可以看到 hostname 已经更改了。
关闭防火墙
由于是自行练习 kubernetes 使用,建议直接关闭防火墙,避免很多网络问题。若在生产环境,请相关负责网络的同事处理相关网络问题。
1 | systemctl stop firewalld |
关闭 selinux
需要关闭 selinux,可以编辑 /etc/selinux/config
文件,设置 SELINUX=disabled,重启设备:
1 | vi /etc/selinux/config |
关闭 swap
由于 kuberntes 集群子节点重启时,需要关闭 swap ,建议直接设置在 /etc/profile
中
1 | ## 编辑该文件 |
安装 docker-ce
因为 kubernetes 集群依赖于 docker,所以我们需要给所有的 设备安装 docker-ce,可以参照以下步骤或官网。
由于设备上可能有旧的包,所以这里先要进行移除
1 | yum remove docker \ |
安装 yum 工具
1 | yum install -y yum-utils |
添加 docker 的仓库
1 | yum-config-manager \ |
现在,可以执行 docker 的安装了
1 | yum install -y docker-ce docker-ce-cli containerd.io |
启动 docker 并设置开机启动
1 | systemctl start docker |
编辑 /etc/docker/daemon.json
添加网易 docker image 镜像源,添加如下内容 :
1 | { |
然后重启 docker:
1 | systemctl restart docker |
安装 kubeadm
kubeadm 是 kubernetes 集群的管理工具,所有的设备都必须安装这个工具才能加入集群,由于kubernetes 官网在国外,网络问题,我们使用阿里源来安装 kubeadm 工具
添加 yum 源:
1 |
|
更新 yum 源
1 | yum update |
安装 kubeadm
1 | yum install kubeadm -y |
启动 kubelet 并设置开机启动
1 | systemctl enable kubelet |
部署集群
如果您已安装了 kubernetes 所需的各软件后,就可以执行部署啦。
部署流程大致分为三步:
- 初始化 master 节点;
- 部署网络插件;
- 各 node 节点加入集群;
初始化 Master 节点
集群(英文:Cluster)需要在 master 节点进行初始化,基础指令是 kubeadm init
,在这个教程中,我们指定一下 api server 的IP地址和 CIDR 的 IP段,请在 master 机器上执行集群的初始化:
1 | kubeadm init --apiserver-advertise-address 0.0.0.0 --pod-network-cidr 10.244.0.0/16 |
这个初始化的过程可能需要好几分钟,需要从 k8s 的官网拉取很多 image 下来,如果网络较差,时间可能会更久。
如果在 master 机器上,ping k8s.gcr.io 不通,请在这个指令后加上阿里云源参数
—image-repository registry.aliyuncs.com/google_containers
完整的指令则是:
1 kubeadm init --apiserver-advertise-address 0.0.0.0 --pod-network-cidr 10.244.0.0/16 —image-repository registry.aliyuncs.com/google_containers
集群初始化后,会提示执行以下操作,创建配置目录和修改文件所有者信息:
1 | mkdir -p $HOME/.kube |
集群初始化后,还会有一条允许其它 node 节点加入集群的提示语,类似下面,请保存下来,下面 node 节点加入集群需要用到。
1 | kubeadm join 192.168.200.20:6443 --token yzifqp.6p8o99bxp08xxrcc --discovery-token-ca-cert-hash sha256:5f656ae26b5e7d4641a979cbfdffeb7845cc5962bbfcd1d5435f00a25c02ea50 |
安装网络插件
集群中的 pod 进行通讯需要网络插件,我们这里使用 flannel 插件。若您需要使用其它网络插件,请在 kubernetes 官网查询。
网络插件本质,是一种 kubernetes 资源,flannel 的项目在 GitHub 上,对应的配置文件地址在这里。把文件下来下来,或复制配置内容,写入本地文件,保存为 .yml
类型,例如这里保存为 kube-flannel.yml
;
在 master 机器上,执行以下操作:
上传 kube-flannel.yml
文件,然后在文件所在目录下,部署该文件:
1 | kubectl apply -f kube-flannel.yml |
部署可能需要一点时间,可以查看部署情况:
1 | # kubectl get pods -n kube-system | grep kube-flannel |
如果状态显示 running ,则网络插件部署成功了。
在部署网络插件 flannel 的过程中,可能出现 image 拉取错误,可以查看 log 看看具体是什么问题,有时候可能是 quay.io 访问异常,可以替换 kube-flannel.yml 中的 image 源为七牛云源 quay-mirror.qiniu.com ,然后重新部署 flannel
各 node 节点加入集群
在完成了 master 节点初始化集群和安装网络插件后,可在各 node 节点机器 使用初始化完 master 节点后出现的加入集群指令来加入集群:
1 | ## 这里 192.168.200.20 是你的集群的 api server 的 ip,在本例中是 master 机器的 ip |
提示已成功加入集群后,可在 master 节点机器上查看各 node 节点机器信息:
1 | kbuectl get nodes -o wide |
常见问题
重置集群
在创建集群的时候,可能因安装出错而想要重新来过,此时,你可以重置集群,分别在 master 和各 node 机器上进行重置即可:
在 master 机器上执行:
1 | kubeadm reset |
在 node 机器上执行:
1 | kubeadm reset |
某个 node 节点需重置
在 node 节点加入集群的操作中,可能出现想要重置这个节点,而其它机器不变的情况,那么需要在该节点上执行重置:
1 | kubeadm reset |
然后在 master 机器上执行以下指令,删除该 node 节点:
1 | ## 假设是 node3 |
然后在 node3 的机器上重新执行加入集群操作即可。
部分 image 拉取很慢
在初始化集群的过程中,需要拉取很多 image ,如果出现报错某些 image 拉取失败或者很慢,可以到对应的节点机器上,手动执行 docker pull $image_name:$image_tag
来拉取该 image;
常用指令
这里列出一些常用的指令,
在 master 机器执行:
1 | ## 查看当前集群的所有 node 机器信息 |