当前位置: 首页 > news >正文

kubernetes 集群搭建(二进制方式)

Kubernetes 作为当今最流行的容器编排平台,提供了强大的功能来管理和扩展容器化应用。除了使用 kubeadm 等工具简化集群的创建过程外,直接通过二进制文件安装 Kubernetes 组件也是一种常见的方法。这种方式给予用户更多的控制权,并且适用于那些希望深入理解 Kubernetes 内部工作原理的人。本文将详细介绍如何通过二进制方式搭建一个功能齐全的 Kubernetes 集群,并分享一些实用技巧和注意事项。

准备工作

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

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

安装依赖项

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

Ubuntu/Debian
sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
CentOS
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

安装 Docker(使用国内镜像源)

为了加快 Docker 的安装速度,我们将使用阿里云提供的 Docker 源。

Ubuntu/Debian

# 添加阿里云 Docker 源
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce

CentOS

# 创建或编辑 /etc/yum.repos.d/docker-ce.repo 文件
cat <<EOF | sudo tee /etc/yum.repos.d/docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - \$basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/\$releasever/\$basearch/stable
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF
sudo yum makecache fast
sudo yum install -y docker-ce

启动并启用 Docker 服务:

sudo systemctl start docker
sudo systemctl enable docker

下载 Kubernetes 组件

接下来,在所有节点上下载所需的 Kubernetes 组件(kubeletkubectlkubeadm)。虽然我们这里不使用 kubeadm 来初始化集群,但是它仍然可以用于某些辅助操作。我们将从官方 GitHub 发布页面获取这些组件的二进制文件。

下载二进制文件

假设我们要部署 Kubernetes v1.26.0 版本,可以根据官方文档找到对应的发布地址,并下载相应的 tarball 文件。然后解压并将可执行文件放置到 /usr/local/bin 目录下:

# 下载并解压 Kubernetes 二进制文件
wget https://dl.k8s.io/v1.26.0/kubernetes-server-linux-amd64.tar.gz
tar -xvf kubernetes-server-linux-amd64.tar.gz
cd kubernetes/server/bin/
sudo cp kubelet kubectl /usr/local/bin/# 设置正确的权限
sudo chmod +x /usr/local/bin/kubelet
sudo chmod +x /usr/local/bin/kubectl

对于 kubectl,还可以选择将其配置为特定版本,以便与集群保持一致:

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

配置 Master 节点

现在我们已经准备好配置 Master 节点了。请登录到您计划用作 Master 的服务器,并执行以下步骤:

初始化 etcd

etcd 是 Kubernetes 的键值存储数据库,用于保存集群状态信息。您可以选择安装独立的 etcd 实例或者使用静态 Pod 来运行 etcd。在这里我们将介绍如何使用静态 Pod 启动 etcd。

首先,创建一个名为 etcd.yaml 的文件来定义 etcd Pod 的配置:

apiVersion: v1
kind: Pod
metadata:name: etcdnamespace: kube-system
spec:hostNetwork: truecontainers:- name: etcdimage: quay.io/coreos/etcd:v3.5.0command:- "/usr/local/bin/etcd"- "--data-dir"- "/var/lib/etcd"- "--advertise-client-urls"- "http://127.0.0.1:2379"- "--listen-client-urls"- "http://0.0.0.0:2379"- "--initial-advertise-peer-urls"- "http://127.0.0.1:2380"- "--listen-peer-urls"- "http://0.0.0.0:2380"- "--initial-cluster"- "default=http://127.0.0.1:2380"- "--initial-cluster-token"- "etcd-cluster-0"- "--initial-cluster-state"- "new"volumeMounts:- mountPath: /var/lib/etcdname: etcd-storagevolumes:- hostPath:path: /var/lib/etcdname: etcd-storage

保存后,使用 kubectl 应用此配置:

kubectl apply -f etcd.yaml --kubeconfig=/etc/kubernetes/admin.conf

配置 API Server

接下来是配置 API Server。同样地,我们需要编写一个 YAML 文件来描述 API Server 的配置。以下是 apiserver.yaml 的示例内容:

apiVersion: v1
kind: Pod
metadata:name: kube-apiservernamespace: kube-system
spec:hostNetwork: truecontainers:- name: kube-apiserverimage: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.26.0command:- "/usr/local/bin/kube-apiserver"- "--etcd-servers=http://127.0.0.1:2379"- "--service-cluster-ip-range=10.96.0.0/12"- "--insecure-bind-address=0.0.0.0"- "--secure-port=6443"- "--allow-privileged=true"- "--advertise-address=<MASTER_IP>"- "--authorization-mode=Node,RBAC"- "--enable-admission-plugins=NodeRestriction"- "--tls-cert-file=/etc/kubernetes/pki/apiserver.crt"- "--tls-private-key-file=/etc/kubernetes/pki/apiserver.key"- "--client-ca-file=/etc/kubernetes/pki/ca.crt"- "--service-account-key-file=/etc/kubernetes/pki/sa.pub"- "--service-account-signing-key-file=/etc/kubernetes/pki/sa.key"- "--service-account-issuer=https://kubernetes.default.svc.cluster.local"- "--service-account-api-audiences=api"- "--proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt"- "--proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key"- "--requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt"- "--requestheader-allowed-names=front-proxy-client"- "--requestheader-extra-headers-prefix=X-Remote-Extra-"- "--requestheader-group-headers=X-Remote-Group"- "--requestheader-username-headers=X-Remote-User"- "--kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt"- "--kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key"- "--enable-bootstrap-token-auth=true"- "--token-auth-file=/etc/kubernetes/pki/tokens.csv"- "--audit-log-maxage=30"- "--audit-log-maxbackup=3"- "--audit-log-maxsize=100"- "--audit-log-path=/var/log/kube-apiserver/audit.log"volumeMounts:- mountPath: /etc/kubernetes/pkiname: pki- mountPath: /var/log/kube-apiservername: audit-logvolumes:- hostPath:path: /etc/kubernetes/pkiname: pki- hostPath:path: /var/log/kube-apiservername: audit-log

请注意替换 <MASTER_IP> 为实际 Master 节点的 IP 地址。此外,还需要提前生成所需的证书和密钥文件,这可以通过 cfssl 工具来完成。具体步骤可以参考官方文档。

配置其他控制平面组件

除了 API Server 和 etcd 外,Kubernetes 控制平面还包括 Scheduler 和 Controller Manager。它们也可以通过静态 Pod 的方式来配置。这里不再赘述详细的配置文件,因为其结构与上述类似,只是命令参数有所不同。

启动控制平面组件

当所有的控制平面组件配置完毕后,可以使用 kubectl 来启动它们:

kubectl apply -f <component>.yaml --kubeconfig=/etc/kubernetes/admin.conf

等待几分钟直到所有组件都成功启动。

安装 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 token create 命令生成一个新的加入令牌,然后在每个 Worker 节点上运行如下命令来加入集群:

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

注意,这个 token 是有时效性的,默认有效期为24小时,如果过期可以重新生成新的 token。

验证集群状态

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

kubectl get nodes

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

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

注意事项

尽管通过二进制方式安装 Kubernetes 提供了更大的灵活性,但在实际应用中也要注意以下几点:

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

结语

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

http://www.lryc.cn/news/524028.html

相关文章:

  • linux平台RTMP|RTSP播放器如何回调SEI数据?
  • Vue uni-app免手动import
  • 7. 计算机视觉
  • 在服务器进行docker部署频繁提示permission denied
  • c/c++ static
  • C#中System.Text.Json:从入门到精通的实用指南
  • 内存故障原因与诊断(Reasons and Diagnosis of Memory Failure)
  • [操作系统] 进程状态详解
  • [论文阅读] (36)CS22 MPSAutodetect:基于自编码器的恶意Powershell脚本检测模型
  • 【Maui】下拉框的实现,绑定键值对
  • Oracle 深入学习 Part 14:Managing Password Security and Resources(管理密码安全性和资源)
  • C语言:位段
  • MPLS VPN 原理与配置
  • 稳定的通信桥梁,CCLINKIE转ModbusTCP网关实现AGV运输的光速效应
  • Leetcode 3428. Maximum and Minimum Sums of at Most Size K Subsequences
  • 第2章:Python TDD构建Dollar类基础
  • 【算法学习笔记】34:扩展欧几里得算法
  • 云原生周刊:K8s 生产环境架构设计及成本分析
  • WGAN - 瓦萨斯坦生成对抗网络
  • 海量数据的处理
  • 区块链的数学基础:核心原理与应用解析
  • 1.5 GPT 模型家族全解析:从 GPT-1 到 GPT-4 的演进与创新
  • 自动驾驶之DriveMM: All-in-One Large Multimodal Model for Autonomous Driving
  • Spring Boot 配置(官网文档解读)
  • SparkSQL数据源与数据存储
  • 【BQ3568HM开发板】开箱测试
  • 3D 模型格式转换之 STP 转 STL 深度解析
  • MySQL数据库的数据文件保存在哪?MySQL数据存在哪里
  • 低代码系统-UI设计器核心介绍
  • ubuntu20.04有亮度调节条但是调节时亮度不变