1. Kubernetes基础概念解析Kubernetes简称k8s作为当前最主流的容器编排系统已经成为云原生时代的基石技术。对于初学者而言掌握其核心概念是后续深入学习的必经之路。我们先从最基础的组件开始拆解1.1 核心架构组件Master节点集群的大脑包含API Server唯一入口、Scheduler调度决策、Controller Manager状态维护和etcd分布式存储四大核心组件。实际部署中通常采用多Master高可用架构通过负载均衡对外提供服务。Node节点工作负载的实际运行环境包含kubelet节点代理、kube-proxy网络代理和容器运行时如Docker、containerd三大必备组件。生产环境建议每个Node配置不少于4核8G资源。Pod最小调度单元本质是一组共享网络和存储空间的容器集合。例如一个Web应用Pod可能包含主业务容器和日志收集sidecar容器。经验提示etcd对磁盘IOPS要求极高建议使用SSD并单独部署避免与其他组件争抢资源。1.2 关键API对象解析# 典型Deployment配置示例 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:1.19 ports: - containerPort: 80Deployment声明式更新利器通过ReplicaSet实现滚动更新和回滚。上述配置中replicas:3确保始终有3个Pod副本运行。Service定义Pod访问策略的抽象层支持ClusterIP集群内访问、NodePort节点端口暴露和LoadBalancer云厂商负载均衡集成三种类型。ConfigMap Secret配置与敏感信息管理方案。前者存储明文配置如nginx.conf后者存储加密数据如TLS证书均支持热加载。2. 集群初始化深度实践2.1 环境准备要点硬件要求Master节点2核4G起步生产环境建议4核8G以上Node节点根据工作负载调整建议4核8G起步网络节点间延迟1ms带宽≥1Gbps系统配置检查清单关闭swapswapoff -a并注释/etc/fstab中的swap行设置正确的hostnamehostnamectl set-hostname k8s-master01时间同步配置chrony或ntpd保证时间误差100ms内核参数调整cat /etc/sysctl.d/k8s.conf EOF net.ipv4.ip_forward 1 net.bridge.bridge-nf-call-iptables 1 EOF sysctl --system2.2 使用kubeadm初始化集群# 在所有节点执行 apt-get update apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - cat EOF /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF apt-get update apt-get install -y kubelet kubeadm kubectl apt-mark hold kubelet kubeadm kubectl # 仅在Master执行 kubeadm init \ --apiserver-advertise-address192.168.1.100 \ --pod-network-cidr10.244.0.0/16 \ --image-repository registry.aliyuncs.com/google_containers # 配置kubectl mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config # 安装网络插件以flannel为例 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml关键参数解析--pod-network-cidr必须与后续安装的CNI插件网段匹配--image-repository国内环境建议使用阿里云镜像源flannel的yaml可能需要根据k8s版本调整最新版本见官方GitHub2.3 节点加入与验证# 在Master获取join命令 kubeadm token create --print-join-command # 在Node节点执行输出结果示例 kubeadm join 192.168.1.100:6443 \ --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:1234...cdef # 验证集群状态 kubectl get nodes -o wide kubectl get pods -n kube-system预期正常状态所有节点STATUS为Readykube-system命名空间下CoreDNS、flannel等组件均为Running3. 高频问题排查指南3.1 初始化阶段典型问题故障现象排查命令解决方案kubelet不断重启journalctl -u kubelet -f检查docker/containerd是否运行cgroup驱动是否一致API Server无法访问curl -k https://localhost:6443确认防火墙关闭6443端口监听正常Pod网络不通kubectl describe pod pod-name检查CNI插件配置确认node间路由可达3.2 证书相关问题处理# 检查证书过期时间 openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep Not # 手动更新证书kubeadm 1.15 kubeadm alpha certs renew all systemctl restart kubelet证书过期常见表现kubectl执行命令报x509: certificate has expired or is not yet validkubelet日志出现Failed to renew certificate错误3.3 资源清理与重置# 彻底重置节点危险操作 kubeadm reset -f iptables -F iptables -t nat -F ipvsadm --clear rm -rf /etc/cni/net.d /etc/kubernetes $HOME/.kube重要提醒reset操作会删除所有k8s配置和容器仅应在测试环境或确定需要重建时使用4. 生产环境优化建议4.1 高可用部署方案Stacked etcd拓扑适合中小规模集群3个Master节点同时运行etcd和control plane组件需要配置负载均衡器指向多个Master的6443端口外部etcd集群适合大规模生产环境独立部署3-5个etcd节点配置--etcd-servershttps://etcd1:2379,https://etcd2:23794.2 关键参数调优# kubelet配置示例/var/lib/kubelet/config.yaml apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration maxPods: 150 # 根据节点资源调整 kubeReserved: cpu: 1 memory: 1Gi systemReserved: cpu: 0.5 memory: 512Mi evictionHard: memory.available: 200Mi nodefs.available: 10%4.3 监控与日志方案监控体系Prometheus Operator自动发现监控目标kube-state-metrics集群状态指标导出Node Exporter节点资源监控日志收集EFK StackElasticsearchFluentdKibanaLoki轻量级日志聚合方案# 快速部署metrics-server kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml # 添加--kubelet-insecure-tls参数仅测试环境 kubectl edit deploy -n kube-system metrics-server
Kubernetes核心概念与集群部署实践指南
1. Kubernetes基础概念解析Kubernetes简称k8s作为当前最主流的容器编排系统已经成为云原生时代的基石技术。对于初学者而言掌握其核心概念是后续深入学习的必经之路。我们先从最基础的组件开始拆解1.1 核心架构组件Master节点集群的大脑包含API Server唯一入口、Scheduler调度决策、Controller Manager状态维护和etcd分布式存储四大核心组件。实际部署中通常采用多Master高可用架构通过负载均衡对外提供服务。Node节点工作负载的实际运行环境包含kubelet节点代理、kube-proxy网络代理和容器运行时如Docker、containerd三大必备组件。生产环境建议每个Node配置不少于4核8G资源。Pod最小调度单元本质是一组共享网络和存储空间的容器集合。例如一个Web应用Pod可能包含主业务容器和日志收集sidecar容器。经验提示etcd对磁盘IOPS要求极高建议使用SSD并单独部署避免与其他组件争抢资源。1.2 关键API对象解析# 典型Deployment配置示例 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:1.19 ports: - containerPort: 80Deployment声明式更新利器通过ReplicaSet实现滚动更新和回滚。上述配置中replicas:3确保始终有3个Pod副本运行。Service定义Pod访问策略的抽象层支持ClusterIP集群内访问、NodePort节点端口暴露和LoadBalancer云厂商负载均衡集成三种类型。ConfigMap Secret配置与敏感信息管理方案。前者存储明文配置如nginx.conf后者存储加密数据如TLS证书均支持热加载。2. 集群初始化深度实践2.1 环境准备要点硬件要求Master节点2核4G起步生产环境建议4核8G以上Node节点根据工作负载调整建议4核8G起步网络节点间延迟1ms带宽≥1Gbps系统配置检查清单关闭swapswapoff -a并注释/etc/fstab中的swap行设置正确的hostnamehostnamectl set-hostname k8s-master01时间同步配置chrony或ntpd保证时间误差100ms内核参数调整cat /etc/sysctl.d/k8s.conf EOF net.ipv4.ip_forward 1 net.bridge.bridge-nf-call-iptables 1 EOF sysctl --system2.2 使用kubeadm初始化集群# 在所有节点执行 apt-get update apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - cat EOF /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF apt-get update apt-get install -y kubelet kubeadm kubectl apt-mark hold kubelet kubeadm kubectl # 仅在Master执行 kubeadm init \ --apiserver-advertise-address192.168.1.100 \ --pod-network-cidr10.244.0.0/16 \ --image-repository registry.aliyuncs.com/google_containers # 配置kubectl mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config # 安装网络插件以flannel为例 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml关键参数解析--pod-network-cidr必须与后续安装的CNI插件网段匹配--image-repository国内环境建议使用阿里云镜像源flannel的yaml可能需要根据k8s版本调整最新版本见官方GitHub2.3 节点加入与验证# 在Master获取join命令 kubeadm token create --print-join-command # 在Node节点执行输出结果示例 kubeadm join 192.168.1.100:6443 \ --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:1234...cdef # 验证集群状态 kubectl get nodes -o wide kubectl get pods -n kube-system预期正常状态所有节点STATUS为Readykube-system命名空间下CoreDNS、flannel等组件均为Running3. 高频问题排查指南3.1 初始化阶段典型问题故障现象排查命令解决方案kubelet不断重启journalctl -u kubelet -f检查docker/containerd是否运行cgroup驱动是否一致API Server无法访问curl -k https://localhost:6443确认防火墙关闭6443端口监听正常Pod网络不通kubectl describe pod pod-name检查CNI插件配置确认node间路由可达3.2 证书相关问题处理# 检查证书过期时间 openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep Not # 手动更新证书kubeadm 1.15 kubeadm alpha certs renew all systemctl restart kubelet证书过期常见表现kubectl执行命令报x509: certificate has expired or is not yet validkubelet日志出现Failed to renew certificate错误3.3 资源清理与重置# 彻底重置节点危险操作 kubeadm reset -f iptables -F iptables -t nat -F ipvsadm --clear rm -rf /etc/cni/net.d /etc/kubernetes $HOME/.kube重要提醒reset操作会删除所有k8s配置和容器仅应在测试环境或确定需要重建时使用4. 生产环境优化建议4.1 高可用部署方案Stacked etcd拓扑适合中小规模集群3个Master节点同时运行etcd和control plane组件需要配置负载均衡器指向多个Master的6443端口外部etcd集群适合大规模生产环境独立部署3-5个etcd节点配置--etcd-servershttps://etcd1:2379,https://etcd2:23794.2 关键参数调优# kubelet配置示例/var/lib/kubelet/config.yaml apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration maxPods: 150 # 根据节点资源调整 kubeReserved: cpu: 1 memory: 1Gi systemReserved: cpu: 0.5 memory: 512Mi evictionHard: memory.available: 200Mi nodefs.available: 10%4.3 监控与日志方案监控体系Prometheus Operator自动发现监控目标kube-state-metrics集群状态指标导出Node Exporter节点资源监控日志收集EFK StackElasticsearchFluentdKibanaLoki轻量级日志聚合方案# 快速部署metrics-server kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml # 添加--kubelet-insecure-tls参数仅测试环境 kubectl edit deploy -n kube-system metrics-server