前沿
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 调度过程
- 用户创建一个 Deployment(定义应用的描述文件)。
- kube-apiserver 接收到请求并存储到 etcd。
- kube-scheduler 根据节点资源和策略,将 Pod 分配到某个节点。
- 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的 基础理念,后续还要努力连
标签:容器,kube,Kubernetes,节点,学习,nginx,运用,K8S,Pod From: https://www.cnblogs.com/yf-html/p/18644713