Kubernetes 权威指南第二章校对(1)
权威指南第二章的内容,是 Kubernetes 有史以来最经久不衰的入门话题:安装。
这里出了个巧合,编写第二章时,我负责的是 kubeadm 的部分,搭建虚拟机集群准备开始校对的时候,发现这一批虚拟机被分配的 IP 和写稿时候是一样的——10.211.55.30-32
推荐软硬件规格
实际上我经常用一组 2G 内存的虚拟机安装测试集群,到处翻看了一下,似乎也没看到很确切的说明,Building large clusters 一文给出了一些配置推荐,其中 1-5 节点的微型集群推荐的 Master 节点配置是 1 核 3.75 G 的虚拟机实例。
其次是 Docker 版本的推荐,建议去 Release Notes 中查找对应的版本说明,例如 1.14 版本的验证列表包含: 1.13.1, 17.03, 17.06, 17.09, 18.06, 18.09。
过期文档查看方法示例:
https://kubernetes.io/docs/setup/release/notes/
=>https://v1-14.docs.kubernetes.io/docs/setup/release/notes/
kubeadm init
在 kubeadm init
命令配置一节,原本使用了我自己的 Docker hub 仓库,现在 AWS 提供了 gcr 镜像,这里也就顺便改成了:imageRepository: gcr.azk8s.cn/google_containers
。
init
命令执行过程中,会进行预检,官方文档中也介绍了预检内容:
init命令首先会执行一段称为preflight的预检工作,对当前的服务器状况进行检查,会导致检查不通过的情况包括:
- Kubnernetes 需求:
- 操作系统是否为 Linux;
- 内核是否为 3.10+ 或者 4+,并启用特定开关;
- 是否有合适的 cgroup 子系统配置;
- Docker 服务不存在或者无法工作;
- crictl sockert 无应答。
- 当前用户不是 root;
- 主机名称不是有效的 DNS 子域;
- kubelet 版本低于 kubeadm 的要求(通常能够容忍一个小版本号的差异);
- kubelet 版本比 kubeadm 版本高出一个小版本号以上;
- API Server 的绑定端口(10250、10251以及10252)被占用;
- /etc/kubernetes/manifest 已经存在并且非空;
- /proc/sys/net/bridge/bridge-nf-call-iptables 不存在或者内容中不包含“1”;
- 公布地址为 ipv6 并且 /proc/sys/net/bridge/bridge-nf-call-ip6tables 文件不存在或者内容中不包含“1”;
- 找不到 ip、iptables、mount 或者 nsenter 命令;
- 启用了交换文件;
- 如果指定了外部 etcd:
- 如果 etcd 版本低于 3.0.14;
- 如果 etcd 中引用了不存在的证书或密钥。
- 如果没有指定外部的 etcd:
- 如果 2379 端口被占用;
- 如果 Etcd.DataDir 路径已经存在并且非空;
- 如果认证模式为 ABAC:
- abac_policy.json 文件不存在。
- 如果认证模式为 WebHook:
- webhook_authz.conf 不存在。
常见的三个操作
以CentOS 7.5 Minimal版本为例,一般会有三个需要修改的地方:
关闭交换文件:
swapoff -a 删除 /etc/fstab/ 中的 swap 一行,重新启动。
使用 sysctl 设置net.bridge.bridge-nf-call-iptables 和 net.ipv4.ip_forward 为 1。
设置 Docker 配置文件 /etc/docker/daemon.json 内容如下,设置 Docker的 cgroupdriver 为 systemd,并重新启动 Docker 服务:
{ "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] }
单节点集群
该操作并非删除标签,而是去污点操作。
参考连接
- 预检:
https://kubernetes.io/docs/reference/setup-tools/kubeadm/implementation-details/
- Building large clusters:
https://kubernetes.io/docs/setup/best-practices/cluster-large/