温馨提示×

centos k8s部署怎样管理容器

小樊
50
2025-11-01 21:21:51
栏目: 智能运维

CentOS环境下Kubernetes(K8s)容器管理指南

1. 集群部署与基础配置(容器管理前提)

在CentOS上管理K8s容器前,需先搭建稳定的K8s集群。常用工具为kubeadm,步骤如下:

  • 系统准备:关闭SELinux(setenforce 0并修改/etc/selinux/config)、停用防火墙(systemctl stop firewalld && systemctl disable firewalld)、配置Docker使用systemd作为cgroup驱动(编辑/etc/docker/daemon.json添加"exec-opts": ["native.cgroupdriver=systemd"]并重启Docker)。
  • 安装K8s组件:通过yum install -y kubelet kubeadm kubectl --disable-gpg-check安装核心组件,并启用kubelet服务(systemctl enable kubelet)。
  • 初始化Master节点:执行kubeadm init --pod-network-cidr=10.244.0.0/16(按提示配置kubectl),完成后将Worker节点加入集群(在Master节点获取kubeadm join命令,在Worker节点执行)。
  • 安装网络插件:选择Flannel等网络插件(kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml),实现Pod间通信。

2. 容器部署与编排(核心管理手段)

K8s通过Deployment(无状态应用)或StatefulSet(有状态应用)实现容器编排,推荐使用YAML文件定义应用状态(声明式配置)。

  • 创建Deployment:编写deployment.yaml文件(示例:部署3个Nginx Pod),内容如下:
    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
            image: nginx:latest  # 镜像
            ports:
            - containerPort: 80  # 容器端口
    
    执行kubectl apply -f deployment.yaml部署,通过kubectl get pods查看Pod状态(确保STATUSRunning)。
  • 扩缩容操作:修改replicas字段(如kubectl scale deployment/nginx-deployment --replicas=5)或直接编辑YAML文件,重新应用即可实现容器数量的动态调整。
  • 更新容器:修改Deployment的image字段(如kubectl set image deployment/nginx-deployment nginx=nginx:v2),触发滚动更新(逐步替换旧Pod,确保服务不中断)。

3. 容器日常运维操作

3.1 进入容器

使用kubectl exec命令进入运行中的容器(交互式Shell):

kubectl exec -it <pod-name> -- /bin/bash  # 如kubectl exec -it nginx-container -- /bin/bash

若需附加到正在运行的容器(如查看应用日志输出),可使用kubectl attach命令。

3.2 查看容器详情

  • 查看Pod列表及状态:kubectl get pods-o wide可显示更多信息,如节点名称)。
  • 查看Pod详细信息(包括事件、容器状态、重启原因):kubectl describe pod <pod-name>
  • 查看容器日志(单容器Pod无需-c参数):kubectl logs <pod-name>;实时跟踪日志:kubectl logs -f <pod-name>;查看最后100行日志:kubectl logs --tail=100 <pod-name>;查看过去5分钟日志:kubectl logs --since=5m <pod-name>;查看多容器Pod中指定容器的日志:kubectl logs -c <container-name> <pod-name>

3.3 删除容器

删除指定Pod(若Pod由Deployment管理,会自动重建):kubectl delete pod <pod-name>
批量删除所有Pod(谨慎使用):kubectl delete pods --all

4. 容器监控与性能优化

4.1 监控工具

  • Metrics Server:收集CPU、内存等基础指标,支持kubectl top命令(kubectl top pods查看Pod资源使用)。
  • Prometheus+Grafana:Prometheus抓取集群指标(通过kubelet、cAdvisor),Grafana创建仪表盘可视化(如CPU利用率、内存占用趋势)。
  • cAdvisor:内置在Kubelet中,提供容器级别的资源监控数据。
  • kube-state-metrics:暴露Kubernetes资源状态指标(如Pod副本数、Deployment更新状态)。

4.2 性能优化技巧

  • 设置资源请求与限制:在Deployment中定义resources.requests(最小资源,如cpu: "100m"memory: "128Mi")和resources.limits(最大资源,如cpu: "500m"memory: "512Mi"),避免资源争抢。
  • 使用轻量级镜像:用Alpine Linux替代Ubuntu等大型镜像,减少镜像体积和启动时间。
  • 启用Pod反亲和性:通过podAntiAffinity将相关Pod分散到不同节点,提高可用性(如topologyKey: "kubernetes.io/hostname")。
  • 调整内核参数:降低vm.swappiness(如设置为10以下),减少内存交换,优化容器性能。

5. 容器安全管理

5.1 镜像安全

  • 使用可信镜像仓库(如Docker Hub官方镜像),避免使用未知来源的镜像。
  • 定期扫描镜像漏洞(工具如trivykube-bench),及时修复高风险漏洞。

5.2 访问控制

  • 通过**RBAC(基于角色的访问控制)**限制用户权限:创建Role定义资源操作权限(如getlistcreate),绑定RoleBinding到用户/组(如kubectl create rolebinding <binding-name> --role=<role-name> --user=<user-name> --namespace=<namespace>)。

5.3 网络安全

  • 使用NetworkPolicy定义Pod间通信规则(如仅允许同一命名空间的Pod访问),隔离敏感应用(示例:kubectl apply -f network-policy.yaml,内容参考K8s官方文档)。

5.4 系统加固

  • 关闭不必要的端口和服务,配置防火墙(如iptablesfirewalld)。
  • 禁用Swap(swapoff -a并修改/etc/fstab),避免影响kubelet性能。
  • 配置时间同步(ntpdate),确保集群节点时间一致。

6. 日志管理

容器日志是排查问题的关键,常用方法:

  • kubectl logs:查看单个Pod的日志(如kubectl logs nginx-container)。
  • EFK/ELK Stack:对于大规模集群,使用Elasticsearch(存储)、Fluentd(收集)、Kibana(可视化)或Loki+Grafana实现日志集中收集、存储与分析,便于快速定位问题。

0