网站域名信息查询网站排名优化培训电话
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 组件(kubelet
、kubectl
、kubeadm
)。虽然我们这里不使用 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 或者二进制方式搭建集群有任何疑问或见解,欢迎继续探讨。