K8s安装-基于kubeadm
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端口
关闭防火墙 |
推荐,在主机上金庸SELinux(操作的/etc/sysconfig/selinux文件,把”SELINUX=”enforcing”修改为“SELINUNX=disable“
安装kubeadm、kubelet和kubectl
安装kubeadm之前,需要临时关闭Liunx 的系统交换分区(swap)
swappoff -a
配置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安装kubeadm、kubelet和kubectl
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
启动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
:拉取镜像到本地
获取配置参数到文件 |
下载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
启动安装 |
kubectl通过以下俩种方式读取客户端身份配置文件
默认读取路径:
$HOME/.kube/config
通过环境变量KUBECONFIG
exporter KUBECONFIG==xxx
将新的Node加入到集群
新Node也需要在操作系统中安装kubeadm和kubelet
安装过程如下:
关闭LinuxSwap和系统交换分区,配置yum源
安装kubeadm和kubelet
yum install -y kubeadm kubelet kubectl --disableexcludes=kubernetes
启动kubelet服务
systemctl enable --now kubelet运行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的安装: