Kubernetes部署.md 6.8 KB


title: Kubernetes部署 date: 2024-12-28T11:09:57+08:00

lastmod: 2025-12-17T10:55:01+08:00

Kubernetes部署

  1. 创建 Namespace(可选)
  2. 总结:一般步骤
  3. 创建顺序建议:

  ‍

  初始化K8s

kubeadm init

  ‍

  Kubernetes 中的资源管理是分层次的,通常你会按照以下的顺序来规划和配置你的 Kubernetes 环境:

创建 Namespace(可选)

  如果你希望将不同环境或应用隔离开来,通常会创建一个 Namespace(命名空间)。命名空间有助于在同一集群中隔离资源,避免冲突。

  • 命名空间 可以理解为一个逻辑分区,每个命名空间内的资源是隔离的,可以更容易地管理不同环境(如开发、测试、生产等)。

  示例:创建 nginx-namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: nginx-namespace

  创建命名空间:

kubectl apply -f nginx-namespace.yaml

  使用命名空间时,记得在其他资源的 YAML 文件中指定 namespace

  1. 创建 Persistent Volume (PV) 和 Persistent Volume Claim (PVC)
    如果你需要持久化存储(例如数据库、日志等),你需要先创建 PersistentVolume (PV) 来定义存储资源,然后通过 PersistentVolumeClaim (PVC) 请求存储资源。

    • PersistentVolume (PV) 是由集群管理员配置的,代表一个实际的存储资源。
    • PersistentVolumeClaim (PVC) 是用户请求存储的方式,Pod 通过 PVC 来绑定 PV。

示例:创建 PV 和 PVC
nginx-pv.yaml(PersistentVolume)

   apiVersion: v1
   kind: PersistentVolume
   metadata:
     name: nginx-pv
   spec:
     capacity:
       storage: 1Gi
     accessModes:
       - ReadWriteOnce
     hostPath:
       path: /mnt/data  # 本地存储路径(可以替换为 NFS 或云存储)

nginx-pvc.yaml(PersistentVolumeClaim)

   apiVersion: v1
   kind: PersistentVolumeClaim
   metadata:
     name: nginx-pvc
   spec:
     accessModes:
       - ReadWriteOnce
     resources:
       requests:
         storage: 1Gi

创建 PV 和 PVC:

   kubectl apply -f nginx-pv.yaml
   kubectl apply -f nginx-pvc.yaml
  1. 创建 ConfigMap 和 Secret
    如果你有配置文件或敏感信息(如数据库密码、API 密钥),可以使用 ConfigMapSecret 存储这些信息。

    • ConfigMap 存储非敏感配置信息。
    • Secret 存储敏感信息。

示例:创建 ConfigMap
nginx-configmap.yaml

   apiVersion: v1
   kind: ConfigMap
   metadata:
     name: nginx-config
   data:
     nginx.conf: |
       server {
         listen 80;
         server_name localhost;
         location / {
           root /usr/share/nginx/html;
           index index.html index.htm;
         }
       }

创建 ConfigMap:

   kubectl apply -f nginx-configmap.yaml
  1. 创建 Service
    如果你希望让外部能够访问容器,或者在集群内部的服务之间进行通信,你需要创建一个 Service。Service 用于暴露容器的端口并进行负载均衡。
    示例:创建 Service
    nginx-service.yaml

    apiVersion: v1
    kind: Service
    metadata:
     name: nginx-service
    spec:
     selector:
       app: nginx  # 匹配容器标签
     ports:
       - protocol: TCP
         port: 80
         targetPort: 80
     type: LoadBalancer  # 如果是内部访问,可以使用 ClusterIP
    

创建 Service:

   kubectl apply -f nginx-service.yaml
  1. 创建 Deployment
    使用 Deployment 来管理容器。Deployment 确保容器的高可用性和扩缩容能力。你可以在 Deployment 中指定镜像、环境变量、存储、网络等。

    • Deployment 会管理副本数,自动进行滚动更新等操作。

示例:创建 Deployment
nginx-deployment.yaml

   apiVersion: apps/v1
   kind: Deployment
   metadata:
     name: nginx-deployment
     namespace: nginx-namespace  # 指定命名空间
   spec:
     replicas: 3  # 部署 3 个副本
     selector:
       matchLabels:
         app: nginx
     template:
       metadata:
         labels:
           app: nginx
       spec:
         containers:
         - name: nginx
           image: nginx
           ports:
           - containerPort: 80
           volumeMounts:
           - name: nginx-storage
             mountPath: /usr/share/nginx/html  # 挂载存储路径
         volumes:
         - name: nginx-storage
           persistentVolumeClaim:
             claimName: nginx-pvc  # 使用 PVC

创建 Deployment:

   kubectl apply -f nginx-deployment.yaml
  1. 验证和访问

    • 查看所有资源的状态:

      kubectl get all -n nginx-namespace
      
    • 如果使用 LoadBalancer 类型的 Service,并且在云平台上,Kubernetes 会为你分配一个外部 IP 地址,你可以通过该 IP 访问你的应用。

    • 如果使用 NodePort 类型或 kubectl port-forward,可以在本地访问服务。

例如,使用 kubectl port-forward

   kubectl port-forward svc/nginx-service 8080:80 -n nginx-namespace

这样你可以通过浏览器访问 http://localhost:8080 来查看 Nginx 服务。

总结:一般步骤

  1. 命名空间(可选):通过 Namespace 隔离资源。
  2. 持久化存储:通过 PersistentVolume​ 和 PersistentVolumeClaim 为容器提供持久化存储。
  3. 配置文件:使用 ConfigMap​(非敏感配置)和 Secret(敏感数据)来配置容器。
  4. 网络访问:通过 Service​ 来暴露容器,选择适合的暴露方式(如 LoadBalancer​、NodePort)。
  5. 容器管理:使用 Deployment 来创建和管理容器,配置副本数、更新策略、存储挂载等。

创建顺序建议:

  • 第一步:创建 命名空间(如果需要)。
  • 第二步:创建 PersistentVolumePersistentVolumeClaim(如果需要持久化存储)。
  • 第三步:创建 ConfigMapSecret(如果需要配置或敏感信息)。
  • 第四步:创建 Service(暴露容器)。
  • 第五步:创建 Deployment(容器部署)。

  这样就完成了一个基本的 Kubernetes 容器部署,涵盖了存储、网络、配置等方面。如果有其他需求(如高可用、负载均衡、复杂路由等),还可以进一步扩展和配置。