1、K8s集群的组成
K8s集群由多个节点组成,其中包括主节点(Master)和工作节点(Worker)。主节点负责管理整个集群的状态和配置信息,工作节点用于运行容器应用程序。主节点包括以下组件:
- API服务器(kube-apiserver):提供K8s API接口,用于管理整个集群的状态和配置信息。
- 控制器管理器(kube-controller-manager):负责运行控制器,监控集群状态并做出相应的操作。
- 调度器(kube-scheduler):负责将容器应用程序调度到可用的工作节点上。
- etcd:K8s集群的数据存储后端,用于存储集群的状态和配置信息。
工作节点包括以下组件: - kubelet:负责管理本地节点上的容器,与主节点通信以获取应用程序的状态和配置信息。
- kube-proxy:负责在节点之间进行网络代理,以确保容器应用程序可以相互通信。
- 容器运行时(如Docker):用于在节点上运行容器应用程序。
2、部署方式
(1)minikube用在测试、开发
(2)kubeadm部署主要用在测试线、生产,kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。
官方地址:
https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
(3)二进制部署(主要用在生产)
3、kubeadm方式部署:
服务器要求:
建议最小硬件配置:linux、2核cpu、2G内存、30G硬盘。
可以访问外网,并且服务器之间网络互通(在一个网段)。
禁止swap分区
安装阿里云yum源(阿里云yum可以下载k8s的flannel组件)
4、环境准备
4.1 注意
kubelet版本不要过高,v1.24版本后kubernetes放弃docker了。
以下命令中的–cri-socket=unix:///var/run/cri-dockerd.sock非必须项,根据个人环境或执行中是否报相关错误使用。
4.2三台服务器进行系统更新:yum -y update systemd
4.3每个节点分别设置对应主机名
master、worker1、worker2分别设置各自主机名
hostnamectl set-hostname master
hostnamectl set-hostname worker1
hostnamectl set-hostname worker2
4.4关闭交换分区 swap。
所有 K8S 节点都需要执行
避免交换分区导致节点不稳定和性能问题,出现异常。
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
查看交换分区状态:
swapon --show
4.5、关闭selinux
1、因安全机制较复杂,可能会与k8s本身的流量机制冲突,因为k8s本身会在netfilter里设置流量规则,也即:iptables规则
2、这是允许容器访问主机文件系统所必需的,而这些操作是为了例如 Pod 网络工作正常。
所有 K8S 节点都需要执行:
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
4.6、关闭防火墙
所有 K8S 节点都需要执行:
systemctl stop firewalld && systemctl disable firewalld
systemctl status firewalld
4.7时间同步
所有 K8S 节点都需要执行:
使用date命令查看三个节点时间是否一致,kubernetes要求集群中的节点时间必须精确一直。
安装时钟同步
1.安装:
yum -y install ntpdate
2#手动同步阿里云时间服务器时间
ntpdate ntp.aliyun.com 或 ntpdate ntp.ubuntu.com
4.8、绑定 hosts
所有 K8S 节点都需要执行:
cat << EOF >> /etc/hosts
192.168.xx.241 master
192.168.xx.235 worker1
192.168.xx.238 worker2
EOF
EOF保存退出或Ctrl+d
或vi /etc/hosts命令编辑
4.9配置 K8S 的 YUM 源
所有 K8S 节点都需要执行:
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=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
gpgcheck和repo_gpgcheck都被设置为1,意味着系统会对从该仓库下载的所有包和仓库文件进行GPG签名验证,它是一种用于验证软件包完整性和来源的加密工具。
若不需认证设置为0,建议默认为0。
安装 yum-config-manager
yum -y install yum-utils
安装 Docker 安装源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.10、安装所需组件
安装 Kubelet、Kubeadm 和 Kubectl、docker
所有 K8S 节点都需要执行:
yum install -y kubelet-1.22.4 kubectl-1.22.4 kubeadm-1.22.4 docker-ce-20.10.17-3.el7
启动:
systemctl enable kubelet
systemctl start kubelet
systemctl enable docker
systemctl start docker
kubelet 并未启动成功,需在k8s初始化后才可以。
查看版本
kubectl version
4.11修改 docker 配置
所有节点执行:
其中,exec-opts 用于设置 Docker 的 cgroup 驱动类型,需要将其修改为 systemd。因
为 K8S 默认就是使用的 systemd,将 Docker 和 K8S 的驱动类型统一,否则后续会有报错。
需要注意的是:K8S 内的节点上 Docker 环境都需要统一。
所有 K8S 节点都需要执行:
cd /etc/docker
cat <<EOF > /etc/docker/daemon.json
{
"exec-opts":["native.cgroupdriver=systemd"],
"registry-mirrors":["http://hub-mirror.c.163.com","https://mirrors.tuna.tsinghua.edu.cn/","https://g6yrjrwf.mirror.aliyuncs.com/","https://docker.mirrors.ustc.edu.cn"]
}
EOF