在CentOS上部署Kubernetes1.7集群有哪些坑和技巧?

在容器编排技术蓬勃发展的时代,Kubernetes 以其强大的功能和社区活力迅速成为行业标准,而 CentOS 作为一款稳定、免费且广泛使用的企业级操作系统,是部署 Kubernetes 集群的理想平台,本文将详细介绍如何在 CentOS 7 系统上部署一个功能完备的 Kubernetes 1.7 集群,尽管 1.7 版本已不是最新,但其核心架构和部署流程对于理解 Kubernetes 的工作原理以及维护一些遗留环境具有重要的学习价值和实践意义。

在CentOS上部署Kubernetes1.7集群有哪些坑和技巧?

环境准备

在开始部署之前,我们需要准备符合要求的服务器环境,一个最小化的 Kubernetes 集群至少需要一个 Master 节点和一个 Worker 节点,为了演示和保证冗余,我们将配置一个包含一个 Master 节点和两个 Worker 节点的集群。

节点规划表:

主机名 IP 地址 角色 配置(最低建议)
k8s-master 168.1.10 Master 2核CPU, 4GB内存
k8s-node1 168.1.11 Worker 2核CPU, 4GB内存
k8s-node2 168.1.12 Worker 2核CPU, 4GB内存

通用系统配置(所有节点执行)

  1. 关闭防火墙和 SELinux:为了简化初次部署过程,避免网络策略干扰,我们暂时关闭防火墙和 SELinux,在生产环境中,应正确配置防火墙规则而非直接关闭。

    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0
    sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
  2. 配置主机名和主机解析:为每个节点设置主机名,并确保所有节点之间可以通过主机名互相访问。

    # 在 k8s-master 节点
    hostnamectl set-hostname k8s-master
    # 在 k8s-node1 节点
    hostnamectl set-hostname k8s-node1
    # 在 k8s-node2 节点
    hostnamectl set-hostname k8s-node2
    # 在所有节点上编辑 /etc/hosts 文件,添加以下内容
    cat >> /etc/hosts << EOF
    192.168.1.10 k8s-master
    192.168.1.11 k8s-node1
    192.168.1.12 k8s-node2
    EOF
  3. 关闭 Swap 分区:Kubernetes Master 节点为了保证其性能和稳定性,要求必须关闭 Swap。

    swapoff -a
    sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab
  4. 配置内核参数:启用 br_netfilter 模块并调整相关内核参数,以满足 Kubernetes 网络组件(如 kube-proxy)的正常工作。

    cat <<EOF >  /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    sysctl --system

安装 Docker 和 Kubernetes 组件

以下操作需要在所有节点上执行。

  1. 安装 Docker:Kubernetes 使用容器运行时来管理容器,Docker 是最常见的选择,我们需要安装一个与 Kubernetes 1.7 兼容的 Docker 版本。

    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    yum install -y docker-ce-18.06.1.ce-3.el7
    # 启动并设置 Docker 开机自启
    systemctl enable docker && systemctl start docker
  2. 安装 kubeadm, kubelet, kubectl:这三个是 Kubernetes 的核心组件。

    • kubeadm:用于初始化集群的命令行工具。
    • kubelet:运行在每个节点上的代理,负责管理 Pod。
    • kubectl:与集群交互的命令行客户端。

    添加 Kubernetes 的 YUM 仓库:

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    EOF

    安装指定版本(1.7.0)的组件:

    yum install -y kubelet-1.7.0-0 kubeadm-1.7.0-0 kubectl-1.7.0-0
    systemctl enable kubelet && systemctl start kubelet

初始化 Master 节点

k8s-master 节点上执行以下命令来初始化控制平面。

在CentOS上部署Kubernetes1.7集群有哪些坑和技巧?

kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.1.10
  • --pod-network-cidr:指定 Pod 网络的 IP 地址范围,这里我们使用了 Flannel 网络插件的默认 CIDR。
  • --apiserver-advertise-address:指定 Master 节点的 API Server 监听地址。

初始化成功后,终端会输出重要的后续操作指令,包括:

  1. 配置 kubectl 的配置文件,以便普通用户也能管理集群。

    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config
  2. 一条 kubeadm join 命令,用于 Worker 节点加入集群,请务必记录下这条命令,它包含了加入集群所需的 token。

安装 Pod 网络插件

集群初始化完成后,kubectl get nodes 会看到 Master 节点处于 NotReady 状态,因为没有安装网络插件,我们选择 Flannel,一个简单易用的 VXLAN 网络方案。

k8s-master 节点上执行:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml

等待片刻,下载 Flannel 的镜像并启动相关 Pod 后,再次检查节点状态:

kubectl get nodes

k8s-master 的状态应该变为 Ready

Worker 节点加入集群

k8s-node1k8s-node2 节点上,执行之前在 Master 初始化成功后记录的 kubeadm join 命令,命令格式如下:

kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>

执行成功后,回到 k8s-master 节点,再次检查节点状态:

kubectl get nodes

如果一切顺利,你会看到所有三个节点都处于 Ready 状态,至此,一个基础的 Kubernetes 1.7 集群就搭建完成了。

验证集群功能

为了验证集群是否正常工作,我们可以部署一个 Nginx 应用。

  1. 创建 Deployment

    在CentOS上部署Kubernetes1.7集群有哪些坑和技巧?

    kubectl run nginx --image=nginx --replicas=3 --port=80
  2. 暴露服务:通过 NodePort 类型的 Service 将 Nginx 服务暴露在集群外部。

    kubectl expose deployment nginx --type=NodePort --port=80
  3. 查看服务信息

    kubectl get svc nginx

    该命令会输出一个随机分配的 NodePort 端口,30880

  4. 访问验证:在任何一台节点的机器上,或者能访问到节点网络的主机上,通过 curl 访问服务:

    curl http://192.168.1.11:30880

    或者访问任意其他 Node 节点的 IP 和该端口,如果看到 Nginx 的欢迎页面,说明集群部署完全成功。


相关问答FAQs

Q1: kubeadm join 命令执行失败,提示 discovery token 失效或找不到,该怎么办?

A: kubeadm init 生成的 token 默认只有 24 小时的有效期,token 过期,你需要在 Master 节点上重新生成一个,在 Master 节点上创建一个新的 token:

kubeadm token create

获取 CA 公钥的 hash 值:

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

使用新获取的 token 和 hash 值重新拼接 kubeadm join 命令,并在 Worker 节点上执行即可。

Q2: 部署应用后,Pod 一直处于 ContainerCreatingPending 状态,kubectl describe pod 显示镜像拉取失败,是什么原因?

A: 这通常是网络问题或 Worker 节点无法访问容器镜像仓库导致的,Kubernetes 1.7 时代,国内访问 gcr.iok8s.gcr.io 等官方仓库非常困难,解决方法有两个:

  1. 配置 Docker 镜像加速器:在所有节点上为 Docker 配置国内镜像源,如阿里云、腾讯云等提供的加速服务,修改 /etc/docker/daemon.json 文件并重启 Docker,这可以解决大部分第三方镜像(如 Nginx)的拉取问题。
  2. 手动拉取和标记镜像:对于核心组件(如 kube-proxy-amd64)所需的 k8s.gcr.io 镜像,可以在能访问外网的机器上将其从 Docker Hub 等第三方仓库(国内开发者通常会同步一份)拉取下来,然后通过 docker tag 命令重新打上 K8s 需要的标签,再 docker save 成 tar 包,分发到各个 Worker 节点上用 docker load 导入。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-09 10:08
下一篇 2025-10-09 10:10

相关推荐

  • U盘CentOS系统损坏无法启动该怎么解决?

    在使用CentOS系统的过程中,U盘扮演着至关重要的角色,无论是作为系统安装介质、便携式系统环境,还是用于数据传输和备份,U盘的损坏问题也时常困扰着用户,一个原本工作正常的CentOS启动盘或数据盘,可能突然无法识别、无法引导或文件损坏,面对“u盘centos损坏”这一棘手问题,我们需要系统性地分析其原因,并采……

    2025-10-05
    003
  • 如何进行Ubuntu服务器的高效配置?

    Ubuntu服务器配置涉及安装操作系统、设置网络连接、更新软件包、安装必要的服务和安全设置等步骤。具体包括选择适合的Ubuntu版本、分区硬盘、配置静态或动态IP地址、设置防火墙规则、创建用户账户以及安装如Apache、MySQL、PHP等软件来搭建Web服务器环境。

    2024-08-07
    0013
  • 如何优化Kubernetes服务器操作以提升上市公司的业务效率?

    上市公司在服务器领域涉及Kubernetes操作,包括部署、管理和扩展容器化应用。这些公司可能提供解决方案或服务来支持企业在云原生环境中使用Kubernetes,优化资源利用和提高运维效率。

    2024-07-29
    008
  • 服务器开发项目_开发大屏项目

    服务器开发项目,专注于大屏展示。实时数据流、动态图表、交互式界面,为您的业务提供强大支持。高效、稳定、易用,助您领跑行业。

    2024-06-25
    0011

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信