使用kubeadm快速安装kubernetes集群

系统要求

安装Kubernetes需要满足以下系统要求:

  • 操作系统:支持主流的Linux发行版,如Ubuntu、CentOS等。
  • CPU:至少需要2个CPU核心,建议4核或以上以获得更好的性能。
  • 内存:最少需要2GB RAM来运行Master和Worker节点。然而,生产环境中为了确保良好性能和稳定性,建议至少为每个节点分配4GB RAM。
  • 存储:每个节点需要至少20 GB可用磁盘空间。实际需求根据应用程序和数据量的大小有所不同。
  • 网络:所有节点之间必须可以相互通信,要求各节点在同一局域网内,并且可以访问共享的存储资源。

此外,还需要满足以下特殊要求:

  • Docker CE版本:Kubernetes建议使用Docker CE 18.06或更高版本作为容器运行时。
  • Swap设置:为了达到最佳性能和稳定性,需要禁用swap分区。因此,在安装Kubernetes之前,需要确保swap分区已被关闭。
  • 防火墙规则:Kubernetes需要特定的端口打开才能正常工作,这些端口包括TCP 6443、2379-2380和10250-10252,需要在防火墙中允许这些端口的访问。

总之,了解这些系统要求和特殊要求,可以帮助您在部署Kubernetes时避免一些潜在的问题。

使用kubeadm快速安装kubernetes集群

使用kubeadm可以快速地安装Kubernetes集群,以下是基本步骤:

  1. 环境准备
  • 放在Linux节点上
  • 关闭swapd:sudo swapoff -a && sed -i '/ swap / s/^/#/' /etc/fstab
  • 安装Docker:sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && sudo apt-get update && sudo apt-get install -y docker-ce=18.06.2~ce~3-0~ubuntu
  1. 初始化Master节点
  • 安装kubeadm:curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - && echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list && sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl
  • 初始化Master:sudo kubeadm init --pod-network-cidr=192.168.0.0/16(根据需要修改网段)
  • 将kubectl配置为非root用户:mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubeadm init命令在执行具体的安装操作之前,会执行一系列被称为pre-flight checks的系统预检查,以确保主机环境符合安装要求,如果检查失败就直接终止,不再进行init操作。用户可以通过kubeadm init phase preflight命令执行预检查操作,确保系统就绪后再执行int操作。如果不希望执行预检查,则也可以为kubeadm init命令添加–ignore-preflight-errors参数进行关闭。如表2.3所示是kubeadm检查的系统配置,对不符合要求的检查项以warning或error级别的信息给出提示。

不符合要求的条件 错误级别
如果待安装的 Kubernetes 版本 (–kubernetes-version)比 kubeadm CLI 工具版本至少高一个次要版本 (minor version) warning
在 Linux上运行时,Linux的内核版本未达到最低要求 error
在 Linux上运行时,Linux未设置cgroups子系统 error
在使用 Docker时,如果 Docker 服务不存在,或被禁用,或未处于活动状态 warning/error error
在使用 Docker时,如果 Docker端点不存在或不起作用 erro
在使用Docker时,如果Docker 版本不在经过验证的 Docker版本列表中 warning
在使用其他CRI引擎时,如果 crictl socket无响应 error
如果用户不是root用户 error
如果计算机主机名不是有效的DNS 子域格式 error
如果无法通过网络查找访问主机名 warning
如果kubelet 版本低于 kubeadm 支持的最低 kubelet 版本(当前次要版本号-1 error
如果kubelet 版本比所需的控制平面版本至少高一个次要版本号 erroI
如果kubelet服务不存在或被禁用 warning
如果firewalld 服务处于活动状态 warning
如果API Server 使用10250/10251/10252端口号或已被其他进程占用 error
如果/etc/kubernetes/manifest目录已经存在并且不为空 error
如果/proc/sys/netbridge/bridge-nf-call-iptables 文件不存在或值不为1 error
如果使用ipv6地址,并且/proc/sys/net/bridge/bridge-nf-call-ip6tables 文件不存在或值不为1如果启用了系统交换区,即 swap=on error
如果系统中不存在或找不到conntrack、ip、iptables、mount、nsenter命令 error
如果系统中不存在或找不到ebtables、ethtool、socat、tc、touch、crictl命令 warning
如果 API Server、Controller Manager 和 Scheduler 的额外参数中包含一些无效的内容 warning
如果到API Server URL (https://API.AdvertiseAddress:API.BindPort)的连接通过代理服务器如果到服务(Service)网络的连接通过代理进行(仅检查第一个地址) warning
如果到 Pod子网的连接通过代理进行(仅检查第1个地址) warning
在使用外部 etcd时,如果etcd版本低于最低要求版本 error
在使用外部 etcd时,如果指定了etcd证书或密钥,但未提供 error
在没有外部 etcd (因此将安装本地 etcd)时,如果端口号2379 已被其他进程占用 error
在没有外部 etcd (因此将安装本地eted)时,如果etcd.DataDir文件夹已经存在并且.不为空授权方式为ABAC时,如果abac_policy.json文件不存在 error
授权方式为WebHook 时,如果 webhook_authz.conf 文件不存在 error
  1. 安装Pod网络插件
  • 如使用flannel: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  1. 将Worker节点加入集群
  • 在Master节点上生成加入集群的token: sudo kubeadm token create --print-join-command
  • 在要加入集群的Worker节点上运行输出结果,例如:sudo kubeadm join 192.168.90.95:6443 --token abc123.xxxxxxxxxxx --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxx
  1. 验证kubernetes集群能否正常工作
    kubectl get pods --all-namespaces
    如果发现有状态错误的Pod,则可以运行kubectl–namespace=kube-system describe pod 命令查看错误原因,常见的错误原因是镜像没有下载完成。
    至此,通过kubeadm工具就实现了Kubernetes集群的快速搭建。
    如果安装失败,则可以运行kubeadm reset命令将主机恢复原状,重新运行kubeadm init命令再次进行安装。

你可能感兴趣的:(kubernetes,kubernetes,docker,容器)