温馨提示×

如何用Ubuntu管理Kubernetes资源

小樊
55
2025-11-02 17:36:30
栏目: 智能运维

Ubuntu环境下管理Kubernetes资源的完整流程

1. 准备Ubuntu节点环境

在开始管理Kubernetes前,需确保Ubuntu节点(Master/Worker)满足以下基础要求:

  • 系统要求:推荐使用Ubuntu 20.04 LTS及以上版本(内核版本≥4.19);
  • 网络配置:所有节点需配置静态IP,且能通过主机名互相访问(编辑/etc/hosts文件添加节点IP与主机名映射);
  • 系统优化
    • 关闭交换分区(Kubernetes要求):sudo swapoff -a,并注释/etc/fstab中的swap行;
    • 开启IPv4转发:执行cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf,添加net.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1net.ipv4.ip_forward = 1,然后运行sudo sysctl --system生效;
    • 时间同步:安装ntpdate并同步时间:sudo apt install -y ntpdate && sudo ntpdate ntp.aliyun.com

2. 安装Kubernetes核心组件

在Ubuntu上安装kubeletkubeadmkubectl(管理Kubernetes集群的核心工具):

  • 更新系统包:sudo apt update && sudo apt upgrade -y
  • 添加Kubernetes官方仓库:
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
    sudo apt update
    
  • 安装组件并锁定版本(避免自动升级):
    sudo apt install -y kubelet kubeadm kubectl
    sudo apt-mark hold kubelet kubeadm kubectl
    

3. 初始化Master节点

Master节点是集群的控制中心,负责管理节点、Pod调度等核心功能:

  • 关闭Swap(若未提前关闭):sudo swapoff -a
  • 执行初始化命令(指定Pod网络CIDR,如10.244.0.0/16,需与后续网络插件匹配):
    sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    
  • 配置kubectl:将集群配置文件复制到用户目录并设置权限:
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    

4. 部署网络插件

网络插件是Pod间通信的基础,常用Calico(支持网络策略):

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

部署完成后,可通过kubectl get pods -n kube-system查看插件状态(所有Pod应为Running)。

5. 加入Worker节点

Worker节点负责运行应用程序容器,通过kubeadm join命令加入集群(需使用Master初始化时输出的命令):

sudo kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

加入后,Master节点会自动识别Worker节点,可通过kubectl get nodes查看节点状态(需等待Ready)。

6. 使用kubectl管理Kubernetes资源

kubectl是Kubernetes的命令行工具,用于与集群交互,常见操作如下:

6.1 基础资源管理

  • 查看资源
    kubectl get nodes                # 查看集群节点状态
    kubectl get pods -A              # 查看所有命名空间的Pod
    kubectl get deployments -n dev   # 查看指定命名空间的Deployment
    
  • 创建资源
    • 通过YAML文件(推荐,声明式管理):
      kubectl apply -f app-deployment.yaml  # 创建Deployment
      kubectl apply -f app-service.yaml     # 创建Service
      
    • 通过命令行(陈述式管理,适用于简单场景):
      kubectl create deployment nginx --image=nginx --replicas=3 -n dev
      kubectl expose deployment nginx --port=80 --type=NodePort -n dev
      
  • 删除资源
    kubectl delete pod nginx-pod -n dev          # 删除指定Pod
    kubectl delete deployment nginx -n dev       # 删除指定Deployment
    kubectl delete namespace dev                 # 删除命名空间(会连带删除其下所有资源)
    

6.2 高级资源管理

  • 调整Pod资源限制
    • 动态调整(Kubernetes 1.27及以上版本支持):
      kubectl patch pod ubuntu-pod -n dev -p '{"spec":{"containers":[{"name":"ubuntu-container","resources":{"requests":{"memory":"256Mi"},"limits":{"memory":"512Mi"}}}]}}'
      
    • 通过LimitRange设置默认资源请求/限制(避免未配置资源的容器滥用集群):
      apiVersion: v1
      kind: LimitRange
      metadata:
        name: default-limits
        namespace: dev
      spec:
        limits:
        - type: Container
          default:
            requests.cpu: "200m"
            requests.memory: "128Mi"
          defaultRequest:
            requests.cpu: "100m"
            requests.memory: "64Mi"
          max:
            requests.cpu: "1"
            requests.memory: "512Mi"
          min:
            requests.cpu: "50m"
            requests.memory: "32Mi"
      
  • 资源配额管理
    通过ResourceQuota控制命名空间的总资源边界(如CPU、内存总量):
    apiVersion: v1
    kind: ResourceQuota
    metadata:
      name: dev-quota
      namespace: dev
    spec:
      hard:
        requests.cpu: "4"
        requests.memory: "8Gi"
        limits.cpu: "8"
        limits.memory: "16Gi"
    

6.3 监控与调试

  • 查看Pod日志
    kubectl logs <pod-name> -n dev         # 查看Pod的日志
    kubectl logs <pod-name> -n dev -c <container-name>  # 查看指定容器的日志
    
  • 进入Pod容器
    kubectl exec -it <pod-name> -n dev -- /bin/bash  # 进入Pod的交互式Shell
    
  • 查看资源详情
    kubectl describe pod <pod-name> -n dev  # 查看Pod的详细信息(包括事件、容器状态)
    

7. 可视化工具(可选)

  • K9s(TUI工具):轻量级终端界面,支持快速查看节点、Pod、Deployment等资源:
    sudo snap install k9s
    k9s  # 启动工具
    
  • Lens(GUI工具):跨平台桌面应用,支持集群监控、日志分析、资源编辑等功能:
    下载.deb包安装,通过kubectl port-forward或Ingress暴露服务后访问。

8. 监控与维护集群

  • 监控资源使用
    • 安装Metrics Server(轻量级监控,支持kubectl top命令):
      kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
      
    • 使用Prometheus+Grafana(可视化监控):部署Prometheus Operator,导入Grafana Dashboard(如Kubernetes Cluster Monitoring)。
  • 日志管理
    使用EFK(Elasticsearch+Fluentd+Kibana)或Loki+Grafana收集容器日志,分析资源瓶颈(如应用内存泄漏)。
  • 故障排除
    • 使用Kubewatch(事件通知):配置Slack/Email通知,及时获取集群事件;
    • 使用Sonobuoy(集群测试):生成集群状态报告,检查是否符合最佳实践。

通过以上步骤,可在Ubuntu系统上实现Kubernetes集群资源的精细化管控,确保集群稳定运行并提升资源利用率。

0