k8s安装与部署指南

环境准备

确保所有节点满足以下条件:

  • 操作系统:Ubuntu 20.04+/CentOS 7+
  • 内存:2GB以上(建议4GB)
  • CPU:2核以上
  • 网络互通
  • 禁用交换分区:
    sudo swapoff -a
    sudo sed -i '/ swap / s/^/#/' /etc/fstab
    

安装容器运行时

推荐使用containerd作为运行时:

# Ubuntu
sudo apt-get update && sudo apt-get install -y containerd
# CentOS
sudo yum install -y containerd.io
sudo systemctl enable --now containerd

安装kubeadm/kubelet/kubectl

配置Kubernetes仓库并安装组件:

# Ubuntu
sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl

# CentOS
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key
EOF
sudo yum install -y kubelet kubeadm kubectl

初始化控制平面

在主节点执行:

sudo kubeadm init --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

安装网络插件

部署Flannel网络:

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

加入工作节点

在控制平面初始化输出的命令中,找到类似以下命令在工作节点执行:

kubeadm join <control-plane-ip>:6443 --token <token> --discovery-token-ca-cert-hash <hash>

验证集群状态
kubectl get nodes
kubectl get pods -n kube-system

可选组件部署

安装Dashboard:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
kubectl create serviceaccount dashboard-admin-sa
kubectl create clusterrolebinding dashboard-admin-sa --clusterrole=cluster-admin --serviceaccount=default:dashboard-admin-sa

常见问题处理

节点NotReady状态:

  • 检查网络插件是否正常运行
  • 验证kubelet服务状态:
    journalctl -u kubelet -f
    

Pod创建失败:

  • 检查资源配额:
    kubectl describe pod <pod-name>
    

更多推荐