
#云原生征文#Kubernetes基础知识 原创
Table of Contents
Kubernetes基础知识
kubernetes整体分为控制平面组件和节点组件
节点组件有kubelet,kube-proxy和容器运行时
容器运行时指的是负责运行容器的软件比如docker,kube-proxy负责网络代理,kubelet用来管理Kubernetes创建的容器,保证容器运行状态良好
控制平面节点有API Server,这个是访问的入口,调度器主要负责调度pod运行到工作节点中,控制器负责管理集群状态,etcd是存储服务,保存集群数据,而pod就是一个虚拟主机或者物理主机,里面运行着各种容器,通过共享存储卷实现容器间的数据共享,当pod出现错误的时候通过控制器来管理pod
Kubernetes至少有一个主控节点和三个工作节点,主控节点中有控制平面的组件,工作节点中有节点组件
Kubernetes提供了各种各样的控制器来管理这些pod,下面介绍一下Kubernetes的控制器
ConfigMap 配置表
这里定义name为app-config的ConfigMap,以key-value的形式存储
这个ConfigMap配置的是服务的端口号和服务名,名为app-config,我们看一下怎么使用这个配置表
这里的Deployment定义中configMap指定app-config,这个文件存储在了/etc/config中
控制器
ReplicationController
ReplicationController保证一定数量的pod正常运行,当比指定pod数量少的时候就添加pod,当多于pod数量的时候就删除节点
ReplicaSet副本集
ReplicaSet相当于ReplicationController的升级版,副本集模式也是创建指定数量的副本,它和ReplicationController的区别在于它的支持基于集合的标签选择算符,配置文件如下:
配置文件中replicas变量指定的就是副本数量,spec:containers:中指定pod节点,但是一般我们不使用ReplicaSet因为它没有更新的功能,使用Deployment来替代和管理ReplicaSet
创建ReplicaSet命令
查看创建的pod
所有控制器的yaml文件的运行都是这样的
Deployment部署
Deployment最大的特点就是可以对副本集的pod进行滚动更新,滚动更新能够保证服务的不中断,当创建一定数量后再删除旧的pod节点,这也是生产中经常使用的pod控制器,代码如下
和ReplicaSet副本集控制器的区别就是kind不同,其他都是相同的
StatefulSet有状态集
有状态集就是确定每一个pod的创建顺序,创建副本的时候会根据标识符来对pdi进行命名:
通过metadata:name: 来指定创建的pod名称分别的Nginx-0、Nginx-1、Nginx-2,在扩缩容方面,删除pod节点的时候是按照创建节点的倒序进行删除的
DaemonSet守护程序集
DaemonSet顾名思义就是守护的程序集,和守护线程差不多,它会为节点创建一个pod,包括节点加入集群中,删除节点的时候,创建的pod也会删除,和守护线程一样同生共死
Job一次性的任务
Job是设置一次性的任务,job在pod的生命周期中只适合restartPolicy重启策略为OnFailure和Never,对于Job我们还可以设置任务完成或失败后存活时间,通过参数.spec.ttlSecondsAfterFinished来设置
这就是这个pod运行成功结束后100s后被删掉
CronJob定时任务
CronJob就是利用定时任务表达式来设置定时执行某个pod
每隔一分钟输出一次时间和输出Hello Kubernetes信息
总结
这篇主要主要讲了Kubernetes的相关知识点和各种组件,主要内容是控制器的定义和特点,我们生产中经常用的控制器的Deployment,它支持滚动更新。
【本文正在参加云原生有奖征文活动】,活动链接:https://ost.51cto.com/posts/12598
