K8S 学习和运用

前沿

Kubernetes 的核心概念

1. 容器编排的意义

Kubernetes 解决了以下问题:

  • 容器的运行管理:需要管理多个容器实例,保证它们在多个服务器上稳定运行。
  • 服务发现与负载均衡:让不同的服务可以找到彼此,并在负载较高时均衡分配流量。
  • 自动扩展:根据流量或资源使用情况动态扩展或缩减容器实例。
  • 故障自愈:如果某个容器或服务器故障,Kubernetes 能自动恢复。
  • 持续部署:方便应用升级并支持无缝回滚。

2. Kubernetes 的基本概念

(1) 集群(Cluster)

  • 一个 Kubernetes 集群由多个服务器(节点)组成。
  • 主节点 (Master Node):负责控制和管理整个集群。
  • 工作节点 (Worker Node):负责运行容器。

(2) Pod

  • Pod 是 Kubernetes 中最小的部署单元,表示运行中的一组容器。
  • 每个 Pod 通常包含一个容器,但也可以包含多个紧密相关的容器。

(3) 节点(Node)

  • Node 是运行 Pod 的实际服务器(虚拟机或物理机)。
  • 每个 Node 上都会运行一个 kubelet 进程,负责与主节点通信。

(4) Service

  • Service 是对外暴露的访问入口,负责将流量分发到一组 Pod。
  • 类型
    • ClusterIP:默认类型,仅供集群内部访问。
    • NodePort:通过每个节点的固定端口暴露服务。
    • LoadBalancer:通过云服务商的负载均衡器暴露服务。

(5) Ingress

  • Ingress 是一种高级路由规则,可以通过域名或 URL 路由流量到服务。

(6) Volume

  • 用于解决容器存储的临时性问题。即使容器重启,数据也可以保留。

(7) ConfigMap 和 Secret

  • ConfigMap:用于管理非敏感的配置信息(如环境变量)。
  • Secret:用于管理敏感信息(如密码、密钥)。

3. Kubernetes 的核心组件

(1) 主节点组件
etcd:分布式键值存储,保存集群的所有状态数据。
kube-apiserver:Kubernetes 的 RESTful API 服务,处理用户请求。
kube-scheduler:调度器,负责将 Pod 分配到合适的节点。
kube-controller-manager:控制器管理组件,处理集群的自动化任务(如副本管理、节点状态监控)。
(2) 工作节点组件
kubelet:运行在每个节点上,负责管理 Pod 和容器。
kube-proxy:负责网络通信,确保 Pod 和 Service 的流量能正确转发。
容器运行时:如 Docker、containerd,用于运行容器。
(3) 插件
CNI(Container Network Interface)插件:负责网络管理(如 Flannel、Calico)。
存储插件:如 NFS、Ceph,用于支持持久化存储。

二、Kubernetes 的工作原理

1. 集群通信架构

  • 用户通过 kubectl 或 API 发送请求到 kube-apiserver
  • kube-apiserver 验证请求并写入 etcd 数据存储。
  • 调度器和控制器从 etcd 获取任务信息,并将指令下发到工作节点。

2. Pod 调度过程

  1. 用户创建一个 Deployment(定义应用的描述文件)。
  2. kube-apiserver 接收到请求并存储到 etcd。
  3. kube-scheduler 根据节点资源和策略,将 Pod 分配到某个节点。
  4. kubelet 在该节点上创建 Pod 并运行容器。

3. Service 的流量转发

  • kube-proxy 监听 Service 的变更,并将流量转发到正确的 Pod。
  • 使用 DNS 服务(如 CoreDNS)实现服务发现

 

三、Kubernetes 的实际使用

1. 部署一个简单的应用

Deployment 配置

使用 YAML 文件定义一个 Nginx 应用:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80

运行部署命令:

kubectl apply -f nginx-deployment.yaml

Service 配置

为 Nginx 创建一个暴露端口的服务:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: NodePort

运行部署命令:

kubectl apply -f nginx-service.yaml

2. Kubernetes 的常见操作

kubectl get pods            # 查看所有 Pod
kubectl get nodes           # 查看所有节点
kubectl get services        # 查看所有服务
kubectl describe pod <pod-name>  # 查看某个 Pod 的详细信息

查看日志

kubectl logs <pod-name>    # 查看 Pod 的日志

删除资源

kubectl delete -f nginx-deployment.yaml

 

 

然后都是 只是简单的入门K8s的 基础理念,后续还要努力连

 

posted @ 2024-12-31 19:58  -鹿-  阅读(43)  评论(0)    收藏  举报