kubernetes 基础知识

1. kubernetes 包含几个组件

  Kubernetes是什么:针对容器编排的一种分布式架构,是自动化容器操作的开源平台。

  服务发现、内建负载均衡、强大的故障发现和自我修复机制、服务滚动升级和在线扩容缩容、资源自动调度机制、多粒度的资源配额管理能力,包括开发、测试、部署、运维监控,一站式的完备的分布式系统开发和支撑平台.

  

   (1) Master 控制节点  

1.Api Server:为集群的核心组件,主要负责集群各功能模块之间的通信,集群内的功能模块通过Api server将信息存入到分布式文件系统etcd中与其他节点进行信息交互。 
2.Scheduler:负责集群的资源调度,跟踪集群中所有Node的资源利用情况,对新创建的pod,采取合适的调度策略,进行均衡的调度到合适的节点上。 
3.Controller Manager:主要负责集群的故障检测和恢复的自动化,它内部的组件如下: 
  a.endpointController:定期关联service和pod,关联信息由endpoint负责创建和更新。 
  b.ReplicationController:完成pod的复制或移除,以确保ReplicationController定义的复本数量与实际运行pod的数量一致性

   (2) Node 节点

  集群中的工作主机,Node可以是物理主机,也可以是虚拟机,包含以下组件: 
1.kubelet:运行在每个Node节点上,kubelet会通过api service 注册节点自身信息,用于master发现节点,它会定期从etcd获取分配到本机的pod,并根据pod信息启动或停止相应的容器,并定期向master节点汇报节点资源的使用情况,内部集成cadvise来监控容器和节点资源。 
2.Kube Proxy:负责为pod提供代理。它会定期从etcd获取所有的service,并根据service信息创建代理。当某个客户pod要访问其他pod时,访问请求会经过本机proxy做转发。

2.基础概念

  (1) pod概念

Pod是一个逻辑概念,它是Kubernetes资源调度的单元,一般会把一组功能强相关的容器逻辑上称之为一个pod,Pod就是所说的实例。作为一个逻辑概念,pod本身没有资源,pod中的容器具有资源,创建pod,可以通过定义pod模块。

  [pod状态]

 

 

Pending 
容器尚未启动成功,它包括从pod被创建到调度、然后到拉镜像开始部署这个过程 
Running 
容器启动成功 
Succeeded 
容器退出,返回码是0,并且容器不会再被重新启动 
Failed 
容器异常退出 
Unknown 
状态未知,获取不到容器的状态,当出现异常时会有这种状态,例如pod所在的机器故障,或者pod所在的机器上

 

{
    "kind": "Pod",(资源类型)
    "apiVersion": "v1",  (资源版本)
    "metadata": {
        "name": "app-tomcat", (名字,唯一)
        "namespace": "default", (命名空间默认default)
        "labels": {
            "name": "app-tomcat" (label做为标识,可以跟RC,Service关联对应)
        }
    },
    "spec": {
        "containers": [
            {
                "name": "app-tomcat", (自定义镜像名称)
                "image": "tomcat", (要拉取的镜像)
                "command": [   (运行容器时,要运行的命令)
                    "/bin/bash",
                    "/opt/apache-tomcat-7.0.57/bin/catalina.sh",
                    "run"
                ],
                "env": [  (环境变量K,V)
                    {
                        "name": "url_addr",
                        "value": "http://192.168.54.66:8080/paas/jsp/index.jsp"
                    }
                ],
                "resources": { (对容器资源限制)
                    "limits": {
                        "cpu": "1",
                        "memory": "1073741824"
                    },
                    "requests": {
                        "cpu": "100m",
                        "memory": "104857600"
                    }
                },
                "imagePullPolicy": "Always" (获取镜像策略Always,Never,IfNotPresent)
            }
        ],
        "restartPolicy": "Always", (pod重启策略,Always,OnFailure,Never)
        "dnsPolicy": "ClusterFirst",
        "nodeSelector": {  (选择将该pod调度到包含这些label的Node上)
            "group": "node1"
        }
    }
}

  

  (2) ReplicationController

ReplicationController(简称rc)是pod的复制抽象,用于解决pod的扩容缩容问题。通常,分布式应用为了性能或高可用性的考虑,需要复制多份资源,并且根据负载情况动态伸缩。
通过replicationController,我们可以指定一个应用需要几份复制,Kubernetes将为每份复制创建一个pod,并且保证实际运行pod数量总是与该复制数量相等(例如,当前某个pod宕机时,自动创建新的pod来替换)。

 

 

 

RC中selector设置一个label,去关联pod的label,selector的label与pod的label相同,那么该pod就是该rc的一个实例;RC中Replicas设置副本数大小,系统根据该值维护pod的副本数

 

{
    "kind": "ReplicationController",
    "apiVersion": "v1",
    "metadata": {
        "name": "app-tomcat",
        "namespace": "default",
        "labels": {
            "name": "app-tomcat"
        }
    },
    "spec": {
        "replicas": 2(副本数),
        "selector": {
            "name": "app-tomcat(选择的pod的label)"
        },
        "template": {
            "metadata": {
                "labels": {
                    "name": "app-tomcat(pod的label)"
                }
            },
            "spec": {
                "containers": [
                    {
                        "name": "kaifa2-group-tomcat",
                        "image": "192.168.54.64:5000/tomcat-248:V1.0",
                        "command": [
                            "/bin/bash",
                            "/opt/apache-tomcat-7.0.57/bin/catalina.sh",
                            "run"
                        ],
                        "env": [
                            {
                                "name": "url_addr",
                                "value": "http://192.168.54.64:8080/paas/jsp/index.jsp"
                            }
                        ],
                        "resources": {
                            "limits": {
                                "cpu": "1",
                                "memory": "1073741824"
                            },
                            "requests": {
                                "cpu": "100m",
                                "memory": "104857600"
                            }
                        },
                        "imagePullPolicy": "Always"
                    }
                ],
                "restartPolicy": "Always",
                "nodeSelector": {
                    "group": "node1"
                }
            }
        }
    }
}

  (3) Service

  service是pod的路由代理抽象,用于解决pod之间的服务发现问题,即上下游pod之间使用的问题。传统部署方式中,实例所在的主机ip(或者dns名字)一般是不会改变的,但是pod的运行状态可动态变化(比如容器重启、切换机器了、缩容过程中被终止了等),
所以访问端不能以写死IP的方式去访问该pod提供的服务。service的引入旨在保证pod的动态变化对访问端透明,访问端只需要知道service的地址,由service来提供代理。

 

 

 

{
    "kind": "Service",
    "apiVersion": "v1",
    "metadata": {
        "name": "tomcat-yefp",
        "namespace": "default",
        "labels": {
            "name": "tomcat-yefp"
        }
    },
    "spec": {
        "ports": [
            {
                "protocol": "TCP",
                "port": 8080(访问端口),
                "targetPort": 8080
            }
        ],
        "selector": {
            "name": "app-tomcat(选择的pod的label)"
        },
        "type": "ClusterIP",
        "sessionAffinity": "None"
    }
}

  

  (4) EndPoint

Endpoint是可被访问的服务端点,即一个状态为running的pod,它是service访问的落点,只有service关联的pod才可能成为endpoint。 
Endpoint、service和pod的关系:

  

 

转载于:https://www.cnblogs.com/NGU-PX/p/11531574.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值