kubernetes系列之《基础入门介绍》

一、Kubernetes简介
Kubernetes是Google在2014年6月开源的一个容器集群管理系统,该系统使用Google研发的Golang语言开发。Kubernetes也被叫做k8s,因为k和s之前有8个字母。
k8s原本是Google内部一个叫Borg的容器集群管理系统衍生出来的,Borg已经在Google大规模生产运行十年之久。
k8s主要用于自动化部署、扩展和管理容器应用,它提供了资源调度、部署管理、服务发现、扩容缩容、监控等一整套功能。
Kubernetes的目标是让部署容器化应用简单高效。官网地址:https://www.kubernetes.io
二、Kubernetes主要功能
1、数据卷

在Pod中,容器之前共享数据,可以使用数据卷。这个功能与docker里volume功能相等。

2、应用程序健康检查

检查容器内的服务、进程是否异常;可以设置监控检测策略来保证应用的健壮性。

3、复制应用程序实例

控制维护Pod副本数,保证一个Pod或一组同类的Pod数始终可用。

4、弹性缩容

根据设定的指标(CPU利用率)自动缩放Pod副本数。

5、服务发现

使用环境变量或DOS服务插件保证容器中程序发现Pod入口访问地址。

6、负载均衡

一组Pod副本分配一个私有的集群IP地址,负载均衡转发请求到后端容器。在集群内部,其他Pod可通过这个ClusterIP访问应用。

7、滚动更新

更新服务不中断,异常更新一个Pod,而不是同时删除整个服务。

8、服务编排

通过文件描述部署服务,使得应用程序部署变得更高效。

9、资源监控

Node节点组件继承CAdvisor资源收集工具,可通过Heapster汇总整个集群节点资源数据,然后存储到InfluxDB时序数据库中,再由Grafana展示。

10、提供认证和授权

支持角色访问控制(RBAC)认证授权等策略。

三、基本概念
在k8s中,它的概念非常的多!而且一定要去了解这些概念,知道它的作用是必须的,你需要知道这些概念,才能更好的应用它。

1、Pod

Pod是k8s最小部署单元,一个Pod有一个或多个容器组成,Pod中容器共享存储和网络,在同一个Docker主机上运行。

官网解读:https://www.kubernetes.org.cn/kubernetes-pod

2、Service

Service一个应用服务的抽象,定义了Pod逻辑集合和访问这个Pod集合的策略。

官网解读:https://www.kubernetes.org.cn/kubernetes-services

3、Volume

数据卷,共享Pod中容器使用的数据。

官网解读:https://www.kubernetes.org.cn/kubernetes-volumes

4、Namespace

命名空间将对象逻辑上分配到不同Namespace,可以是不同的项目、用户等分区管理,并设定控制策略,从而实现多租户。

官网解读:https://www.kubernetes.org.cn/%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A%EF%BC%9Anamespace

5、Lable

标签用于区分对象(比如Pod、Service),键/值对存在;每个对象可以有多个标签,通过标签关联对象。

官网解读:https://www.kubernetes.org.cn/kubernetes-labels

四、更高层次的抽象(Controllers)
1、ReplicaSet(RS)

ReplicaSet是下一代复本控制器。

官网解读:https://www.kubernetes.org.cn/replicasets

2、Deployment(无状态应用部署)

Deployment是一个更高层次的API对象,它管理ReplicaSets和Pod,并提供声明式更新等功能。

官方建议使用Department管理ReplicaSets,而不是直接使用ReplicaSets,这就意味着可能永远不需要直接操作ReplicaSet对象。

咱们在实际应用当中,基本上都是去创建一个Deployment,然后由Deployment去创建RS和Pod等。

官网解读:https://www.kubernetes.org.cn/deployment

3、StatefulSet(有状态应用部署)

StatefulSet适合持久性的应用程序,有唯一的网络标识符(IP),持久存储,有序的部署、扩展、删除和滚动更新。

官网解读:https://www.kubernetes.org.cn/statefulset

4、DaemonSet

DaemonSet确保所有(或一些)节点运行同一个Pod。当节点加入Kubernetes集群中,Pod会被调度到该节点上运行,当节点从集群中移除时,DaemonSet的Pod会被删除。删除DaemonSet会清理它所有创建的Pod。

官网解读:https://www.kubernetes.org.cn/daemonset

5、Job

一次性任务,运行完成后Pod销毁,不在重新启动新容器。还可以任务定时运行。

官网解读:https://www.kubernetes.org.cn/job

6、CronJob

定时任务

官网解读: https://www.kubernetes.org.cn/cronjob

五、Kubernetes系统架构拓扑图
官网架构图:
在这里插入图片描述

自己画的图:
在这里插入图片描述
六、组件功能介绍
6.1、Master组件
kube-apiserver
Kubernetes API,集群的统一入口,各组件协调者。以HTTP API提供接口服务,所有对象的增删改查和监听操作都交给API Server处理后再提交给Etcd存储。

kube-controller-manager
处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。

kube-scheduler
根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。

6.2、Node组件
kubelet
kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将每个Pod转换成一组容器。

kube-proxy
在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。

docker或rocket/rkt
容器引擎,k8s可选的容器运行底层支持技术,一般我们都使用docker。

6.3、第三方服务 etcd 分布式键值存储系统。用于保持集群状态数据,比如Pod、Service等对象信息。