1. 了解Kubernetes
Kubernetes(K8s)是一个开源系统,用于容器化应用的自动部署、扩缩和管理。Kubernetes将构成应用的容器按逻辑单位进行分组以便于管理和发现。Kubernetes基于Google公司在运行生产负载上的15年经验 打造,并融合了来自社区的最佳建议与实践。kubernetes官网Kubernetes架构kubernetes集群的节点只有两类:master节点和node节点。m...
Kubernetes(K8s)是一个开源系统,用于容器化应用的自动部署、扩缩和管理。
Kubernetes将构成应用的容器按逻辑单位进行分组以便于管理和发现。Kubernetes基于Google公司在运行生产负载上的15年经验 打造,并融合了来自社区的最佳建议与实践。
Kubernetes架构
kubernetes集群的节点只有两类:master节点和node节点。
master节点负责维护集群的目标状态;node节点用来运行你的应用和云工作流的机器。master节点控制所有node节点。
- kubernetes master:
master是整个集群的控制中心,kubernetes的所有控制指令都是发给master,它负责具体的执行过程。
master上有这些关键进程:
API Server 集群控制的唯一入口,数据交互中枢,集群安全机制
ControllerManager 集群内各种资源的管理者,保证每个controller的资源处于“期望状态”
Scheduler 集群的资源调度(pod调度)
Etcd 集群的主数据库,存储着所有资源对象及状态
- kubernetes node:
node是集群中真正的工作负载节点。每个node上会被分配工作负载(即docker容器),当node宕机后,其上运行的docker容器会被转移到其它node上。
node上有这些关键进程:
Kubelet 负责pod对应容器的管理,与master节点密切协作,实现集群管理
Kube-proxy 实现service的通信与负载均衡机制
- kubernetes特征:
1. 以服务为中心
2. 自动化
- 架构对比:
Docker Swarm架构
Kubernetes架构
Kubernetes对象
在kubernetes中,kubernetes对象是持久化的实体。kubernetes使用这些实体去表示整个集群的状态。
- kubernetes对象描述的信息:
哪些容器化应用在运行(以及在哪个 Node 上)
可以被应用使用的资源
关于应用运行时表现的策略,比如重启策略、升级策略,以及容错策略
- 对象规约
Spec
与状态Status
:
每个kubernetes对象包含两个嵌套的对象字段,它们负责管理对象的配置:spec
和status
。
spec
是必需的,它描述了对象的期望状态(Desired State)——希望对象所具有的特征;status
描述了对象的 实际状态(Actual State),它是由kubernetes提供和更新的。在任何时刻,kubernetes一直努力地管理着对象的实际状态以与期望状态相匹配。
- 创建kubernetes对象:
当创建kubernetes对象时,必须提供对象规约spec
,用来描述该对象的期望状态,以及关于对象的一些基本信息(例如名称)。当基于kubectl、使用kubernetes api创建对象时,kubectl在发起api请求时,将这些信息转换成json格式。
- Pod:
Pod是kubernetes的最小调度单元,一个pod代表集群上正在运行的一个进程。
一个pod包含一个或多个容器,pause容器是“根容器”。pause容器会共享network、volume资源给该pod下的其它容器。
示例:
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']
- ReplicaSet:
ReplicaSet叫做副本集,它的目的是维护一组正在稳定运行的pod,保证指定数量的pod的可用性。
一个副本集是用字段定义的,包括:一个selector
,它指定如何识别它可以获得的pod;一个replicas
指示它应该维护多少个pod;一个template
指定它应该创建的新pod的数据,以满足replicas
的数量标准。
一个副本集通过创建和删除pod来实现它的目的,以达到所需的数量。
示例:
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: frontend
labels:
app: guestbook
tier: frontend
spec:
replicas: 3
selector:
matchLabels:
tier: frontend
template:
metadata:
labels:
tier: frontend
spec:
containers:
- name: php-redis
image: gcr.io/google_samples/gb-frontend:v3
- Deployment:
Deployment为pod和replicaset提供声明式的更新。
在deployment中描述一个期望状态,而deployment controller以可控的速率将实际状态更改为期望状态。deployment可以自动创建或销毁replicaset。
示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.17.0
ports:
- containerPort: 80
- Service:
一个Service本质上是一组pod组成的一个集群,service和pod之间是通过selector
下定义的Label
串联起来的,同一个service下的所有pod的Label
是相同的。
同一个service下的所有pod通过kube-proxy
实现负载均衡,而每个service都会分配一个全局唯一的虚拟ip——cluster ip
,在service整个生命周期内,cluster ip
不变。
示例:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
更多推荐
所有评论(0)