以下是 Kubernetes 部署的详细操作指南,涵盖环境准备、部署配置、运维管理及最佳实践,适用于从开发到生产的全流程:
一、环境准备
1. 本地开发环境(可选)
-
安装必要工具:
# 安装 kubectl(Kubernetes 命令行工具) curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl # 安装 Minikube(单节点本地集群) curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube # 启动 Minikube(使用 Docker 驱动) minikube start --driver=docker
-
验证本地集群:
kubectl cluster-info # 查看集群信息 kubectl get nodes # 确认节点状态为 Ready
2. 生产环境
-
云服务快速搭建:
-
自建集群(使用 kubeadm):
# 在所有节点上安装 kubeadm、kubelet、kubectl sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl # 主节点初始化 sudo kubeadm init --pod-network-cidr=10.244.0.0/16 # 工作节点加入集群(根据 init 输出命令执行) kubeadm join <主节点IP>:6443 --token <token> --discovery-token-ca-cert-hash <hash> # 安装网络插件(如 Calico) kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml
二、部署应用
1. 编写 Deployment 文件(deployment.yaml
)
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: your-registry/my-app:v1.0 # 替换为实际镜像
ports:
- containerPort: 80
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "200m"
memory: "256Mi"
env:
- name: ENV_VAR
value: "production"
2. 部署应用
kubectl apply -f deployment.yaml
三、服务暴露
1. 创建 Service(service.yaml
)
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
type: LoadBalancer # 生产环境可用 NodePort 或 Ingress
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
2. 应用 Service
kubectl apply -f service.yaml
3. 获取访问地址
# 获取 LoadBalancer 外部 IP
kubectl get svc my-app-service
# 本地开发环境通过 Minikube 访问
minikube service my-app-service
四、运维与监控
1. 查看资源状态
kubectl get pods -o wide # 查看 Pod 状态和所在节点
kubectl describe pod <pod-name> # 诊断 Pod 问题
kubectl logs <pod-name> # 查看容器日志
2. 自动扩缩容
# 基于 CPU 使用率自动扩缩
kubectl autoscale deployment my-app --cpu-percent=50 --min=2 --max=5
3. 配置管理(ConfigMap & Secret)
# configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
config.properties: |
key1=value1
key2=value2
# secret.yaml(Base64 编码数据)
apiVersion: v1
kind: Secret
metadata:
name: app-secret
type: Opaque
data:
password: YWRtaW4= # echo "admin" | base64
4. 持久化存储(PV & PVC)
# pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /data
# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
五、安全最佳实践
1. RBAC 权限控制:
# role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
2. 镜像安全:
-
使用私有镜像仓库(如 Harbor)。
-
配置
imagePullSecrets
:spec: containers: - name: my-app image: private-registry/my-app:v1.0 imagePullSecrets: - name: regcred # 需提前创建 Secret
3. 网络策略:
# network-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
六、监控与日志
1. 监控工具:
-
Prometheus + Grafana:
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/main/manifests/setup.yaml
-
Metrics Server:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
2. 日志收集:
-
EFK 栈(Elasticsearch + Fluentd + Kibana):
kubectl apply -f https://raw.githubusercontent.com/elastic/cloud-on-k8s/main/config/recipes/elasticsearch/elasticsearch.yaml
七、CI/CD 集成
1. GitHub Actions 示例:
# .github/workflows/deploy.yaml
name: Deploy to Kubernetes
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy to Cluster
run: |
kubectl apply -f deployment.yaml --kubeconfig=${{ secrets.KUBECONFIG }}
八、常见问题排查
1. Pod 处于 Pending 状态:
-
检查资源配额:
kubectl describe node <node-name>
-
确认镜像名称正确且可拉取。
2. 服务无法访问:
-
检查 Service 的
selector
是否匹配 Pod 标签。 -
验证网络策略是否阻止流量。
通过以上步骤,您可以完成从环境搭建到应用部署、监控维护的全流程操作。根据实际需求调整配置,确保安全性和高可用性。