backgroundbackground
快速启动和配置K8S集群

快速启动和配置K8S集群

K8S / Docker / Linux

教程

2025-03-03 13:33

Kubernetes(简称K8S)是当前最流行的容器编排平台,能够帮助我们高效地管理和部署容器化应用。本文将手把手带你快速搭建一个可用的K8S集群。

一、准备工作

  1. Cgroup Driver 设置一致
    • kubelet和容器运行时(如containerd)的Cgroup Driver必须一致,推荐都用systemd,否则可能导致节点无法正常加入集群。
  2. 关闭 Swap
    • K8S要求节点关闭swap,否则kubelet会启动失败。可以用如下命令临时关闭:
      sudo swapoff -a
      
    • 若想永久关闭,编辑/etc/fstab,注释掉包含swap的那一行。
    • 或者在/var/lib/kubelet/config.yaml里添加failSwapOn: false(需在kubeadm初始化后立即修改)。
    • 也可以在/lib/systemd/system/kubelet.service里配置:
      ExecStart=/usr/bin/kubelet --cgroup-driver=systemd --fail-swap-on=false
      
  3. 时间同步
    • 集群各节点时间需保持同步,建议安装chronyntpd

二、创建控制节点

在主节点上执行以下命令初始化集群:

sudo kubeadm init --control-plane-endpoint="cluster-endpoint:6443" --pod-network-cidr="10.244.0.0/16" --service-cidr="10.96.0.0/16" -v=5
  • --control-plane-endpoint:集群控制平面访问地址,建议配置为负载均衡器或主节点IP,便于高可用。
  • --pod-network-cidr:指定Pod网络的IP地址范围,需与所选CNI插件(如Flannel)一致。
  • --service-cidr:指定Kubernetes Service的虚拟IP地址范围。
  • -v=5:日志详细级别,数字越大日志越详细,便于排查问题。

kubeadm完整参数参考:官方文档

初始化完成后,按照提示配置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 join 命令(在主节点初始化后会输出,形如):

sudo kubeadm join cluster-endpoint:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

四、让主节点可调度(可选)

默认情况下,主节点不参与Pod调度。如果你是单节点集群或测试环境,可以解除限制:

kubectl taint nodes --all node-role.kubernetes.io/master-
kubectl taint nodes --all node-role.kubernetes.io/control-plane-

如需让主节点参与外部负载均衡:

kubectl label nodes --all node.kubernetes.io/exclude-from-external-load-balancers-

五、安装CNI网络插件

K8S集群需要网络插件实现Pod间通信。以 Flannel 为例:

  1. 加载内核模块
    sudo modprobe br_netfilter
    
  2. 安装 Flannel 插件
    kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
    

    如果你选择其他CNI(如Calico、Cilium),请参考对应官方文档。


六、安装 Dashboard(可视化界面)

  1. 安装 Helm
    Helm 是K8S的包管理器,安装方式如下:
    curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
    sudo apt-get install apt-transport-https --yes
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
    sudo apt-get update
    sudo apt-get install helm
    
  2. 安装 Kubernetes Dashboard
    helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
    helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard
    

    安装完成后,可以通过kubectl proxy访问Dashboard,或配置Ingress/NodePort暴露服务。

七、常用命令速查

  • 查看所有Pod(含所有命名空间):
    kubectl get pods -A
    
  • 查看节点状态:
    kubectl get nodes
    
  • 查看服务:
    kubectl get svc -A
    
  • 查看所有命名空间:
    kubectl get ns
    
  • 查看指定命名空间下的Pod:
    kubectl get pods -n <namespace>
    
  • 查看Pod详细信息:
    kubectl describe pod <pod-name> -n <namespace>
    
  • 查看Pod日志:
    kubectl logs <pod-name> -n <namespace>
    
  • 进入Pod容器内部:
    kubectl exec -it <pod-name> -n <namespace> -- /bin/bash
    
  • 应用/更新资源配置:
    kubectl apply -f <yaml文>
    
  • 删除资源:
    kubectl delete -f <yaml文>
    
  • 查看集群信息:
    kubectl cluster-info
    
  • 查看资源使用情况(需安装metrics-server):
    kubectl top nodes
    kubectl top pods -A
    
  • 查看Deployment状态:
    kubectl get deploy -A
    
  • 滚动重启Deployment:
    kubectl rollout restart deployment <deployment-name> -n <namespace>
    
  • 查看事件:
    kubectl get events -A
    

参考资料