kubernetes 集群搭建(kubeadm方式)

148 阅读4分钟

随着容器技术的日益普及,Kubernetes 作为最受欢迎的容器编排平台之一,已经成为现代云原生应用部署不可或缺的一部分。对于想要快速构建和管理 Kubernetes 集群的人来说,kubeadm 提供了一种简单而强大的工具。本文将详细介绍如何使用 kubeadm 来搭建一个功能齐全的 Kubernetes 集群,并分享一些实用技巧和注意事项。

准备工作

在开始之前,请确保您的环境满足以下条件:

  • 操作系统:支持的操作系统包括 Ubuntu、CentOS 等主流 Linux 发行版。
  • 硬件要求:至少两台机器(一台作为 Master 节点,另一台或更多作为 Worker 节点),每台机器建议配置至少 2GB RAM 和 2 CPU 核心。
  • 网络连接:所有节点之间需要能够互相通信,最好是在同一个局域网内。
  • 时间同步:确保所有节点的时间一致,可以安装 NTP 服务来自动同步时间。
  • 防火墙设置:根据实际情况调整防火墙规则,允许必要的端口访问(如 6443, 2379-2380, 10250, 10251, 10252 等)。

安装依赖项

在所有节点上执行如下命令以更新软件包列表并安装必要的依赖项:

sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl

对于 CentOS 用户,则应使用 yum:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

安装 Docker

Kubernetes 默认使用 Docker 作为容器运行时。按照官方文档中的指导,在每个节点上安装最新版本的 Docker。

Ubuntu/Debian

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce

CentOS

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce

启动并启用 Docker 服务:

sudo systemctl start docker
sudo systemctl enable docker

安装 kubeadm、kubelet 和 kubectl

接下来,在所有节点上安装 kubeadmkubeletkubectl。这些工具分别用于初始化集群、管理和操作集群以及与 API Server 交互。

添加 Kubernetes APT 源(适用于 Debian/Ubuntu)

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update

安装所需组件

sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

对于 CentOS 用户,则应添加 YUM 源并安装:

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch
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
exclude=kube*
EOF
setenforce 0
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet

初始化 Master 节点

现在我们已经准备好初始化 Master 节点了。请登录到您计划用作 Master 的服务器,并执行以下命令:

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

这里指定了 Pod 网络 CIDR,这取决于您选择的 CNI 插件(后面会介绍)。初始化完成后,系统将输出一系列后续步骤,请仔细阅读并按照指示操作。

配置 kubectl

为了让普通用户能够方便地使用 kubectl 命令,我们需要将其配置文件复制到家目录下:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

安装 Pod 网络插件

Kubernetes 需要一个 CNI (Container Network Interface) 插件来为 Pods 提供网络连接。有许多不同的 CNI 实现可供选择,例如 Flannel、Calico 等。在这里我们将使用 Flannel 作为示例:

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

等待几分钟直到所有的 Pod 都变为 Running 状态。

加入 Worker 节点

当 Master 节点成功初始化并且 Pod 网络插件已安装后,就可以让其他节点加入集群了。回到初始化 Master 节点时输出的信息中,找到类似下面的命令:

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

在每个 Worker 节点上运行该命令即可完成加入过程。注意,这个 token 是有时效性的,默认有效期为24小时,如果过期可以重新生成新的 token。

验证集群状态

最后,我们可以使用 kubectl get nodes 来查看当前集群中的所有节点及其状态。理想情况下,你应该看到 Master 和所有 Worker 节点都处于 Ready 状态。

kubectl get nodes

此外,还可以检查 Pod 和 Service 是否正常工作:

kubectl get pods --all-namespaces
kubectl get services --all-namespaces

高可用性配置(可选)

为了提高集群的可靠性,建议将 Master 节点设置为高可用模式。这通常涉及到多个 Master 节点之间的负载均衡、etcd 集群等复杂配置。有关详细信息,请参考官方文档或相关教程。

注意事项

尽管 kubeadm 提供了一个简便的方式来创建 Kubernetes 集群,但在实际应用中也要注意以下几点:

  • 安全性:确保正确设置了 RBAC 规则、网络策略等安全措施,防止潜在的安全漏洞。
  • 性能优化:合理配置资源限制和请求,避免不必要的浪费或争用。
  • 备份恢复:定期备份 etcd 数据库和其他重要配置文件,以便于灾难恢复。
  • 监控告警:集成 Prometheus、Grafana 等监控工具,实时掌握集群健康状况。
  • 日志管理:采用 ELK Stack 或其他日志聚合方案来集中收集和分析日志信息。

结语

感谢您的阅读!如果您对 Kubernetes 或者 kubeadm 方式搭建集群有任何疑问或见解,欢迎继续探讨。