首页主机资讯Linux下Kubernetes如何管理容器

Linux下Kubernetes如何管理容器

时间2025-10-14 12:31:03发布访客分类主机资讯浏览574
导读:Linux下Kubernetes管理容器的核心流程与实践 一、前置准备:安装基础组件 在Linux系统(如Ubuntu、CentOS)上使用Kubernetes管理容器前,需先安装Docker(容器引擎)和Kubernetes核心组件(ku...

Linux下Kubernetes管理容器的核心流程与实践

一、前置准备:安装基础组件

在Linux系统(如Ubuntu、CentOS)上使用Kubernetes管理容器前,需先安装Docker(容器引擎)Kubernetes核心组件(kubelet、kubeadm、kubectl)

  • Docker安装:通过系统包管理器安装Docker(如Ubuntu使用sudo apt install docker.io),并启动服务(sudo systemctl start docker)。需配置Docker使用systemd作为cgroup驱动(编辑/etc/docker/daemon.json添加{ "exec-opts": ["native.cgroupdriver=systemd"]} ),确保与Kubernetes兼容。
  • Kubernetes组件安装:通过包管理器安装kubeletkubeadmkubectl(如Ubuntu使用sudo apt install -y kubelet kubeadm kubectl),并启用kubelet服务(sudo systemctl enable kubelet)。

二、搭建Kubernetes集群

Kubernetes通过集群架构管理容器,需完成Master节点初始化与Worker节点加入:

  • 初始化Master节点:在Master节点运行sudo kubeadm init --pod-network-cidr=192.168.0.0/16--pod-network-cidr指定Pod网络CIDR,需与后续网络插件匹配),初始化完成后,将输出的kubeadm join命令保存(用于Worker节点加入)。
  • 配置kubectl:Master节点初始化后,执行mkdir -p $HOME/.kube创建kubeconfig目录,复制admin配置文件(sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config),并修改权限(sudo chown $(id -u):$(id -g) $HOME/.kube/config),使kubectl能访问集群。
  • 部署网络插件:Kubernetes需要网络插件实现Pod间通信,常用Calicokubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml)或Flannelkubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml),插件安装后需等待网络就绪。
  • 加入Worker节点:在Worker节点运行Master节点输出的kubeadm join命令(如sudo kubeadm join 192.168.1.100:6443 --token < token> --discovery-token-ca-cert-hash < hash> ),将节点加入集群。

三、容器编排与管理:核心命令与YAML配置

Kubernetes通过控制器(如Deployment、StatefulSet)和Pod(容器组)管理容器,以下是常用操作:

  • 使用kubectl命令行管理
    • 部署应用:通过kubectl create deployment命令创建Deployment(如kubectl create deployment nginx --image=nginx:latest),Deployment会自动创建Pod并管理其生命周期。
    • 查看资源状态:使用kubectl get命令查看集群资源(如kubectl get nodes查看节点、kubectl get pods查看Pod、kubectl get deployments查看Deployment)。
    • 扩展应用:通过kubectl scale命令调整Deployment的副本数(如kubectl scale deployment nginx --replicas=3),实现容器横向扩展。
    • 更新应用:使用kubectl set image命令更新Deployment的镜像(如kubectl set image deployment/nginx nginx=nginx:1.25),触发滚动更新(旧Pod逐步替换为新Pod)。
    • 暴露服务:通过kubectl expose命令将Deployment暴露为Service(如kubectl expose deployment nginx --port=80 --type=LoadBalancer),使应用可通过集群IP或外部IP访问。
  • 使用YAML配置文件管理
    更复杂的场景推荐使用YAML文件定义资源(如Deployment、Service),例如一个Nginx Deployment的YAML文件:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx-container
            image: nginx:latest
            ports:
            - containerPort: 80
    
    通过kubectl apply -f < filename> .yaml命令应用配置,kubectl delete -f < filename> .yaml删除资源。

四、容器编排进阶技巧

  • Pod资源管理:在Pod或Deployment的YAML中定义resources.requests(容器所需资源的最小保证)和resources.limits(容器资源使用的最大限制)(如resources: { requests: { cpu: "500m", memory: "512Mi"} , limits: { cpu: "1", memory: "1Gi"} } ),避免资源滥用。
  • 配置与敏感信息管理:使用ConfigMap管理非敏感配置(如应用参数),使用Secret管理敏感信息(如密码、密钥)。例如,创建ConfigMap:kubectl create configmap nginx-config --from-file=nginx.conf,在Deployment中挂载:volumes: [{ name: nginx-config, configMap: { name: nginx-config} } ]
  • 网络策略:通过NetworkPolicy定义Pod间的网络通信规则(如允许同一命名空间下的特定Pod访问),例如:
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-frontend-to-backend
    spec:
      podSelector:
        matchLabels:
          app: backend
      ingress:
      - from:
        - podSelector:
            matchLabels:
              app: frontend
        ports:
        - protocol: TCP
          port: 8080
    
    该策略允许带有app: frontend标签的Pod访问带有app: backend标签的Pod的8080端口。
  • 自动扩展:使用**Horizontal Pod Autoscaler(HPA)**根据CPU或内存使用率自动调整Pod副本数(如kubectl autoscale deployment nginx --cpu-percent=50 --min=1 --max=10),当Pod CPU使用率超过50%时,自动增加副本数(最多10个)。

五、容器生命周期管理

  • 查看容器状态:使用kubectl get pods查看Pod状态(Running表示运行中,Pending表示正在调度,Error表示出错),kubectl describe pod < pod-name> 查看Pod详情(如事件、日志)。
  • 删除容器:使用kubectl delete pod < pod-name> 删除Pod(若Pod由Deployment管理,删除后会自动重建),或kubectl delete deployment < deployment-name> 删除Deployment及关联Pod。
  • 日志查看:使用kubectl logs < pod-name> 查看Pod的容器日志(如kubectl logs nginx-pod-12345),kubectl logs -f < pod-name> 实时查看日志。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Linux下Kubernetes如何管理容器
本文地址: https://pptw.com/jishu/725760.html
Kubernetes如何提升Linux应用效率 Linux系统中Kubernetes如何监控

游客 回复需填写必要信息