K8s安装-基于kubeadm

基于1.29

系统要求

软硬件 最低要求 推荐配置
主机资源 若集群中有1-5个Node:Master:2c+2GB;Node:1c Master:4C和16GB;Node实际运行
Linux Kernel内核在v3.10以上 CoreOS7.9
etcd 版本v3以上 etcdv3
容器运行时 各种cri containerd v1.7

主要注意centos7默认开启防火墙,而K8s和各个Node有大量通信,推荐开启以下端口

组件 默认端口
API Server 6443
Controller Manager 10257
Scheduler 10259
Kubelet 10250;10255(只读端口)
etcd 2379(供客户端访问);2380(etcd集群节点之间访问)
集群的DNS服务 53(UDP);53(TCP)

对于其他组件,可能还需要开放其他端口,比如CNI Calico需要开放179端口

# 关闭防火墙
systemctl disable firewalld
systemctl stop firewalld

推荐,在主机上金庸SELinux(操作的/etc/sysconfig/selinux文件,把”SELINUX=”enforcing”修改为“SELINUNX=disable“

安装kubeadm、kubelet和kubectl

安装kubeadm之前,需要临时关闭Liunx 的系统交换分区(swap)

swappoff -a

  1. 配置yum源(/etc/yum.repos.d/kubernetes.repo)

    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
    setenforce 0
  2. 安装kubeadm、kubelet和kubectl

    yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
  3. 启动kubelet服务

    systemctl enable --now kubelet

修改kubeadm默认配置

kubeadm init和join都可以通过指定配置文件修改默认参数

  • kubeadm config print init-defaults:输出kubeadm init默认参数内容
  • kubeadm config print join-defaults:输出kubeadm join默认参数内容
  • kubeadm config migrate:在新旧版本之间进行配置转换
  • kubeadm config images list:列出所需的镜像列表
  • kubeadm config imgaes pull:拉取镜像到本地
# 获取配置参数到文件
kubeadm config print init-defaults > init-config.yaml

下载K8s相关镜像

为了加快kubeadm 部署集群的速度,可以预先下载所有全部镜像

通过kubeadm config images list可以查看

yum install -y kubeadm kubelet kubectl --disableexcludes=kubernetes

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

通过kubeadm init安装master

kueadm不涉及安装CNI网络插件,所以通过kubeadm安装的集群不具备容器网络的功能;在安装CNI网络插件之前的Pod都无法正常工作

kubeadm 开启安装之前,会有一个“pre-fight checks”的系统预检,可以通过--ignore-prefight-errors关闭检查

不符合要求的系统检查项 错误级别
待安装的K8s版本(通过–kubernetes-version参数设定)比kubeadmCLI版本至少高一个次要版本 waring
在Linux上运行时,Linux的内核版本未达到要求 error
Linux上运行,Linux为设计Cgroups子系统 error
在容器运行时,端点不存在或者不起作用 error
用户不是root用户 error
主机名不是有效的DNS子域名格式 warning
无法通过网络访问主机名 error
kubelet版本低于比待安装的kubelet(当前次要版本为-1) error
kubelet版本比待安装的Master版本高出至少一个次要版本 waring
kubelete不存在或者被禁用 waring
firewalld服务处于激活状态 waring
APIServer端口号10250、10251、10252被占用 error
/etc/kubernetes/mainifesr目录已经存在且不为空 error
/proc/sys/net/bridge-nf-call-iptables文件不存在或者不为1 error
使用了ipv6,并且/proc/sys/net/bridge-nf-call-ip6tables文件不存在或者不为1 error
启用了系统交换分区,swap=on error
在系统中找不到contract\ip\iptables\mount\nsenter命令 error
在系统中找不到etables\ethool\socat\tc\touch\crictl命令 warning
在API Server、Controller Manager和Scheduler额外参数包含了一些无效的内容 warning
通过代理服务器访问API ServerURL waring
使用代理服务器访问Service waring
在使用外部etcd,etcd基于最低版本要求 error
在没有外部etcd,端口2379被占用 error
在没有外部etcd,etcd.DataDir文件夹已经存在不为空 error
授权模式为ABAC,abac_policy.json文件不存在 error
在授权模式为WehHook,webhook_authz.conf文件不存在 error

kubeadm 默认设置驱动cgroupDriver=systemd,建议containerd的cgroup驱动也为systemd,containerd默认/etcd/containerd/config.yaml

# 启动安装
kubeadm init --config=init-config.yaml

kubectl通过以下俩种方式读取客户端身份配置文件

  • 默认读取路径:$HOME/.kube/config

  • 通过环境变量KUBECONFIG

    exporter KUBECONFIG==xxx

将新的Node加入到集群

新Node也需要在操作系统中安装kubeadm和kubelet

安装过程如下:

  1. 关闭LinuxSwap和系统交换分区,配置yum源

  2. 安装kubeadm和kubelet

    yum install -y kubeadm kubelet kubectl --disableexcludes=kubernetes

    # 启动kubelet服务
    systemctl enable --now kubelet
  3. 运行kubeadm join,加入集群, --token--discovery-token-ca-cert-hash的值都需要从成功安装Master的提示信息中获取

    kubeadm config print join-defaults > join-config.yaml
    apiVersion: kubeadm.k8s.io/v1beta2
    caCertPath: /etc/kubernetes/pki/ca.crt
    discovery:
    bootstrapToken:
    apiServerEndpoint: kube-apiserver:6443
    token: abcdef.0123456789abcdef
    unsafeSkipCAVerification: true
    timeout: 5m0s
    tlsBootstrapToken: abcdef.0123456789abcdef
    kind: JoinConfiguration
    nodeRegistration:
    criSocket: /var/run/dockershim.sock
    name: hcss-ecs-5425
    taints: null
    # 可以本Node加入到集群
    kubeadm join --config=join-config.yaml

安装CNI网络插件

在完成kubeadm init和join之后,集群Node处于Not Ready,因为还没有安装CNI网络插件

  • calico的安装: