毕业设计题目是写一个基于微服务的高可用应用系统。微服务的部署使用 docker + k8s,所以前提是要有一个 k8s 集群。搭建过程中遇到了一些坑,把整个流程 记录下来一是回顾搭建过程,二是希望能尽可能的帮助后来的 k8s beginners 少走些弯路。
本文的侧重点在实际操作,k8s 组件基本概念相关的信息请参考 k8s 官方文档 或 Kubernetes 指南 – by feiskyer
如果对于本文有什么建议、意见及疑问,欢迎提 issue,或直接发邮件交流(邮箱很容易能找到,不再提供)。
环境依赖
本文假设读者会使用 Linux 命令行。
k8s 的镜像源在墙外,所以需要读者掌握科学上网的技能。这个部分不属于本文的描述范围,我使用的方案是 Shadowsocks + Privoxy,有需要可以跟我交流。
- Docker : 1.13.1 - kube* : 1.10 - flannel : 0.10.0 - virtualBox: 5.2.8 - OS : ubuntu-16.04.4-server-amd64.iso
virtualBox 的版本不太重要,Docker 和 kube* 的版本最好使用 k8s 推荐的版本,否则可能会有问题,推荐的 Docker 版本可以在版本的 release
文档中查看。OS 的版本不同,后面的一些配置的方法会略有不同。
搭建目标
主机名 | 主机 IP | flannel.1 | OS | 集群角色 |
---|---|---|---|---|
master | 192.168.99.200 | 10.244.0.0 | Ubuntu 16.04 | master |
node1 | 192.168.99.201 | 10.244.1.0 | Ubuntu 16.04 | node |
node2 | 192.168.99.202 | 10.244.2.0 | Ubuntu 16.04 | node |
flannel.1 是 每台机器上的一个 VNI,通过 ifconfig
命令可以查看该接口的信息。
从任意一台机器 ping 另外两台机器 flanel.1 的 IP 能通就算集群搭建成功。
# from master $ ping 10.244.1.0 PING 10.244.1.0 (10.244.1.0) 56(84) bytes of data. 64 bytes from 10.244.1.0: icmp_seq=1 ttl=64 time=0.659 ms 64 bytes from 10.244.1.0: icmp_seq=2 ttl=64 time=0.478 ms 64 bytes from 10.244.1.0: icmp_seq=3 ttl=64 time=0.613 ms ^C --- 10.244.1.0 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1999ms rtt min/avg/max/mdev = 0.478/0.583/0.659/0.079 ms $ ping 10.244.2.0 PING 10.244.2.0 (10.244.2.0) 56(84) bytes of data. 64 bytes from 10.244.2.0: icmp_seq=1 ttl=64 time=0.459 ms 64 bytes from 10.244.2.0: icmp_seq=2 ttl=64 time=0.504 ms 64 bytes from 10.244.2.0: icmp_seq=3 ttl=64 time=0.553 ms ^C --- 10.244.2.0 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2058ms rtt min/avg/max/mdev = 0.459/0.505/0.553/0.042 ms
k8s 个组件之间的关系
其实这个没必要多说,Kubernetes Components 或 Kubernetes 核心组件 – by feiskyer 讲的已经非常好了,这里提到只是强调一下这部分的重要性。
k8s Pod 网络模型简介
为了省事,我直接引用了别人画的模型图。对于本次搭建的集群模型简单描述如下:
cni0
和flannel.1
都是 VNI,由 flannel 组件创建,集群搭建完成后可以通过ifconfig
进行查看。- flannel 组件 在每台机器上运行了一个
flanneld
,它是用来转发流量,解决主机间通信的问题。 enp0s8
是 virtualBox 的 Host-Only 适配器。
配置流程
使用 virtualBox 创建三台虚拟机
virtualBox 安装比较简单,不再介绍,GUI 工具用起来也很方便,这部分只介绍我认为需要提示的部分。
- 内存推荐 2048M, CPU 推荐 2个
- 默认只有一个 NAT 适配器,添加一个 Host-Only Adapter。NAT 适配器是虚拟机用来访问互联网的,Host-Only 适配器是用来虚拟机之间通信的。
- 以 Normal Start 方式启动虚拟机安装完系统以后,因为是 server 版镜像,所以没有图形界面,直接使用用户名密码登录即可。
- 修改配置,
enp0s8
使用静态 IP。配置请参考 SSH between Mac OS X host and Virtual Box guest。注意配置时将其中的网络接口名改成你自己的 Host-Only Adapter 对应的接口。 - 一台虚拟机创建完成以后可以使用 clone 方法复制出两台节点出来,注意 clone 时为新机器的网卡重新初始化 MAC 地址。
- 三台虚拟机的静态 IP 都配置好以后就可以使用 ssh 在本地主机的终端上操作三台虚机了。虚机使用 Headless Start 模式启动
安装 Docker
- 三台都装
当前 Ubuntu 的 docker 版本刚好合适,所以可以直接安装,但是有必要提前查看一下 docker 版本,以免装错。
# apt search docker.io apt-get update apt-get install -y docker.io systemctl enable docker systemctl start docker
official Docker installation guides
- docker 配置代理。镜像源在墙外,docker pull image 需要代理
mkdir -p /etc/systemd/system/docker.service.d cat <<EOF >/etc/systemd/system/docker.service.d/http-proxy.conf [Service] Environment="HTTP_PROXY=https://192.168.99.1:8118/" Environment="HTTPS_PROXY=https://192.168.99.1:8118/"