kubernetes基础
大纲
基础概念
集群部署及陈述式命令管理
资源类型及配置清单
Pod资源
Pod控制器
Service资源
存储卷
ConfigMap与Secret资源
StatefulSet控制器
认证、授权及准入控制
网络模型及网络策略
Pod资源调度
CRD、自定义资源、自定义控制器及自定义API server
资源指标与HPA控制器
Helm管理器
高可用Kubernetes
Linux Kernel
名称空间:PID,Mount,Network,UTS(主机名和域名),IPC过程间通信(Internet Process Connection),User,ControlGroups(资源分配)
容器是由linux内核提供的,是内核的一种特性,本来的一个用户空间被扩展为多个用户空间,每个空间都是行之有效的单独运行环境,就像单独使用一个内核,而内核把有限的资源分隔给每个用户空间使用,每个用户空间可以拿来当做一个完整的用户空间,或者只运行一个程序(docker);父进程创建子进程,回收子进程,若子进程未回收,而子父进程结束,此时,子进程成为孤儿进程,回收不回来了,占用资源;而在linux中,init进程是总的父进程,负责所有的子进程管理;这样,一个用户空间若有两个进程,还需要第三个进程来管理可能产生的孤儿进程;一个容器运行一个进程,只有一个进程,此进程崩溃,docker的编排工具k8s会自动迁移;实现可高用,动态扩展,快速创建
程序员如果开发一个程序,需要windows10版,macos版,linux版,unix版等,需要多个版本,多个环境,人力,物力高,而如果程序员面向容器开发,容器运行此程序,只要windows10,macos,linux,unix等支持容器,则只需要开发一种程序(面向容器),而把具体的底层工作都交给容器实现,由容器提供统一标准的接口;这样就可以一次开发,到处运行了;但容器太过底层,需要开发一种统一的工具以便使用
Docker最早采用LXC技术(LinuX Container的简写,LXC是Linux 原生支持的容器技术,可以提供轻量级的虚拟化,可以说 docker 就是基于 LXC 发展起来的,提供 LXC 的高级封装,发展标准的配置方法),而虚拟化技术KVM(Kernel-based Virtual Machine) 基于模块实现,Docker后改为自己研发并开源的runc技术运行容器。docker即是容器的简单实用的一种外壳
当在宿主机启动较多的容器时候,如果都是手动操作会觉得比较麻烦而且容易出错,这个时候推荐使用docker 单机编排工具docker compose,Docker Compose 是docker容器的一种编排服务,docker compose是一个管理多个容器的工具,比如可以解决容器之间的依赖关系,就像启动一个web就必须得先把数据库服务先启动一样,docker compose 完全可以替代docker run启动容器
容器化应用docker的镜像(可以把镜像看做一个模板,由此摸版创建容器),可以通过环境变量来实现不同配置的同一个应用程序,或者通过脚本;配置文件更改,容器会动态加载;通过一个镜像,多个配置文件实现多个环境如开发环境,测试环境,生成环境;如果把配置放在一个配置中心,放在单独的一个服务器,通过一个外壳把不同环境的配置文件注入到镜像当中,docker没有解决,此类容器编排由k8s实现,是一个抽象的外壳,可以实现多个主机节点上的多个容器之间的通信,容器集群等问题;
容器编排
Docker通过“镜像”机制极富创造性地解决了应用程序打包的根本性难题,它推动了容器技术的快速普及及生成应用
容器本身仅提供了托管应用的底层逻辑,而容器编排(Orchestration)才是真正产生价值的位置所在;
容器编排是一个软件,用来控制容器的创建,部署,动态伸缩,容器之间实时迁移,容器暴露服务以提供外部访问,容器的健康性检测,容器的服务发现实现Load balance,管理容器的生命周期管理,容器的Zero-downtime deploys, 存储管理
容器编排系统
kubernetes:服务即平台 PAAS,软件逻辑实现一系列复杂的功能;Kubernetes is an open-source platform for automating deployments,scaling,and operations of application containers across clusters of hosts,providing container-centric infranstructure.
Docker Swarm
Apache Mesos and Marathon
kubernetes的最小调度单元是pod,pod里面可以存在多个容器,每个容器运行一个程序且pod里的容器共享linux的内核6个名称空间
kubernetes是容器编排工具,容器的管理还需要靠容器管理工具,如docker,
Kubernetes Components
Master Components
kube-apiserver
etcd
kube-scheduler
kube-controller-manager
cloud-controller-manager
Node Components
kubelet
kube-proxy 对pod的固定访问和动态创建和注册
Container Runtime
Addons 附加节点,可以提供更加完善的功能
DNS
Web UI(Dashboard)
Contrainer Resource Monitoring
Cluster-level Logging (EFK(Fluented,Elastic Search,kibana))
图共6个,此处是图3-9-26
Kubernetes系统的基本工作逻辑
Kubernetes把应用程序及其周边概念抽象为资源类型,并通过属性赋值的方式实例化为对象,例如Pod资源类型及实例化的各Pod对象等;
用户通过API server提交对象管理请求;请求创建的Pod对象由调度器调度至最佳匹配的Node上,并有kubelet创建和维护;
Kubernetes把施加于资源对象智商的运维操作过程程序化为控制器,例如部署、健康状态监控、版本更新等,并由控制器通过“和解循环(reconcilation)”不间断地监视相关对象的当前状态是否与用户自定义(也称为期望)的状态相吻合,二者不相符时,则启动相关的操作过程让当前状态无限接近期望的状态;
因此,用户应该使用控制器对象创建和管理各类资源对象,包括Pod对象
控制器通过Label Selector挑选拥有符合条件的Label的Pod对象;
控制器对象的管理则由守护进程kube-control