温馨提示×

Linux下Kubernetes如何管理容器

小樊
51
2025-10-14 02:05:26
栏目: 智能运维

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>实时查看日志。

0