【摘要】 华为云云原生王者之路集训营(黄金-第三章和第四章)
1.kubernetes介绍
云计算的发展历程
“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。这种特性经常被称为像水电一样使用IT基础设施。
kubernets概览
模型对象
1.Pod 能够创建、调度和管理最小部署单元
2.Service 一个Pod的逻辑集合和访问这个集合的策略
3.Deployment 无状态工作负载 StatefulSet 有状态工作负载
…
增删改查 apiserver
功能组件 Master: apiserver Scheduler Controller Manager
Node: Kubelet Kube-proxy
功能特性: Pod调度 部署启动 运行监控 服务发现 升级运维 扩容缩容
关键概念-Pod
在Kubernetes中,Pods是能够创建、调度、和管理的最小部署单元,是一组容器的集合, 而不是单独的应用容器。
同一个Pod里的容器共享同一个网络命名空间,IP地址及 端口空间。
从生命周期来说,Pod是短暂的而不是长久的应用。Pods被调度到节点,保持在这个节点上直到被销毁。
POD实例:
{
“kind”: “Pod”,
“apiVersion”: “v1”,
“metadata”: {
“name”: “redis-django”,
“labels”:{
“app”: “webapp”
}
},
“spec”:{
“containers”: [
{
name”: “key-value-store”,
“image”: “redis”
},
{
“name”: “frontend”,
“image”: “django”
}
]
}
}
Pod详解-容器(Containers)
Infrastructure Container:基础容器
1.用户不可见,无需感知
2.维护整个Pod网络空间
InitContainers:初始化容器,一般用于服务等待处理以及注册Pod信息等
1.先于业务容器开始执行
2.顺序执行,执行成功退出(exit0) ,全部执行成功后开始启动业务容器
Containers:业务容器(Tomcat,nginx等)
并行启动,启动成功后一直Running
容器基本组成:
镜像部分: 镜像地址和拉取策略 拉取镜像的认证凭据
启动命令:
command:替换docker容器的entrypoint
args: 作为docker容器entrypoint的入参
计算资源:
请求值:调度依据
限制值:容器最大能使用的规格
Pod详解-外部输入
Pod可以接收的外部输入方式:环境变量、配置文件以及密钥。
环境变量:使用简单,但一旦变更后必须重启容器。
Key-value 自定义 From 配置文件(configmap) From密钥(Secret)
以卷形式挂载到容器内使用,权限可控。 配置文件(configmap) 密钥(secret)
Pod与工作负载的关系
通过label-selector和owerReference 相关联
Pod 通过工作负载实现应用的运维,如伸缩、升级等
关键工作负载-ReplicaSet
- ReplicaSet—–副本控制器
- 确保Pod的一定数量的份数(replica)在运行。如果超过这个数量,控制器会杀死一些,如果少了,控制器会启动一些。
- ReplicaSet用于解决pod的扩容和缩容问题(HA,工作负载等)
- 通常用于无状态应用
关键工作负载–Deployment
Kubernetes Deployment提供了官方的用于更新Pod和Replica Set (下一代的Replication Controller)的方法,您可以在Deployment对象中只描述您所期望的理想状态(预期的运行状态),Deployment控制器为您将现在的实际状态转换成您期望的状态;
Deployment集成了上线部署、滚动升级、创建副本、暂停上线任务,恢复上线任务,回滚到以前某一版本(成功/稳定)的Deployment等功能,在某种程度上,Deployment可以帮我们实现无人值守的上线,大大降低我们的上线过程的复杂沟通、操作风险。
Deployment的典型用例:
1.使用Deployment来启动(上线/部署)一个Pod或者ReplicaSet
2.检查一个Deployment是否成功执行
3.更新Deployment来重新创建相应的Pods(例如,需要使用一个新的Ilmage).
4.如果现有的Deployment不稳定,那么回滚到一个早期的稳定的Deployment版本
users:命令行,接口为主
master:
etcd 保存了整个集群的状态;
apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制;
controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
考虑HA或多活会有多个master,非实验环境下node都会有很多