CentOS环境下Kubernetes(K8s)容器管理指南
在CentOS上管理K8s容器前,需先搭建稳定的K8s集群。常用工具为kubeadm,步骤如下:
setenforce 0并修改/etc/selinux/config)、停用防火墙(systemctl stop firewalld && systemctl disable firewalld)、配置Docker使用systemd作为cgroup驱动(编辑/etc/docker/daemon.json添加"exec-opts": ["native.cgroupdriver=systemd"]并重启Docker)。yum install -y kubelet kubeadm kubectl --disable-gpg-check安装核心组件,并启用kubelet服务(systemctl enable kubelet)。kubeadm init --pod-network-cidr=10.244.0.0/16(按提示配置kubectl),完成后将Worker节点加入集群(在Master节点获取kubeadm join命令,在Worker节点执行)。kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml),实现Pod间通信。K8s通过Deployment(无状态应用)或StatefulSet(有状态应用)实现容器编排,推荐使用YAML文件定义应用状态(声明式配置)。
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状态(确保STATUS为Running)。replicas字段(如kubectl scale deployment/nginx-deployment --replicas=5)或直接编辑YAML文件,重新应用即可实现容器数量的动态调整。image字段(如kubectl set image deployment/nginx-deployment nginx=nginx:v2),触发滚动更新(逐步替换旧Pod,确保服务不中断)。使用kubectl exec命令进入运行中的容器(交互式Shell):
kubectl exec -it <pod-name> -- /bin/bash # 如kubectl exec -it nginx-container -- /bin/bash
若需附加到正在运行的容器(如查看应用日志输出),可使用kubectl attach命令。
kubectl get pods(-o wide可显示更多信息,如节点名称)。kubectl describe pod <pod-name>。-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>。删除指定Pod(若Pod由Deployment管理,会自动重建):kubectl delete pod <pod-name>。
批量删除所有Pod(谨慎使用):kubectl delete pods --all。
kubectl top命令(kubectl top pods查看Pod资源使用)。resources.requests(最小资源,如cpu: "100m"、memory: "128Mi")和resources.limits(最大资源,如cpu: "500m"、memory: "512Mi"),避免资源争抢。podAntiAffinity将相关Pod分散到不同节点,提高可用性(如topologyKey: "kubernetes.io/hostname")。vm.swappiness(如设置为10以下),减少内存交换,优化容器性能。trivy、kube-bench),及时修复高风险漏洞。Role定义资源操作权限(如get、list、create),绑定RoleBinding到用户/组(如kubectl create rolebinding <binding-name> --role=<role-name> --user=<user-name> --namespace=<namespace>)。kubectl apply -f network-policy.yaml,内容参考K8s官方文档)。iptables或firewalld)。swapoff -a并修改/etc/fstab),避免影响kubelet性能。ntpdate),确保集群节点时间一致。容器日志是排查问题的关键,常用方法:
kubectl logs nginx-container)。