Kubernetes 集群安装和操作指南

Kubernetes 集群安装和操作指南

1. 集群安装步骤

1.1 创建 kind 配置文件

# kind-cluster-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: k8s-cluster
nodes:
# 1 master node
- role: control-plane
  image: kindest/node:v1.29.4
# 4 worker nodes
- role: worker
  image: kindest/node:v1.29.4
- role: worker
  image: kindest/node:v1.29.4
- role: worker
  image: kindest/node:v1.29.4
- role: worker
  image: kindest/node:v1.29.4

1.2 创建集群

kind create cluster --config kind-cluster-config.yaml

1.3 验证集群状态

kubectl get nodes
kubectl cluster-info

2. Worker 节点角色设置

2.1 为 Worker 节点添加标签

# 为不同的 worker 节点设置不同的角色标签
kubectl label node k8s-cluster-worker node-role.kubernetes.io/worker=worker
kubectl label node k8s-cluster-worker2 node-role.kubernetes.io/worker=worker
kubectl label node k8s-cluster-worker3 node-role.kubernetes.io/worker=worker
kubectl label node k8s-cluster-worker4 node-role.kubernetes.io/worker=worker

# 或者设置特定的角色
kubectl label node k8s-cluster-worker node-role.kubernetes.io/compute=compute
kubectl label node k8s-cluster-worker2 node-role.kubernetes.io/storage=storage
kubectl label node k8s-cluster-worker3 node-role.kubernetes.io/database=database
kubectl label node k8s-cluster-worker4 node-role.kubernetes.io/web=web

2.2 添加节点污点(Taints)

# 为特定节点添加污点,确保只有特定的 Pod 可以调度到该节点
kubectl taint nodes k8s-cluster-worker2 storage=true:NoSchedule
kubectl taint nodes k8s-cluster-worker3 database=true:NoSchedule

2.3 验证节点标签和污点

kubectl get nodes --show-labels
kubectl describe node k8s-cluster-worker

3. 常用集群操作

3.1 节点管理

# 查看所有节点
kubectl get nodes -o wide

# 查看节点详细信息
kubectl describe node <node-name>

# 查看节点资源使用情况
kubectl top nodes

# 驱逐节点(维护模式)
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data

# 恢复节点
kubectl uncordon <node-name>

# 标记节点为不可调度
kubectl cordon <node-name>

3.2 Pod 管理

# 查看所有 Pod
kubectl get pods --all-namespaces

# 创建测试 Pod
kubectl run test-pod --image=nginx --restart=Never

# 查看 Pod 详细信息
kubectl describe pod <pod-name>

# 查看 Pod 日志
kubectl logs <pod-name>

# 进入 Pod 容器
kubectl exec -it <pod-name> -- /bin/bash

# 删除 Pod
kubectl delete pod <pod-name>

3.3 服务管理

# 创建服务
kubectl expose pod test-pod --port=80 --target-port=80 --type=NodePort

# 查看服务
kubectl get services

# 查看服务详细信息
kubectl describe service <service-name>

# 删除服务
kubectl delete service <service-name>

3.4 部署管理

# 创建部署
kubectl create deployment nginx-deployment --image=nginx --replicas=3

# 查看部署
kubectl get deployments

# 扩缩容部署
kubectl scale deployment nginx-deployment --replicas=5

# 更新部署镜像
kubectl set image deployment/nginx-deployment nginx=nginx:1.21

# 查看部署历史
kubectl rollout history deployment/nginx-deployment

# 回滚部署
kubectl rollout undo deployment/nginx-deployment

# 删除部署
kubectl delete deployment nginx-deployment

3.5 命名空间管理

# 创建命名空间
kubectl create namespace development

# 查看命名空间
kubectl get namespaces

# 在特定命名空间中操作
kubectl get pods -n development

# 设置默认命名空间
kubectl config set-context --current --namespace=development

# 删除命名空间
kubectl delete namespace development

3.6 配置管理

# 创建 ConfigMap
kubectl create configmap app-config --from-literal=key1=value1 --from-literal=key2=value2

# 创建 Secret
kubectl create secret generic app-secret --from-literal=username=admin --from-literal=password=secret

# 查看配置
kubectl get configmaps
kubectl get secrets

# 查看配置详情
kubectl describe configmap app-config
kubectl describe secret app-secret

3.7 资源监控

# 查看集群资源使用情况
kubectl top nodes
kubectl top pods

# 查看集群事件
kubectl get events --sort-by=.metadata.creationTimestamp

# 查看集群组件状态
kubectl get componentstatuses

4. 集群维护操作

4.1 备份和恢复

# 备份 etcd(对于 kind 集群,这通常不需要)
# 导出资源配置
kubectl get all --all-namespaces -o yaml > cluster-backup.yaml

4.2 清理操作

# 清理未使用的资源
kubectl delete pods --field-selector=status.phase=Succeeded
kubectl delete pods --field-selector=status.phase=Failed

# 强制删除卡住的资源
kubectl delete pod <pod-name> --force --grace-period=0

4.3 集群删除

# 删除 kind 集群
kind delete cluster --name k8s-cluster

# 查看所有 kind 集群
kind get clusters

5. 故障排查

5.1 常用排查命令

# 查看节点状态
kubectl get nodes
kubectl describe node <node-name>

# 查看 Pod 状态
kubectl get pods --all-namespaces
kubectl describe pod <pod-name>
kubectl logs <pod-name>

# 查看集群事件
kubectl get events --sort-by=.metadata.creationTimestamp

# 查看系统 Pod
kubectl get pods -n kube-system

5.2 网络排查

# 测试 Pod 间网络连通性
kubectl run test-pod --image=busybox --rm -it --restart=Never -- /bin/sh

# 在容器内测试网络
nslookup kubernetes.default.svc.cluster.local
ping <other-pod-ip>

6. 有用的别名设置

# 添加到 ~/.bashrc 或 ~/.zshrc
alias k='kubectl'
alias kgp='kubectl get pods'
alias kgs='kubectl get services'
alias kgn='kubectl get nodes'
alias kdp='kubectl describe pod'
alias kds='kubectl describe service'
alias kdn='kubectl describe node'

这个指南涵盖了从集群创建到日常维护的所有常用操作。你可以根据需要参考相应的章节。

posted @ 2025-08-26 19:12  春水鸿鹄  阅读(10)  评论(0)    收藏  举报