在CentOS上部署Kubernetes集群是容器管理的前提,常用工具为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)。随后安装kubelet、kubeadm、kubectl(通过yum install -y kubelet kubeadm kubectl --disable-gpg-check),并初始化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)。
容器部署通过Deployment(无状态应用)或StatefulSet(有状态应用)实现。以Deployment为例,创建deployment.yaml文件,定义应用名称、副本数、容器镜像及端口(如Nginx示例):
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命令。
容器日志查看主要通过kubectl logs命令,常用参数包括:
kubectl logs <pod-name>:查看指定Pod的日志(单容器Pod无需-c参数);kubectl logs -f <pod-name>:实时跟踪日志输出(类似tail -f);kubectl logs --tail=100 <pod-name>:查看最后100行日志;kubectl logs --since=5m <pod-name>:查看过去5分钟的日志;kubectl logs -c <container-name> <pod-name>:查看多容器Pod中指定容器的日志。对于大规模集群,建议使用EFK Stack(Elasticsearch+Fluentd+Kibana)或Loki+Grafana实现日志集中收集、存储与可视化,便于快速定位问题。
容器监控需覆盖资源使用(CPU、内存、网络)和应用状态(Pod健康、服务可用性),常用工具组合为:
kubectl top命令(kubectl top pods查看Pod资源使用);kubelet、cAdvisor),Grafana创建仪表盘可视化(如CPU利用率、内存占用趋势);性能优化技巧:
resources.requests定义最小资源,resources.limits定义最大资源),避免资源争抢;podAntiAffinity),将相关Pod分散到不同节点,提高可用性;vm.swappiness降低到10以下),优化容器性能。kubectl exec -it <pod-name> -- /bin/bash进入容器内部(交互式Shell),或kubectl attach <pod-name>附加到正在运行的容器(如查看应用日志输出);kubectl describe pod <pod-name>查看Pod的事件、状态、容器信息(如重启原因);kubectl delete pod <pod-name>删除指定Pod(若Pod由Deployment管理,会自动重建);image字段(如kubectl set image deployment/nginx-deployment nginx=nginx:v2),触发滚动更新(逐步替换旧Pod)。trivy、kube-bench);Role定义资源操作权限,绑定RoleBinding到用户/组);ntpdate),确保集群环境安全。