1.集群搭建
预备工作
版本
kubernetes v1.16
docker 18.06.2-ce: 官方文档推荐此版本
centos 7
# 查看 centos 版本号
$ cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)节点命名
以下两个节点(云服务器)作为 k8s 的一部分
shanyue master 172.17.68.39 (2vCPU, 4G Mem)
shuifeng work 172.17.68.40 (2vCPU, 16G Mem)
另外有一个可以访问谷歌的节点,用以下载一些国内无法下载的镜像,把它叫做 proxy
proxy
为了更方便且更可读画地访问服务器进行操作,在客户端机器(Mac)编辑 ~/.ssh/config 添加以下内容
此时 ssh proxy 可以快速登录 [email protected]。rsync -avhzP k8s.tar shanyue:/root 代表把本地的k8s.tar文件传输到shanyue目标机的/root目录下。
搭建过程中的linux命令
安装 kubernetes 是一个技术活,其中涉及到很多在 linux 上的命令行操作。在此之前,熟悉一些在 centos 上的基本命令是必不可少的。
也可以反过来说 不了解这些命令你有可能寸步难行。 以下是在安装过程中有可能会反复使用的命令
yum
yum 是在 centos 下的包管理工具
rsync
rsync 被用来与远程服务器间传送文件,与 scp 类似,但 rsync 可以实现增量传送
如需要传输k8s所需要的镜像压缩包时: 首次打包了总共5个镜像为 k8s.tar,传输到目标节点。随后发现一个镜像没有打包,于是再次打包,总共6个镜像为 k8s.tar,再次传输到目标节点。rsync 可以对比文件差异而做到仅传输最后一次丢掉的镜像。
systemctl
systemctl 管理 centos 中的服务
journalctl
journalctl 用以管理 centos 中服务的日志。
route/ip
在设置网络时,可以使用该命令检查路由表。在搭建 k8s 集群时,可能出现 connect: no route to host 类似的错误,可以使用 route -n 或者 ip route 进行诊断。
iptables
iptables 用以控制 IP 数据报,比如转发,丢弃与过滤
lsmod
显示已载入linux内核的模块,如以下常见的模块
ip_tables
overlay
bridge
br_netfilter
modprobe
添加或删除linux内核模块
sysctl
sysctl 用以控制内核的参数
docker安装与配置
在 k8s 支持的容器方案中除了 docker,还有其它容器方案
CRI-O
Containerd
官方推荐的 docker 版本为: docker 18.06.2。在 k8s 的 master 与 node 节点都需要安装 docker。
安装 docker
在 centos 上安装 docker 的官方文档: https://docs.docker.com/install/linux/docker-ce/centos/
当 docker 安装成功后,可以使用以下命令查看版本号
docker daemon
dockerd 是 docker 的后台进程,而 dockerd 可以通过配置文件进行配置,在 linux 下在 /etc/docker/daemon.json,详细可以参考官方文档
kubeadm 简介与安装
先来介绍这三个命令行工具的作用:
kubeadm: 用以构建一个 k8s 集群的官方工具
kubelet: 工作在集群的每个节点,负责容器的一些行为如启动
kubectl: 用以控制集群的客户端工具
在 k8s 的 master 与 node 节点均需要安装 kubeadm
以下使用 阿里源 来安装 kubeadm
可能会有索引gpg检查失败的情况, 这时请用
yum install -y --nogpgcheck kubelet kubeadm kubectl安装
在 centos 中,你还需要设置 net.bridge.bridge-nf-call-iptables 为 1
如果设置失败,查看你是否加载了 br-netfiler 的内核模块。
搭建第一个 kubernetes 集群
主节点以前叫 master node,现在官网称 control plane node。
使用 kubeadm init 就可以很简单地搭建一个主节点。但是在搭建主节点过程中,有可能由于国内网络的原因而不得成功。所以本篇文章分为两部分
如果有网络问题,如何准备离线镜像
搭建主节点
准备离线镜像
如果你能够访问谷歌,则直接查看下一节:搭建主节点
在 master 节点执行命令,获取需要预先下载的镜像列表。
在 proxy 节点,把镜像列表存为 images.txt,通过 docker pull 与 docker save 批量下载镜像与打包。并通过 rsync 在代理节点与 master/work 节点之间传送。关于 rsync 的用法可以参考:
此时,
images.txt除了关于搭建集群所需要的镜像外,还有一些因网络问题而不可达的镜像。如dashboard/metrics-server/tiller/ingress等。
待在 proxy 节点完成镜像打包后,使用 rsync 传输到 master 节点。以下操作在 master 节点进行
搭建主节点
当搭建主节点时,你需要在 gcr.io 上拉取所需镜像,但 gcr.io 有可能网络不通,你可以通过以下命令测试下连接性
如果你不能获取镜像的话,可以通过准备离线镜像来获取。具体参考上一小节
测试成功后,使用 kubeadm init 命令添加一个主节点 (control-plane node)。
172.17.68.39 指 master 节点的IP地址,可以通过 ifconfig eth0 获得
59.110.216.155 指 master 节点的公网IP
到这里为止,k8s 集群已经初步搭建完成。不过你会有疑问,在 kubeadm init 的过程中做了什么,这都被它作为日志打印了出来
接下来你可以按照以上输出的指示做完以下命令,这将生成一个 kubectl 的配置文件,以及检查集群状态
再往后,你也可以通过以上的输出指示添加 worker node
kubectl 命令自动补全
没有自动补全的 kubectl 就如同没带眼镜的近视者,可以使用,但很难受。
为集群添加一个工作节点
安装 network pod: flannel
网络组件用以在 pod 间进行通信,再此之前,我们会发现 coredns 组件处于 Pending 状态。我们使用网络组件 flannel 来确保 coredns 的正常运行。
在安装网络组件要确保路是通的,使用 sysctl 设置内核变量 net.bridge.bridge-nf-call-iptables 为1
此时,再次查看集群中所有的 pod 状态,此时 coredn 变为正常状态,且多了 kube-flannel-ds-amd64 这个 pod。
添加 worker node
在添加 worker node 时,需要在子节点也进行 docker 以及 kubeadm 的安装,按照以上章节步骤进行安装。
安装之后根据以上关于搭建主节点章节的输出指示,使用 kubeadm join 加入集群之中:
kubeadm join 有两个关键的参数: token 与 hash。如果你已经丢失了新建 master node 时的输出 kubeadm join 信息怎么办?此时可以通过以下命令来获取
安装完之后,再次打印节点信息
至此,一个拥有 master node 与 worker node 的 kubernetes 集群就搭建完成了。
最后更新于