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/
Avatar
崔秀龙

简单,是大师的责任;我们凡夫俗子,能做到清楚就很不容易了。

comments powered by Disqus
下一页
上一页

相关