Kubernetes三剑客实战指南:kubeadm集群搭建、kubelet节点管理与kubectl常用命令大全
·
Kubernetes三剑客实战指南:从集群搭建到高效管理
1. 环境准备与kubeadm集群搭建
在开始Kubernetes之旅前,确保你的机器满足以下基本要求:
- 操作系统:Ubuntu 18.04+/CentOS 7+
- CPU:至少2核
- 内存:至少2GB
- 网络:节点间互通
- 磁盘:至少20GB可用空间
禁用swap是Kubernetes的硬性要求,执行以下命令:
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
安装Docker容器运行时:
sudo apt-get update && sudo apt-get install -y docker.io
sudo systemctl enable docker && sudo systemctl start docker
接下来安装kubeadm、kubelet和kubectl:
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
初始化主节点:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
成功后会显示kubeadm join命令,用于添加工作节点。配置kubectl:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
安装网络插件(以Flannel为例):
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
验证集群状态:
kubectl get nodes
kubectl get pods --all-namespaces
2. kubelet节点管理深度解析
kubelet作为集群中的"节点代理",负责维护Pod生命周期。理解其工作原理对故障排查至关重要。
kubelet核心功能:
- Pod管理:接收API Server指令,创建/删除Pod
- 健康检查:通过liveness/readiness探针监控容器状态
- 资源报告:向API Server上报节点资源使用情况
- 镜像管理:确保容器镜像存在并符合策略
查看kubelet运行状态:
systemctl status kubelet
关键配置文件位置:
| 文件路径 | 作用 |
|---|---|
| /var/lib/kubelet/config.yaml | kubelet主配置文件 |
| /etc/kubernetes/kubelet.conf | 认证配置文件 |
| /var/log/kubelet.log | 日志文件 |
常见问题排查命令:
# 查看kubelet日志
journalctl -u kubelet -f
# 检查证书过期情况
openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text | grep Not
提示:当Pod处于Pending状态时,首先检查kubelet日志中是否有相关错误信息
资源预留配置示例(/var/lib/kubelet/config.yaml):
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
evictionHard:
memory.available: "500Mi"
nodefs.available: "10%"
systemReserved:
cpu: "500m"
memory: "500Mi"
3. kubectl命令实战大全
kubectl是与Kubernetes集群交互的瑞士军刀。掌握高效使用技巧能极大提升工作效率。
3.1 基础资源操作
部署应用:
kubectl create deployment nginx --image=nginx:1.19
kubectl expose deployment nginx --port=80 --type=NodePort
常用查询命令:
# 查看资源简略信息
kubectl get pods,svc,deploy
# 查看详细信息
kubectl describe pod <pod-name>
# 查看日志
kubectl logs -f <pod-name>
# 进入容器
kubectl exec -it <pod-name> -- /bin/bash
3.2 高级技巧
JSONPath查询:
kubectl get pods -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.podIP}{"\n"}{end}'
批量操作:
# 删除所有Evicted状态的Pod
kubectl get pods | grep Evicted | awk '{print $1}' | xargs kubectl delete pod
端口转发:
kubectl port-forward svc/nginx 8080:80
配置管理:
# 差异比较
kubectl diff -f config.yaml
# 编辑资源
kubectl edit deploy nginx
3.3 实用别名配置
在~/.bashrc中添加:
alias k='kubectl'
alias kg='kubectl get'
alias kd='kubectl describe'
alias kl='kubectl logs'
alias kaf='kubectl apply -f'
alias kdf='kubectl delete -f'
4. 生产环境最佳实践
4.1 集群维护
安全升级步骤:
-
升级kubeadm:
apt-get update && apt-get install -y kubeadm=1.22.5-00 kubeadm version -
升级控制平面:
kubeadm upgrade plan kubeadm upgrade apply v1.22.5 -
升级节点:
apt-get update && apt-get install -y kubelet=1.22.5-00 systemctl restart kubelet
备份关键数据:
# 备份etcd
kubectl exec -n kube-system etcd-master -- sh -c 'ETCDCTL_API=3 etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save /var/lib/etcd/etcd-snapshot.db'
4.2 性能调优
kubelet参数优化:
--max-pods=100 # 根据节点规格调整
--kube-api-qps=50 # 提高API调用速率
--kube-api-burst=100
API Server参数:
--max-requests-inflight=1000
--max-mutating-requests-inflight=500
4.3 监控与日志
部署Prometheus监控:
kubectl create namespace monitoring
helm install prometheus stable/prometheus-operator -n monitoring
日志收集方案:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
spec:
template:
spec:
containers:
- name: fluentd
image: fluent/fluentd-kubernetes-daemonset:v1.11.5-debian-elasticsearch7-1.0
env:
- name: FLUENT_ELASTICSEARCH_HOST
value: "elasticsearch"
- name: FLUENT_ELASTICSEARCH_PORT
value: "9200"
5. 常见问题解决方案
节点NotReady状态排查:
- 检查网络插件是否正常运行
- 验证kubelet服务状态
- 查看节点资源是否耗尽
- 检查证书是否过期
Pod创建失败排查流程:
graph TD
A[Pod状态] -->|Pending| B[检查资源配额]
A -->|CrashLoopBackOff| C[查看容器日志]
B --> D[检查kubectl describe pod输出]
C --> E[检查应用配置]
D --> F[检查事件信息]
E --> G[验证容器启动命令]
网络问题诊断:
# 检查DNS解析
kubectl run -it --rm --image=busybox:1.28 test-pod -- nslookup kubernetes.default
# 测试服务连通性
kubectl run -it --rm --image=alpine:3.12 test-pod -- curl http://service-name
存储问题处理:
# 查看PV/PVC状态
kubectl get pv,pvc
# 检查存储类
kubectl get storageclass
# 查看卷挂载详情
kubectl describe pod | grep -A 10 "Mounts"
在实际运维中,遇到节点失联时,我通常会先检查kubelet日志中的证书相关错误,这往往是问题的根源。另外,合理设置资源请求和限制能避免90%以上的OOM问题。
更多推荐
所有评论(0)