云服务器

Kubernetes基本概念和术语

2019-12-05 15:25:25 58
01
Master

Kubernetes里的Master指的是集群控制节点,每个k8s集群需要一个master来负责整个集群的管理和控制,基本上k8s所有控制命令都发给它,它来负责具体的执行过程(高可用建议部署3台服务器)


Master 节点运行的组件:

  • Kube-apiserver:提供http Rest接口的关键服务进程,是k8s里所有资源增删改查等操作的唯一入口,也是集群控制的入口进程。

  • Kube-controller-manager:k8s里所有资源对象的自动化控制中心,可以理解为资源对象的“大总管”。

  • Kube-scheduler:负责资源调度(pod调度)的进程,相当于公司的调度室。


另外,在master节点上还需要启动一个etcd服务,用于存储所有资源对象的数据。


02
Node

除了master,k8s集群中的其他机器被称为Node节点,它可以是一台物理机,也可以是一台虚拟机,是集群中的负载节点,master会根据自动算法或者自定义的策略将pod调度到指定的node上工作,当node宕机时,其上的工作负载会被master自动转移到其他节点。


每个node节点上运行的进程:

  • Kubelet:负责pod对应的容器的创建,启停等任务,与master关系密切,实现集群管理的基本功能。

  • Kube-proxy:实现kubernetes service的通信与负载均衡的组件。

  • Docker engine:docker 引擎,负责本机的容器创建与管理。

前文 如何搭建Kubernetes 已介绍如何搭建一套集群。这里不多说。

  [root@api-server ~]# 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都可以查看到。


03
Pod

       Pod组成示意图

Pod是k8s的最重要也是最基本的概念,如图所示,每个pod都有一个特殊的被“根容器”的Pause容器。Pause容器对应的镜像属于k8s平台的一部分,以他的状态代表整个容器组的状态。Docker业务容器运行于pod中。

Kubernetes为每个Pod都分配了唯一的IP地址,称为pod IP,一个pod里的多个容器共享Pod IP。kubernetes要求底层网络支持集群内任意两个pod之间的tcp/ip直接通信,通常使用虚拟二层网络技术实现。


04
Label

Label是k8s系统中另一个重要的核心概念,label可以附加到各种对象资源上,例如可以给node打label,给pod打label,一个对象可以添加多个label,例如可以给node增加labe role: preonline 这样就代表着这是个预上线的节点,通过不同label对不同资源进行区分,方便批量更新与回滚。


05
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)。


06
Deployment

Deployment 其实是RC的一个升级,增加了例如升级、回滚镜像的功能,如有批量更新镜像版本,则可以使用kubectl&nbsp;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=RJ0032

上一篇: 无

微信关注

获取更多技术咨询