K8s-01: Kubernetes Overview
概述
分布式资源管理器发展历程:
apache mesos -> docker swarm -> kubernetes
什么是 kubernetes
kubernetes 是 google 开源的容器集群管理系统,是 google 内部 Borg 系统的开源版本。
特性
自动装箱
自动修复
弹性伸缩(水平扩展)
负载均衡
滚动更新
版本回退
密钥和配置管理
存储编排
批处理执行
架构
架构图
组件
Master
API Server: 提供 http restful 接口,供客户端和其他组件调用,是 kubernetes 的入口。
Scheduler: 负责资源调度,根据资源情况和调度策略,将 pod 调度到合适的 node 上。
controller manager: 负责集群资源的管理,如 node、pod、rc、service 等。
etcd: 分布式键值存储,保存了整个集群的状态和持久化信息。具有高可用性,可以通过部署多个 etcd 实例来实现。
Node
kubelet: 负责维护容器的生命周期,同时与 master 节点通信,将 node 上的信息汇报给 master,如 node 上运行的 pod、node 的状态等。
kube-proxy: 写入 iptables 规则,负责为 pod 提供 cluster 内部的服务发现和负载均衡。
docker: 负责容器的创建、启停等任务。
插件
coredns: 负责为 pod 提供 dns 服务。
dashboard: 提供 web 界面,用于集群的管理。
ingress controller: 负责集群外部的访问,如将外部的请求转发到集群内部的 pod。
fedration: 负责多集群的管理。
prometheus: 提供监控服务。
elk(elasticsearch、logstash、kibana): 提供日志服务。
核心概念
Pod
Pod:pod 是 kubernetes 的最小调度单位,是一组容器的集合,pod 中的容器共享网络和存储。生命周期短暂,随时可能被销毁,因此 pod 中的容器不应该存储持久化数据。pause 容器是 pod 中的第一个容器,负责为 pod 中的其他容器提供网络和存储。
Controller:pod 的控制器,用于管理 pod 的生命周期,如创建 pod、更新 pod、删除 pod 等。常见的控制器有:Replication Controller、Replica Set、Deployment、StatefulSet、DaemonSet、Job、CronJob。
Service
服务,用于定义一组 pod(比如一组 nginx pod)的访问规则。服务分为两种类型:
- ClusterIP: 仅在集群内部可以访问。
- NodePort: 在集群内部和集群外部都可以访问。
高可用集群
架构
master 中新增组件
keepalived: 用于实现虚拟 ip,检查 master 状态,保证 master 节点的高可用性。
haproxy: 用于实现负载均衡,将请求转发到 master 节点。
容器交付流程
开发阶段:开发人员在本地开发环境中编写代码,本地测试,编写 Dockerfile。
CI/CD 阶段:开发人员将代码提交到 git 仓库,触发 CI/CD 流程,将代码打包成镜像,推送到镜像仓库。
部署阶段:运维人员在 kubernetes 集群中部署镜像,创建 pod、service,ingress 等。
运维阶段:运维人员监控集群状态,对集群进行扩容、升级等操作。
K8S 项目部署流程
制作镜像 -> 推送镜像 -> 部署镜像(Deployment) -> 暴露服务(Service) -> 访问服务(Ingress)-> 集群监控(Prometheus)-> 集群日志(ELK)
Tips
- 集群数量:大于等于 3 个,最好是奇数个,保证高可用性(投票机制)。如果是偶数个,可能会出现脑裂的情况。