1. Kubernetes 1.35.0部署实战:Ubuntu系统极简安装手册
作为容器编排领域的事实标准,Kubernetes(简称k8s)的每个版本更新都牵动着运维工程师的神经。1.35.0版本带来了哪些新特性?在Ubuntu系统上如何快速搭建生产可用的集群?本文将用最精简的步骤带你完成从零部署,同时分享几个我在实际部署中总结的避坑技巧。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与系统配置
2.1 硬件资源规划建议
对于测试环境,建议至少准备:
- 2核CPU/4GB内存的主节点(控制平面)
- 1核CPU/2GB内存的工作节点(可扩展)
- 20GB磁盘空间(/var/lib/docker需要单独分区)
生产环境则需要根据实际负载调整,特别是etcd存储需要SSD支持。我曾在一个资源不足的测试机上部署时,kube-apiserver频繁崩溃,后来发现是swap未关闭导致内存抖动。
2.2 Ubuntu系统基础配置
bash复制# 关闭swap(k8s强制要求)
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab
# 设置正确的hostname(重要!)
sudo hostnamectl set-hostname k8s-master
echo "127.0.0.1 k8s-master" | sudo tee -a /etc/hosts
# 加载内核模块
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
# 立即加载模块
sudo modprobe -- br_netfilter ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack
关键提示:Ubuntu 22.04默认使用iptables-nft,需要额外安装legacy版本:
bash复制sudo apt-get install -y iptables arptables ebtables sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
3. 容器运行时与k8s组件安装
3.1 Containerd配置优化
相比Docker,Containerd是更轻量的选择:
bash复制# 安装containerd
sudo apt-get update && sudo apt-get install -y containerd
# 生成默认配置并启用systemd cgroup
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 重启服务
sudo systemctl restart containerd
sudo systemctl enable containerd
3.2 kubeadm/kubelet/kubectl安装
使用阿里云镜像加速国内安装:
bash复制# 添加apt源
sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# 安装指定版本
sudo apt-get update
sudo apt-get install -y kubelet=1.35.0-00 kubeadm=1.35.0-00 kubectl=1.35.0-00
sudo apt-mark hold kubelet kubeadm kubectl
4. 集群初始化与节点加入
4.1 控制平面初始化
使用calico网络插件并配置pod CIDR:
bash复制sudo kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.35.0 \
--pod-network-cidr=192.168.0.0/16 \
--apiserver-advertise-address=<你的主节点IP>
初始化完成后务必记录join命令,其中包含关键token信息。我有次因为没保存,不得不重新初始化整个集群。
4.2 网络插件部署
Calico 3.26版本适配k8s 1.35.0:
bash复制kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
验证网络健康状态:
bash复制watch kubectl get pods -n kube-system
# 等待所有pod变为Running状态
4.3 工作节点加入
在工作节点执行主节点提供的join命令:
bash复制sudo kubeadm join <主节点IP>:6443 --token <token> \
--discovery-token-ca-cert-hash sha256:<hash>
常见问题:如果token过期(默认24小时),可在主节点重新生成:
bash复制kubeadm token create --print-join-command
5. 集群验证与日常管理
5.1 基础功能测试
bash复制# 创建测试pod
kubectl run nginx --image=nginx --restart=Never
kubectl get pods -o wide
# 检查节点状态
kubectl get nodes -o wide
5.2 关键组件监控
安装metrics-server获取资源指标:
bash复制kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
查看节点资源使用:
bash复制kubectl top nodes
5.3 持久化存储配置
本地测试可使用hostPath,生产环境建议配置NFS或Ceph:
yaml复制apiVersion: v1
kind: PersistentVolume
metadata:
name: test-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /data/k8s-volumes
6. 故障排查与性能优化
6.1 日志查看技巧
bash复制# 查看kubelet日志(关键错误通常在这里)
journalctl -u kubelet -f
# 查看特定pod日志
kubectl logs -f <pod-name> --tail=100
6.2 常见问题解决方案
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| Pod一直Pending | 资源不足/污点限制 | kubectl describe pod |
| 网络不通 | CNI插件未正确安装 | 重新apply网络插件manifest |
| API Server不可用 | 证书过期/etcd故障 | 检查kube-apiserver日志 |
6.3 性能调优参数
在/var/lib/kubelet/config.yaml中添加:
yaml复制apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
evictionHard:
memory.available: "500Mi"
nodefs.available: "10%"
kubeReserved:
cpu: "500m"
memory: "500Mi"
7. 升级与维护策略
7.1 版本升级路径
1.35.0的升级注意事项:
bash复制# 先升级kubeadm
sudo apt-get update && sudo apt-get install -y kubeadm=1.35.0-00
# 验证升级计划
sudo kubeadm upgrade plan
# 执行升级(控制平面)
sudo kubeadm upgrade apply v1.35.0
# 升级kubelet和kubectl
sudo apt-get update && sudo apt-get install -y kubelet=1.35.0-00 kubectl=1.35.0-00
sudo systemctl daemon-reload
sudo systemctl restart kubelet
7.2 备份关键配置
定期备份:
- /etc/kubernetes/pki目录(包含所有证书)
- /etc/kubernetes/admin.conf(集群访问配置)
- /var/lib/etcd(如果使用默认存储)
建议使用velero进行全集群备份:
bash复制velero install \
--provider aws \
--bucket my-backup \
--secret-file ./credentials \
--use-volume-snapshots=false
8. 生产环境增强建议
8.1 安全加固措施
bash复制# 启用PSP(Pod安全策略)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/policy/psp.yaml
# 审计日志配置
sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
# 添加以下参数:
- --audit-log-path=/var/log/kubernetes/audit.log
- --audit-log-maxage=30
- --audit-log-maxbackup=10
8.2 高可用方案
使用kube-vip实现控制平面HA:
bash复制kubectl apply -f https://kube-vip.io/manifests/rbac.yaml
kube-vip manifest pod \
--interface eth0 \
--vip 192.168.1.100 \
--controlplane \
--services \
--arp \
--leaderElection | kubectl apply -f -
8.3 监控方案选型
推荐组合:
- Prometheus Operator:集群指标收集
- Grafana:可视化展示
- Alertmanager:告警通知
安装命令:
bash复制helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install kube-prometheus prometheus-community/kube-prometheus-stack
在完成基础部署后,我强烈建议为kubectl安装krew插件管理器,它就像k8s的"应用商店",可以方便地扩展各种实用工具。例如:
bash复制(
set -x; cd "$(mktemp -d)" &&
OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
KREW="krew-${OS}_${ARCH}" &&
curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
tar zxvf "${KREW}.tar.gz" &&
./"${KREW}" install krew
)
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
kubectl krew install ns ctx
