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个,最好是奇数个,保证高可用性(投票机制)。如果是偶数个,可能会出现脑裂的情况。