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


在这里插入图片描述



以下是 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 标签。

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


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独隅

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值