相关概念
Pod
Pod是K8S系统中可以创建和管理的最小单元,一个Pod(就像一个豌豆荚)是一个组,这个组中包含一个或多个容器(比如,Docker容器),具有共享存储/网络,以及如何运行容器的规范。同一个Pod中的容器共享一个IP地址和端口空间,并且可以通过localhost相互查找;不同Pods中的容器有不同的IP地址,不同Pod之间通过IP地址彼此通信
Pod特点
- 最小部署的单元
- Pod里面是由一个或多个容器组成【一组容器的集合】
- 一个pod中的容器是共享网络命名空间
- Pod是短暂的
- 每个Pod包含一个或多个紧密相关的用户业务容器
yaml 配置字段说明
- apiVersion: API 版本
- kind: Pod 资源类型
- metadata 资源元数据
- spec 资源规格
- imagePullPolicy 镜像拉取规则
- IfNotPresent:默认值,镜像在宿主机上不存在才拉取
- Always:每次创建Pod都会重新拉取一次镜像
- Never:Pod永远不会主动拉取这个镜像
- restartPolicy 重启规则
- Always:当容器终止退出后,总是重启容器,默认策略 【nginx等,需要不断提供服务】
- OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
- Never:当容器终止退出,从不重启容器 【批量任务】
如何快速编写YAML文件
# 尝试运行,并不会真正的创建镜像
kubectl create deployment web --image=nginx -o yaml --dry-run
如果要输出一个文件
kubectl create deployment web --image=nginx -o yaml --dry-run > hello.yaml
导出一个已经存在的Pod的yaml配置文件
kubectl get deploy nginx -o=yaml --export > nginx.yaml
使用YAML创建Pod
kubectl apply -f nginx.yaml
暴露端口,供外部访问
kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=nginx-service -o yaml > nginx-service.yaml
删除一个pod
//
kubectl get deployment -n XXX
// 先删除对应的控制器
kubectl delete deployment jenkins2
// 再删除Pod
Controller
Controller是在集群上管理和运行容器的对象,Pod是通过Controller实现应用的运维,比如弹性伸缩,滚动升级等。Pod 和 Controller之间是通过label标签来建立关系
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: web
name: web
spec:
replicas: 1 // 一个副本
selector:
matchLabels:
app: web // 控制Pod的label
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: web
spec:
containers:
- image: nginx
name: nginx
resources: {}
status: {}
有状态和无状态 无状态:
- 认为Pod都是一样的
- 没有顺序要求
- 不用考虑在哪个Pod运行
- 随意进行伸缩和扩展
有状态
- 上面因素都需要考虑到 例子:有序 比如MySQL主从
Deployment
Deployment主要是用来部署无状态应用
StatefulSet
Statefulset主要是用来部署有状态应用。对于StatefulSet中的Pod,每个Pod挂载自己独立的存储,如果一个Pod出现故障,从其他节点启动一个同样名字的Pod,要挂载上原来Pod的存储继续以它的状态提供服务。 适合StatefulSet的业务包括数据库服务MySQL 和 PostgreSQL,集群化管理服务Zookeeper、etcd等有状态服务
DaemonSet
DaemonSet 即后台支撑型服务,主要是用来部署守护进程
Replication Controller
Replication Controller 简称 RC,是K8S中的复制控制器。RC是K8S集群中最早的保证Pod高可用的API对象。通过监控运行中的Pod来保证集群中运行指定数目的Pod副本。指定的数目可以是多个也可以是1个;少于指定数目,RC就会启动新的Pod副本;多于指定数目,RC就会杀死多余的Pod副本
Replica Set
Replica Set 简称 RS,也就是副本集。RS是新一代的RC,提供同样高可用能力,区别主要在于RS后来居上,能够支持更多种类的匹配模式。副本集对象一般不单独使用,而是作为Deployment的理想状态参数来使用
Job
Service
定义一组Pod的访问规则 作用: 1 服务发现 2 定义一组Pod的访问规则(负载均衡)
ClusterIP:内部使用
NodePort: 外部访问 每个节点都会暴露这个端口
NodeBalance:外部公有云接入
Ingress
Pod和Ingress通过Service进行关联,Ingress作为统一入口,由Service关联一组Pod
Helm
Helm是一个K8S的包管理工具,可以很方便的将之前打包好的yaml文件部署到k8s上,让我们部署服务更加方便高效。
解决问题:
- 使用helm可以把这些yaml作为一个整体进行管理
- 实现yaml高效复用
- 使用helm应用级别的版本管理
三个概念 (1)Helm:一个命令行的工具 (2)chart 把yaml打包,是yaml的集合 (3) 基于chart部署实体应用级别的版本管理