Kubernetes(k8s)经典理论与实战

大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!

Kubernetes 概述

Kubernetes(简称 k8s)是一个开源的容器编排平台,旨在自动化容器应用程序的部署、扩展和管理。它解决了在多个容器和主机上管理应用程序的复杂性,使得应用程序可以在不同的环境中高效运行。

Kubernetes 架构

Kubernetes 的核心架构由以下几个主要组件构成:

  1. Master 节点
    Master 节点负责整个集群的管理和控制,主要包含 API Server、Controller Manager、Scheduler 和 etcd。它们共同协调集群的工作,并管理集群状态。

  2. Node 节点
    Node 节点,也称为工作节点,负责运行容器化的应用程序。每个 Node 节点上运行一个 kubelet 进程、一个容器运行时(如 Docker)和一个 kube-proxy 进程。

  3. Pod
    Pod 是 Kubernetes 中最小的可部署单元,可以包含一个或多个容器。容器在同一个 Pod 中共享网络和存储资源。

  4. Service
    Service 提供了稳定的网络访问方式,允许外部流量访问运行在 Pod 中的应用程序,并实现负载均衡。

  5. Deployment
    Deployment 是 Kubernetes 中的一种控制器,用于声明式地管理 Pod 的副本和滚动更新。

Kubernetes 实战:创建和管理 Pod

以下是一个基本的 Kubernetes Pod 配置示例,演示如何定义一个简单的 Pod:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx:latest
    ports:
    - containerPort: 80
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

这个 YAML 文件定义了一个名为 my-pod 的 Pod,包含一个运行 Nginx 的容器。要创建这个 Pod,可以使用以下命令:

kubectl apply -f my-pod.yaml
  • 1.

要查看 Pod 的状态,可以使用:

kubectl get pods
  • 1.

创建 Deployment

Deployment 是管理多个 Pod 副本的标准方式。以下是一个简单的 Deployment 配置示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: nginx:latest
        ports:
        - containerPort: 80
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

这个 YAML 文件创建了一个名为 my-deployment 的 Deployment,管理三个副本的 Pod。使用以下命令创建 Deployment:

kubectl apply -f my-deployment.yaml
  • 1.

要查看 Deployment 状态和 Pod 副本,可以使用:

kubectl get deployments
kubectl get pods
  • 1.
  • 2.

暴露应用

使用 Service 来暴露应用程序,以便可以从外部访问。以下是一个 Service 配置示例,暴露一个运行在 Pod 中的应用:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

这个 YAML 文件创建了一个名为 my-service 的 Service,将流量路由到 app: my-app 的 Pod 上,并暴露在端口 80 上。要创建 Service,可以使用:

kubectl apply -f my-service.yaml
  • 1.

使用 ConfigMap 和 Secret

ConfigMap 和 Secret 用于管理应用程序配置和敏感数据。以下是一个 ConfigMap 示例:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
data:
  config.key: config.value
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

要使用 ConfigMap,可以将其挂载到 Pod 中:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx:latest
    volumeMounts:
    - name: config-volume
      mountPath: /etc/config
  volumes:
  - name: config-volume
    configMap:
      name: my-config
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

以下是一个 Secret 示例:

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  secret.key: c2VjcmV0dmFsdWU=
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

要在 Pod 中使用 Secret,可以将其挂载:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx:latest
    volumeMounts:
    - name: secret-volume
      mountPath: /etc/secret
  volumes:
  - name: secret-volume
    secret:
      secretName: my-secret
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

总结

Kubernetes 提供了强大的容器编排能力,通过定义和管理 Pod、Deployment、Service、ConfigMap 和 Secret 等资源,使得应用程序的部署和管理变得更加高效和可靠。熟练掌握 Kubernetes 的各项功能,可以显著提升应用程序的可维护性和扩展性。

本文著作权归聚娃科技微赚淘客系统开发者团队,转载请注明出处!