当前位置: 首页 > ai >正文

Ubuntu 系统上部署 Kubernetes 的完整指南


在这里插入图片描述


Ubuntu 系统上部署 Kubernetes 的完整指南

  • 一、环境准备(Ubuntu 22.04/24.04)
    • 1. 系统初始化
    • 2. 安装容器运行时(containerd)
    • 3. 安装 Kubernetes 组件(kubeadm, kubelet, kubectl)
  • 二、部署 Kubernetes 集群
    • 1. 初始化主节点
    • 2. 添加工作节点
    • 3. 验证集群状态
  • 三、部署应用示例
    • 1. 创建 Deployment
    • 2. 创建 Service
    • 3. 部署应用
  • 四、运维管理
    • 1. 资源监控
    • 2. 日志管理
    • 3. 自动扩缩容
  • 五、生产级最佳实践
    • 1. 高可用控制平面
    • 2. 持久化存储
  • 3. 安全加固
  • 六、备份与灾难恢复
    • 1. 备份 etcd 数据
    • 2. 恢复 etcd 数据
  • 七、常见问题排查
    • 1. Pod 处于 Pending 状态
    • 2. 服务无法访问


以下是 在全新安装的 Ubuntu 系统上部署 Kubernetes 的完整指南,涵盖环境准备、集群部署、运维管理及生产级最佳实践,适用于开发和生产场景。


一、环境准备(Ubuntu 22.04/24.04)

1. 系统初始化

# 更新系统并安装基础工具
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl gnupg apt-transport-https ca-certificates software-properties-common# 禁用交换分区(Kubernetes 要求)
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab  # 永久禁用# 设置主机名(可选)
sudo hostnamectl set-hostname k8s-master  # 主节点
sudo hostnamectl set-hostname k8s-worker1 # 工作节点

2. 安装容器运行时(containerd)

# 安装 containerd
sudo apt install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd# 验证运行时状态
sudo ctr version

3. 安装 Kubernetes 组件(kubeadm, kubelet, kubectl)

# 添加 Kubernetes 官方 GPG 密钥
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg# 添加仓库源
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list# 安装指定版本(例如 1.28.x)
sudo apt update && sudo apt install -y kubeadm=1.28.* kubelet=1.28.* kubectl=1.28.*# 设置 kubelet 自动启动(暂不启动)
sudo systemctl enable kubelet

二、部署 Kubernetes 集群

1. 初始化主节点

# 主节点执行
sudo kubeadm init \--pod-network-cidr=192.168.0.0/16 \  # 匹配 Calico 默认配置--apiserver-advertise-address=<主节点IP> \--control-plane-endpoint=<主节点IP或负载均衡地址># 成功后按提示操作
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config# 安装网络插件(Calico)
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml

2. 添加工作节点

# 在工作节点执行(使用主节点初始化后生成的命令)
sudo kubeadm join <主节点IP>:6443 \--token <token> \--discovery-token-ca-cert-hash sha256:<hash>

3. 验证集群状态

kubectl get nodes  # 所有节点状态应为 Ready
kubectl cluster-info

三、部署应用示例

1. 创建 Deployment

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.25ports:- containerPort: 80resources:requests:cpu: "100m"memory: "128Mi"limits:cpu: "200m"memory: "256Mi"

2. 创建 Service

# service.yaml
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:type: NodePortselector:app: nginxports:- port: 80targetPort: 80nodePort: 30080

3. 部署应用

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml# 验证
kubectl get pods -o wide
curl http://<节点IP>:30080  # 应返回 Nginx 欢迎页

四、运维管理

1. 资源监控

# 安装 Metrics Server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml# 查看资源使用
kubectl top nodes
kubectl top pods

2. 日志管理

# 查看 Pod 日志
kubectl logs <pod-name> -f  # 实时日志# 安装 EFK 日志系统(生产环境)
kubectl apply -f https://raw.githubusercontent.com/elastic/cloud-on-k8s/main/config/recipes/elasticsearch/elasticsearch.yaml

3. 自动扩缩容

# 设置 Horizontal Pod Autoscaler
kubectl autoscale deployment nginx-deployment --cpu-percent=50 --min=2 --max=5

五、生产级最佳实践

1. 高可用控制平面

• 使用 kubeadm 部署多主节点:

# 第一个主节点初始化后,其他主节点执行:
sudo kubeadm join <负载均衡IP>:6443 --token <token> \--discovery-token-ca-cert-hash sha256:<hash> \--control-plane

2. 持久化存储

# 创建 PersistentVolume(示例使用本地存储)
apiVersion: v1
kind: PersistentVolume
metadata:name: local-pv
spec:capacity:storage: 10GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagelocal:path: /mnt/datanodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- <特定节点主机名>

3. 安全加固

• 启用 RBAC:

# 创建 Role 和 RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: pod-reader
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: read-pods
subjects:
- kind: Username: dev-user
roleRef:kind: Rolename: pod-readerapiGroup: rbac.authorization.k8s.io

• 网络策略:

# 限制 Pod 入站流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: deny-all-ingress
spec:podSelector: {}policyTypes:- Ingress

六、备份与灾难恢复

1. 备份 etcd 数据

# 在主节点执行
sudo ETCDCTL_API=3 etcdctl \--endpoints=https://127.0.0.1:2379 \--cacert=/etc/kubernetes/pki/etcd/ca.crt \--cert=/etc/kubernetes/pki/etcd/server.crt \--key=/etc/kubernetes/pki/etcd/server.key \snapshot save /backup/etcd-snapshot.db

2. 恢复 etcd 数据

# 停止 kube-apiserver 和 etcd
sudo systemctl stop kube-apiserver etcd# 恢复快照
sudo ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-snapshot.db \--data-dir=/var/lib/etcd-restored# 重启服务
sudo systemctl start etcd kube-apiserver

七、常见问题排查

1. Pod 处于 Pending 状态

• 可能原因:

• 资源不足(CPU/内存)。

• 没有可用节点匹配调度规则。

• 解决:

kubectl describe pod <pod-name> | grep Events  # 查看事件
kubectl get nodes -o wide                     # 检查节点资源

2. 服务无法访问

• 可能原因:

• Service 的 selector 与 Pod 标签不匹配。

• 网络策略阻止流量。

• 解决:

kubectl describe service <service-name>  # 检查 Endpoints
kubectl get networkpolicy                # 查看网络策略

通过以上步骤,您可以在 Ubuntu 系统上完成 Kubernetes 集群的部署、应用管理及生产级运维。建议结合监控、日志和备份策略,确保集群的稳定性和可靠性。


http://www.xdnf.cn/news/2867.html

相关文章:

  • KUKA机器人关机时冷启动介绍
  • 得物 小程序 6宫格 分析
  • 达索Abaqus与ANSYS Mechanical有限元分析软件对比研究
  • 缓存分片哈希 vs 一致性哈希:优缺点、区别对比及适用场景(图示版)
  • deepseek海思SD3403边缘计算AI产品系统
  • 制作一款打飞机游戏30:动画系统
  • C++学习之shell高级和正则表达式
  • MySQL事务(transaction)(笔记)
  • node.js 实战——mongoDB 续一
  • MySQL中的分组和多表连接
  • 信息过载(Information Overload):太多的信息导致了信息处理能力的饱和
  • 浏览器自动化工具:Selenium 和 Playwright
  • iOS—仿tableView自定义闹钟列表
  • 多维驱动:负载均衡何以成为现代系统架构的基石
  • AI应用实战:Excel表的操作工具
  • 通过AWS Console连接服务器,简化运维过程
  • Springboot使用登录拦截器LoginInteceptor来做登录认证
  • AI与软件测试的未来:如何利用智能自动化改变测试流程
  • Typescript d.ts 文件作用
  • 《算法笔记》10.5小节——图算法专题->最小生成树 问题 E: Jungle Roads
  • 水平布局组 (Horizontal Layout Group)
  • ​钓鱼网页散播银狐木马,远控后门威胁终端安全
  • 基于卫星遥感监测火情的技术原理解析
  • .NET 平台详解
  • conda相关操作
  • 存储器分类
  • 物联网平台厂商有哪些?2025物联网平台推荐?国内有哪些比较好的物联网平台?
  • 初识Redis · 分布式锁
  • 海外社交App用户留存秘籍:构建高粘性社区的算法与运营实战
  • MATLAB画一把伞