教你如何搭建K8S集群。
搭建Kubernetes(K8S)集群涉及多个步骤和组件的配置,是一个需要严谨执行的过程。以下是一份详细的Kubernetes集群搭建指南,旨在帮助你理解每一个步骤,并顺利完成集群的部署。
一、准备环境
-
服务器节点准备你需要至少两台运行Linux操作系统的服务器节点,这些节点可以是物理服务器或虚拟机。建议配置如下:
- 主节点(Master Node):负责集群管理、调度、API访问等任务。
- 工作节点(Worker Node):用于运行实际的应用容器。
要求:
- 所有节点需要能够通过内网互相访问。
- 确保节点之间的时间同步,以免引发潜在的集群通信问题。
-
节点系统配置确保所有节点满足以下要求:
-
禁用Swap:
sudo swapoff -a
解释:Kubernetes需要禁用Swap以确保稳定的内存管理,因为Swap可能导致Kubelet的不稳定。
-
配置主机名:
sudo hostnamectl set-hostname <hostname>
解释:为每个节点设置一个唯一的主机名,便于后续管理和识别。
-
更新系统:
sudo apt-get update && sudo apt-get upgrade -y
解释:
确保系统软件包为最新,以避免由于旧版本软件包导致的兼容性问题。
-
二、安装Docker
-
安装Docker引擎Kubernetes依赖Docker来管理和运行容器,因此在每个节点上安装Docker是必不可少的。
Ubuntu/Debian:
sudo apt-get install -y docker.io
CentOS:
sudo yum install -y docker sudo systemctl start docker sudo systemctl enable docker
解释:这些命令在不同的Linux发行版上安装Docker,并启动Docker服务,确保在系统重启后Docker仍自动启动。
-
配置Docker
配置Docker以适应Kubernetes的要求:sudo mkdir /etc/docker cat <<EOF | sudo tee /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF sudo systemctl restart docker
解释:
以上配置将Docker的cgroup驱动设置为systemd
,这是Kubernetes推荐的配置,以便与Kubelet一致。配置还调整了日志驱动和存储驱动,以优化容器的运行性能和日志管理。
三、安装Kubernetes组件
-
添加Kubernetes仓库为了安装Kubernetes的各个组件,你需要先添加Kubernetes的官方软件仓库。
Ubuntu/Debian:
sudo apt-get update && sudo apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF sudo apt-get update
CentOS:
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 EOF sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
**解释:**以上命令添加了Kubernetes官方软件仓库,并确保你可以从官方渠道安装到最新的Kubernetes版本。
-
安装Kubernetes组件
使用包管理工具安装Kubernetes的主要组件:kubeadm
、kubelet
和kubectl
。Ubuntu/Debian:
sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl
CentOS:
sudo yum install -y kubelet kubeadm kubectl sudo systemctl enable kubelet && sudo systemctl start kubelet
解释:
kubelet
负责在每个节点上运行容器;kubeadm
用于初始化和管理集群;kubectl
是用于与集群交互的命令行工具。apt-mark hold
命令防止这些软件包被意外升级。
四、初始化主节点(Master Node)
-
初始化集群在主节点上使用
kubeadm init
命令初始化Kubernetes集群。sudo kubeadm init --pod-network-cidr=10.244.0.0/16
解释:
--pod-network-cidr
选项指定Pod网络的CIDR(Classless Inter-Domain Routing)。这个示例使用的是Flannel网络插件的默认CIDR。 -
配置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
解释:
这些命令将kubeadm生成的配置文件复制到用户目录中,并设置相应权限,以便你可以使用kubectl命令管理集群。
五、加入工作节点(Worker Node)
-
加入集群
在每个工作节点上,使用kubeadm join
命令加入集群。这个命令会在kubeadm init
成功后提供。sudo kubeadm join <master-ip>:<port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
解释:
此命令将工作节点加入到主节点所在的集群中,<master-ip>
、<port>
、<token>
和<hash>
都是kubeadm init
成功后生成的值。请在命令中替换为实际值。
六、配置网络插件
-
安装网络插件
在主节点上安装一个网络插件,以便集群内的Pod可以互相通信。这里我们以Flannel为例:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
解释:
这个命令通过kubectl应用Flannel网络插件的配置文件,Flannel将管理Pod的网络通信。
七、验证集群状态
-
查看节点状态使用以下命令检查集群中所有节点的状态:
kubectl get nodes
**解释:**这个命令列出了集群中所有节点的状态。你应该能看到所有节点的状态都为
Ready
,这表明节点已成功加入集群并准备好运行Pod。 -
查看集群组件状态
你可以进一步验证集群组件的运行情况:kubectl get pods --all-namespaces
解释:
这条命令列出了所有命名空间下正在运行的Pod,可以帮助你检查集群是否有组件未正常启动。
八、总结与扩展
通过以上步骤,你已经成功搭建了一个基本的Kubernetes集群。这个集群由一个主节点和至少一个工作节点组成,并且已经配置好了必要的网络插件以支持Pod之间的通信。
进一步的配置和优化
- 持久存储配置持久存储(Persistent Storage),以支持持久化应用数据。常见的存储插件包括NFS、Ceph、GlusterFS等。
- 集群监控安装集群监控工具(如Prometheus、Grafana),以便实时监控集群和应用的运行状态。
- 负载均衡
部署Ingress Controller(如NGINX Ingress Controller),以提供集群外部的HTTP和HTTPS负载均衡。
分析说明表
| 操作步骤 | 命令/操作 | 详细解释
禁用Swap | sudo swapoff -a |
禁用Swap,确保Kubernetes的稳定性。 |
安装Docker | sudo apt-get install -y docker.io |