Kubernetes 部署的详细操作指南,涵盖环境准备、部署配置、运维管理及最佳实践,适用于从开发到生产的全流程


Kubernetes 部署的详细操作指南,涵盖环境准备、部署配置、运维管理及最佳实践,适用于从开发到生产的全流程_第1张图片


Kubernetes 部署的详细操作指南

  • 一、环境准备
    • 1. 本地开发环境(可选)
    • 2. 生产环境
  • 二、部署应用
    • 1. 编写 Deployment 文件(`deployment.yaml`)
    • 2. 部署应用
  • 三、服务暴露
    • 1. 创建 Service(`service.yaml`)
    • 2. 应用 Service
    • 3. 获取访问地址
  • 四、运维与监控
    • 1. 查看资源状态
    • 2. 自动扩缩容
    • 3. 配置管理(ConfigMap & Secret)
    • 4. 持久化存储(PV & PVC)
  • 五、安全最佳实践
    • 1. RBAC 权限控制:
    • 2. 镜像安全:
    • 3. 网络策略:
  • 六、监控与日志
    • 1. 监控工具:
    • 2. 日志收集:
  • 七、CI/CD 集成
    • 1. GitHub Actions 示例:
  • 八、常见问题排查
    • 1. Pod 处于 Pending 状态:
    • 2. 服务无法访问:


以下是 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. 生产环境

• 云服务快速搭建:

• GKE(Google Kubernetes Engine):

[官方文档](https://cloud.google.com/kubernetes-engine/docs/quickstart)

• EKS(Amazon Elastic Kubernetes Service):

[官方文档](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)

• AKS(Azure Kubernetes Service):

[官方文档](https://docs.microsoft.com/azure/aks/kubernetes-walkthrough)

• 自建集群(使用 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

 ```yaml
 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:

 ```bash
 kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/main/manifests/setup.yaml
 ```

• Metrics Server:

 ```bash
 kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
 ```

2. 日志收集:

• EFK 栈(Elasticsearch + Fluentd + Kibana):

 ```bash
 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

• 确认镜像名称正确且可拉取。

2. 服务无法访问:

• 检查 Service 的 selector 是否匹配 Pod 标签。

• 验证网络策略是否阻止流量。


通过以上步骤,您可以完成从环境搭建到应用部署、监控维护的全流程操作。根据实际需求调整配置,确保安全性和高可用性。


你可能感兴趣的:(容器,云原生,Kubernetes,kubernetes,云原生,容器)