1.Master
Kubernetes 里的 Master 指的是集群控制节点, 每个 k8s 集群需要一个 master 来负责整个集群的管理和控制, 基本上 k8s 所有控制命令都发给它, 它来负责具体的执行过程(高可用建议部署 3 台服务器)
Master 节点运行的组件:
Kube-apiserver: 提供 http REST 接口的关键服务进程, 是 k8s 里所有资源增删改查等操作的唯一入口, 也是集群控制的入口进程.
Kube-controller-manager:k8s 里所有资源对象的自动化控制中心, 可以理解为资源对象的 "大总管".
Kube-scheduler: 负责资源调度 (pod 调度) 的进程, 相当于公司的调度室.
另外, 在 master 节点上还需要启动一个 etcd 服务, 用于存储所有资源对象的数据.
2.Node
除了 master,k8s 集群中的其他机器被称为 Node 节点, 它可以是一台物理机, 也可以是一台虚拟机, 是集群中的负载节点, master 会根据自动算法或者自定义的策略将 pod 调度到指定的 node 上工作, 当 node 宕机时, 其上的工作负载会被 master 自动转移到其他节点.
每个 node 节点上运行的进程:
Kubelet: 负责 pod 对应的容器的创建, 启停等任务, 与 master 关系密切, 实现集群管理的基本功能.
Kube-proxy: 实现 kubernetes service 的通信与负载均衡的组件.
Docker engine:docker 引擎, 负责本机的容器创建与管理.
前文 k8s 集群已介绍如何搭建一套集群. 这里不多说.
- . [[email protected] ~]# kubectl get nodes
- . NAME STATUS ROLES AGE VERSION
- . API-server Ready master 7d20h v1.14.1
- . node1 Ready <none> 7d19h v1.14.1
- . node2 Ready <none> 7d17h v1.14.1
- . node3 Ready <none> 4d16h v1.14.2
这里可以看到集群有 3 个 node 1 个 master.
- #kubectl get nodes 用于查看集群的 node 信息.
- #kubectl describe node $node_name 可以查看更详细的 node 信息. 比如每个 pod 的 CPU 的使用率, 内存的使用率, node 的内核版本, ip 信息等以及发生的 event 都可以查看到.
- 3.Pod
Pod 组成示意图
Pod 是 k8s 的最重要也是最基本的概念, 如图所示, 每个 pod 都有一个特殊的被 "根容器" 的 Pause 容器. Pause 容器对应的镜像属于 k8s 平台的一部分, 以他的状态代表整个容器组的状态. Docker 业务容器运行于 pod 中.
Kubernetes 为每个 Pod 都分配了唯一的 IP 地址, 称为 pod IP, 一个 pod 里的多个容器共享 Pod IP.kubernetes 要求底层网络支持集群内任意两个 pod 之间的 tcp/ip 直接通信, 通常使用虚拟二层网络技术实现.
4.Label
Label 是 k8s 系统中另一个重要的核心概念, label 可以附加到各种对象资源上, 例如可以给 node 打 label, 给 pod 打 label, 一个对象可以添加多个 label, 例如可以给 node 增加 labe role: preonline 这样就代表着这是个预上线的节点, 通过不通 label 对不同资源进行区分, 方便批量更新与回滚.
5.Replication Controller
RC 简单来说, 定义了一个期望值, 即声明了某种 pod 的副本数量在某时某刻都符合设定的值, 如果实际 pod 的数量少于 RC 定义的预期的数量, 则会自动新增一个 pod 来符合设定的预期. 如配置文件:
- apiVersion: v1
- kind: ReplicationController
- metadata:
- name : frontend
- spec :
- replicas: 1
- selector:
- tier : frontend
- template:
- metadata:
- labels:
- App: App-demo
- tie.r: frontend
- spec:
- containers:
- name: tomcat-demo
- image: tomcat
- imagePullPolicy: IfNotPresent
- env :
- name : GET HOSTS FROM
- value: dns
- ports:
- containerPort: 80
这里创建了个 RC, 命名为 frontend , 预期存活含有 tier:frontend 的 pod 为 1 个 (replicas=1), 当预期少于 1 个时(例如发生 node 重启, 关机等意外), 将从 template 字段生成一个 pod, 生成后这个 pod 打上 tier: frontend 的标签. 此时 pod 数量从 0 变为 1, 符合 replicas=1 的预期. 当然此文件还声明了这个 pod 启用了 tomcat 的容器(container.image=tomcat) 并暴露出 80 端口(ports.containerPort=80).
6.Deployment
Deployment 其实是 RC 的一个升级, 增加了例如升级 回滚镜像的功能, 如有批量更新镜像版本, 则可以使用 kubectl set image deployment/$deployment_name $imager_name=$image_version 实例: kubectl set image deployment/nginx-deploy nginx=nginx:1.9.1, 说明将升级 nginx 镜像到 1.9.1 版本.
- apiVersion: apps/v1beta1
- kind: Deployment
- metadata:
- name: nginx-deployment
- spec:
- replicas: 3
- template:
- metadata:
- labels:
- App: nginx
- spec:
- containers:
- -name: nginx
- image: nginx:1.7.9
- ports:
- -containerPort: 80
睿江云官网链接: https://www.eflycloud.com/home?from=RJ0024