一、为什么要学习Kubernetes
- Kubernetes比较热门,得到企业开发、运维等领域的青睐和追捧
- Kubernete在容器编排引擎领域具有压倒性优势,是新兴技术
- 在云计算占主导地位,市场需求大
- 技术提升
二、Kubernetes能做什么
Kubernetes是Google开源的一个容器编排引擎,是构建在Docker技术之的上容器集群管理系统,实现容器化应用提供资源调度,服务发现、高可用管理和弹性伸缩等一整套完整机制。
- 自动化部署
- 系统自愈
- 应用实例副本
- 水平自动扩展
- 服务发现
- 负载均衡
- 自动更新和回滚
三、Kubernetes优点
- 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud);
- 可扩展: 模块化,插件化,可挂载,可组合;
- 自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
四、Kubernetes组成
1)Kubernetes集群由两大部分组成:
- 集群的调度节点(控制平面):Master节点
- 应用程序实际运行的工作节点(数据平面):Node节点
Master节点主要由四个部分组成:apiserver、schedule、controller-manager和etcd
- API Server:负责对外提供RESTful风格的kubernetes API 的服务,它是系统管理指令的统一接口,任何对资源的增删改查都要交给apiserver处理后再交给etcd。
- Schedule:负责调度Pod到合适的Node上(资源调度)
- Controller-manager: 每一个资源都对应一个控制器,而control manager就是负责管理这些控制器的
- Etcd:Etcd是一个高可用的键值存储系统,kubernetes使用它来存储各个资源的状态,从而实现了Restful的API
Node节点主要由二个部分组成:kublet和kube-proxy
- Kublet:Kublet是Master在每个Node节点上面的agent,是Node节点上面最重要的模块,它负责维护和管理该Node上的所有容器,与API交互
- Kube-proxy:Kube-proxy实现了Kubernetes中的服务发现和反向代理功能,Kube-proxy使用Etcd的Watch机制监控集群中Service和Endpoint对象数据的动态变化
五、Kubernetes核心概念
- Namespace
Namespace是对一组资源和对象的抽象集合,不同 Namespace 里的资源是完全隔离的
[root@master01 ~]# kubectl get ns
NAME STATUS AGE
argocd Active 19d
default Active 19d
devops Active 19d
ingress-nginx Active 19d
kube-node-lease Active 19d
kube-public Active 19d
kube-system Active 19d
kubernetes-dashboard Active 19d
nfs-client-provisioner Active 19d
Pod
Pod是Kubernetes 的最小工作单元。每个Pod包含一个或多个容器。Pod 中的容器会作为一个整体被Master调度到一个Node上运行。所有的容器都是在pod中被管理,一个或多个容器放在pod里作为一个管理单元。
Controller 控制器
负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。Kubernetes 提供了多种以下 Controller:Replication Controller(副本控制器)、Node Controller、ResourceQuota Controller、Namespace Controller、Endpoint Controller和Service Controller等
- Deployment、StatefulSet,DaemonSet
Deployment 无状态应用
StatefulSet 有状态应用
DaemonSet 每个node节点
- Service
Kubernetes分配给Service的固定IP是一个虚拟IP,Kubernetes是通过Kube-proxy组件来实现的虚拟IP路由及转发
ConfigMap、Secrets
存放应用程序配置,这些配置信息应该从应用程序镜像中解耦出来,以保证镜像的可移植性以及配置信息不被泄露,这与secret的设计理念有异曲同工之妙,它们的主要区别在于ConfigMap通常不用于存储敏感信息,而只存储简单的文本信息