从今年年初就陆陆续续搭建过 1.13 ,1.15 版本,每次搭建都要在网上找 blog,自己虽有总结,却总不完善,现在(2019 年 9 月 24 日) 1.16 版本已经发布,希望此次能有一份完善的总结。

一、安装虚拟机

我使用的 VMware 安装的 Centos 7 最小安装,这个过程不再详述,属于基本操作,网上资源也很多。

二、配置虚拟机

改 yum 源

我们需要安装很多软件:kubectl,kubelet,kubeadm 等等

不建议使用 CentOS 7 自带的 yum 源,因为安装软件和依赖时会非常慢甚至超时失败。这里,我们使用阿里云的源予以替换,执行如下命令,替换文件/etc/yum.repos.d/CentOS-Base.repo

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache  // 这一步有点久

当然,最小安装没有安装 wget 工具,我们需要先安装:

yum install -y wget
  • 阿里云 k8s 专用 源: http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  • 官方源: http://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64/

关闭防火墙

CentOS 7 默认开启防火墙,k8s MasterNode 会有大量的网络通信,这些通信经过防火墙,安全的做法是在防火墙上配置各组件需要相互通信的端口号,但是比较麻烦,以后有空再进行补充。

我们默认我们有安全的内部网络环境——自己电脑开虚机,关闭防火墙。

[root@localhost ~]# systemctl stop firewalld & systemctl disable firewalld
[1] 10341
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

禁用 SELinux,让容器可以获取主机的文件系统

[root@root ~]# setenforce 0
[1]+  Done                    systemctl stop firewalld

实际上,是更改了 /etc/sysconfig/selinux 文件配置,因此可以直接去修改该文件:

SELINUX=disabled
  • 需要重启生效

关闭内存交换

类似 ElasticSearch 集群,在安装 K8S 集群时,Linux 的 Swap 内存交换机制是一定要关闭的,否则会因为内存交换而影响性能以及稳定性。这里,我们可以提前进行设置:

  • 执行swapoff -a可临时关闭,但系统重启后恢复
  • 编辑/etc/fstab,注释掉包含swap的那一行即可,重启后可永久关闭,如下所示:
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=20ca01ff-c5eb-47bc-99a0-6527b8cb246e /boot                   xfs     defaults        0 0
# /dev/mapper/centos-swap swap

或直接执行:sed -i '/ swap / s/^/#/' /etc/fstab 关闭成功后,使用 top 命令查看,如下图所示表示正常:

top

安装 docker

安装所需的软件包。yum-utils 提供了 yum-config-manager 效用,并 device-mapper-persistent-data 和 lvm2 由需要 devicemapper 存储驱动程序。

yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

使用以下命令来设置稳定的存储库—— 我们使用阿里云的源

[root@root ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror
adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
[root@root ~]# yum makecache

安装最新版 docker

yum install docker-ce -y

启动 Docker

启动 Docker 服务并激活开机启动:

systemctl start docker & systemctl enable docker

运行一条命令验证一下:

docker run hello-world

安装 k8s

配置 k8s yum 源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装 3 个核心软件

yum install -y kubelet kubeadm kubectl

安装成功

配置 kubelet 的 cgroup drive

确保 docker 的 cgroup drive 和 kubelet 的 cgroup drive 一样:

启动 kubelet

注意,根据官方文档描述,安装 kubelet、kubeadm、kubectl 三者后,要求启动 kubelet: systemctl enable kubelet && systemctl start kubelet

kubeadm 配置

kubeadm config print init-default > init.default.yaml

更改其中关键配置

imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers

下载 kubernetes 相关镜像

kubeadm config images pull --config=init-config.yaml

之前总是搭梯子,或者从网盘里获取别人的镜像,其实国内有现成的镜像托管

echo '{"registry-mirrors":["https://registry.docker.cn.com"]}' > /etc/docker/daemon.json

拉取镜像: kubeadm config images pull --config=init-config.yaml

途中终端输出发现 docker 版本不能用 最高支持 18.09

先卸载:

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

要安装特定版本的 Docker Engine-Community,请在存储库中列出可用版本,然后选择并安装:

一种。列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序,并被截断:

$ yum list docker-ce --showduplicates | sort -r

docker-ce.x86_64            3:19.03.2-3.el7                    docker-ce-stable
docker-ce.x86_64            3:19.03.2-3.el7                    @docker-ce-stable
docker-ce.x86_64            3:19.03.1-3.el7                    docker-ce-stable
docker-ce.x86_64            3:19.03.0-3.el7                    docker-ce-stable
docker-ce.x86_64            3:18.09.9-3.el7                    docker-ce-stable
docker-ce.x86_64            3:18.09.8-3.el7                    docker-ce-stable
docker-ce.x86_64            3:18.09.7-3.el7                    docker-ce-stable
docker-ce.x86_64            3:18.09.6-3.el7                    docker-ce-stable
docker-ce.x86_64            3:18.09.5-3.el7                    docker-ce-stable
docker-ce.x86_64            3:18.09.4-3.el7                    docker-ce-stable
docker-ce.x86_64            3:18.09.3-3.el7                    docker-ce-stable
docker-ce.x86_64            3:18.09.2-3.el7                    docker-ce-stable
docker-ce.x86_64            3:18.09.1-3.el7                    docker-ce-stable
docker-ce.x86_64            3:18.09.0-3.el7                    docker-ce-stable
docker-ce.x86_64            18.06.3.ce-3.el7                   docker-ce-stable
docker-ce.x86_64            18.06.2.ce-3.el7                   docker-ce-stable
docker-ce.x86_64            18.06.1.ce-3.el7                   docker-ce-stable
docker-ce.x86_64            18.06.0.ce-3.el7                   docker-ce-stable
docker-ce.x86_64            18.03.1.ce-1.el7.centos            docker-ce-stable
docker-ce.x86_64            18.03.0.ce-1.el7.centos            docker-ce-stable
docker-ce.x86_64            17.12.1.ce-1.el7.centos            docker-ce-stable

通过其完全合格的软件包名称安装特定版本,该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如,docker-ce-18.09.1。

$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io 我们的就是:$ sudo yum install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io

继续

拉取镜像: kubeadm config images pull --config=init-config.yaml

初始化

kubeadm init --config=init-config.yaml

添加 dashboard 组件

TODO

参考

  1. 从零开始搭建 Kubernetes 集群(一、开篇)
  2. Kubernetes 权威指南(第四版)
  3. docker 官方文档
  4. 国内免翻墙预下载 kubernetes 镜像