K8s - Kubernetes集群的安装部署教程(CentOS系统)
本文演示如何搭建一个三节点的 Kubernetes Cluster 集群(一个 master 节点和两个 node 节点),并且这三台服务器使用的都是 CentOS 7 系统。
一、准备工作(三个节点都需要设置)
1,安装 Docker
所有的节点都需要安装 Docker,具体步骤可以参考我之前写的文章:
- CentOS下 Docker、Docker Compose 的安装教程(附详细步骤)
2,安装 kubelet、kubeadm 和 kubectl
- kubeadm:用来初始化集群(Cluster)
- kubelet:运行在集群中的所有节点上,负责启动 pod 和 容器。
- kubectl:这个是 Kubernetes 命令行工具。通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg exclude=kube* EOF # 将 SELinux 设置为 permissive 模式(将其禁用) setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes systemctl enable kubelet && systemctl start kubelet
3,修改 sysctl 配置
对于 RHEL/CentOS 7 系统,可以会由于 iptables 被绕过导致网络请求被错误的路由。所以还需执行如下命令保证 sysctl 配置中 net.bridge.bridge-nf-call-iptables 被设为1。
(1)使用 vi 命令编辑相关文件:
vi /etc/sysctl.conf
(2)在文件中添加如下内容后,保存退出。
net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1
(3)最后执行如下命令即可:
sysctl --system
4,关闭 swap
(1)首先执行如下命令将其关闭:
swapoff -a
(2)接着编辑 /etc/fstab 文件。
vi /etc/fstab
(3)将 /dev/mapper/centos-swap swap swap default 0 0 这一行前面加个 # 号将其注释掉。
二、Master 节点的安装配置
1,初始化 Master
(1)我们在 Master 上执行如下命令进行初始化:kubeadm init --pod-network-cidr=10.244.0.0/16
(2)初始化的时候 kubeadm 会做一系列的校验,以检测你的服务器是否符合 kubernetes 的安装条件,检测结果分为 [WARNING] 和 [ERROR] 两种。其中 [ERROR] 部分要予以解决。
- Master 节点需要至少两核 CPU:由于我用的是虚拟机,关机后更改下虚拟机配置即可。
- bridge-nf-call-iptables 这个参数,需要设置为 1:如果我们前面做了准备工作里的第三步,就不会有这个问题了。
- swap 需要关闭:执行 swapoff -a 将其关闭即可。
(4)所有 error 解决后,再执行最开始的 init 命令后 kubeadm 就开始安装了。但通常这时还是会报错,这是因为国内 gcr.io 无法访问(谷歌自己的容器镜像仓库),造成镜像下载不下来。
(5)我们可以通过国内厂商提供的 kubernetes 的镜像服务来下载,比如第一个 k8s.gcr.io/kube-apiserver:v1.14.1 镜像,可以执行如下命令从阿里云下载:
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.14.1
(6)镜像下载下来以后再通过 docker tag 命令将其改成kudeadm安装时候需要的镜像名称。
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.14.1 k8s.gcr.io/kube-apiserver:v1.14.1
(7)其它缺失的镜像也依照上面步骤进行操作。
(8)镜像全部下载完毕后,再执行最开始的 init 命令后 kubeadm 就能成功安装了。最后一行,kubeadm 会提示我们,其他节点需要加入集群的话,只需要执行这条命令就行了,同时里面包含了加入集群所需要的 token(这个要记下来)。
2,配置 kubectl
- Linux - 新建用户教程(新增一个具有root权限的新用户)
su - hangge
(3)依次执行如下命令(即前面 kubeadm init 输出的第一个红框内容),为 hangge 用户配置 kubectl:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
(4)为了使用更加便捷,启用 kubectl 命令的自动补全功能。
echo "source <(kubectl completion bash)" >> ~/.bashrc
3,安装 Pod 网络
Kubernetes 支持多种网络方案,这里我们使用 flannel。执行如下命令即可部署 flannel:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
4,开放端口
分别执行下面两条命令配置 firewall 防火墙策略,开放相关端口:
firewall-cmd --permanent --add-port=6443/tcp firewall-cmd --permanent --add-port=2379/tcp firewall-cmd --permanent --add-port=2380/tcp firewall-cmd --permanent --add-port=10250/tcp firewall-cmd --permanent --add-port=10251/tcp firewall-cmd --permanent --add-port=10252/tcp firewall-cmd --reload
三、Node 节点的安装配置
1,添加节点
kubeadm join 192.168.60.128:6443 --token w5ndme.t66qlcrcw6l2j1k6 --discovery-token-ca-cert-hash sha256:890270a05467595010abc74718a53d95b13f0ba337a350ed4c52b1edcd47c2e8
(2)显示如下内容则说明节点添加成功:
2,安装镜像
(1)在每一个 node 节点上我们还需要下载 quay.io/coreos/flannel:v0.11.0-amd64、k8s.gcr.io/pause 和 k8s.gcr.io/kube-proxy 这三个镜像,其中后面两个镜像具体版本可以执行kubeadm config images list 查看一下:
(2)由于网络问题,后面两个镜像可能没法自动下载下来(第一个可以直接下载)。我们可以通过国内厂商提供的 kubernetes 的镜像服务来下载,再通过 docker tag 命令将其改成kudeadm 需要的镜像名称。
docker pull quay.io/coreos/flannel:v0.11.0-amd64 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.14.1 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.14.1 k8s.gcr.io/kube-proxy:v1.14.1
3,开放端口
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --reload
四、查看节点状态
(1)在 master 节点上执行 kubectl get nodes 查看节点状态:
kubectl get pod --all-namespaces
4)我们也可以通过 kubectl describe pod <Pod Name> 查看 Pod 的具体情况,比如我们查看 kube-proxy-96bz6 这个 Pod 目前为何还没就绪。
kubectl describe pod kube-proxy-96bz6 --namespace=kube-system
(5)结果如下,是由于下载 image 时失败。这个可能是网络问题,我们可以继续等待,因为 Kubernetes 会自动重试。当然我们也可以自己手动执行 docker pull 去下载这个镜像。
注意:不一定都是 Master 节点下载镜像失败,还有可能是 node 节点上下载镜像失败,具体是哪里可以看前面部分信息。比如这里的 k8s.gcr.io/pause:3.1 就是 node 节点上没下载下来。
(6)当所有的 Pod 都处于 Running 状态后,可以发现所有的节点也就准备好了。至此 Kubernetes集群创建成功。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现