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的关系:

  

kubernetes 基础知识的更多相关文章

  1. kubernetes基础知识:限制POD和容器运行的CPU、内存

    限制运行内存 https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/ 先看一个pod的yaml ...

  2. 《两地书》--Kubernetes(K8s)基础知识(docker容器技术)

    大家都知道历史上有段佳话叫“司马相如和卓文君”.“皑如山上雪,皎若云间月”.卓文君这么美,却也抵不过多情女儿薄情郎. 司马相如因一首<子虚赋>得汉武帝赏识,飞黄腾达之后便要与卓文君“故来相 ...

  3. Kubernetes(K8s)基础知识(docker容器技术)

    今天谈谈K8s基础知识关键词: 一个目标:容器操作:两地三中心:四层服务发现:五种Pod共享资源:六个CNI常用插件:七层负载均衡:八种隔离维度:九个网络模型原则:十类IP地址:百级产品线:千级物理机 ...

  4. YAML基础知识及搭建一台简洁版guestbook

    一,前言 前面我们已经搭建过简易版k8s集群了,在此基础上可以搭建一个简洁版guestbook ,以便来学习k8s创建pod的整个过程. 二,在此之前,我们还需要学习一下YAML基础知识 YAML 基 ...

  5. 【转帖】使用容器化和 Docker 实现 DevOps 的基础知识

    使用容器化和 Docker 实现 DevOps 的基础知识 https://www.kubernetes.org.cn/6730.html 2020-02-24 15:20 灵雀云 分类:容器 阅读( ...

  6. 入门Kubernetes -基础概念

    一.Kubernetes概述 Kubernetes ,又称为 k8s(首字母为 k.首字母与尾字母之间有 8 个字符.尾字母为 s,所以简称 k8s)或者简称为 "kube" ,是 ...

  7. [源码解析] 深度学习分布式训练框架 Horovod (1) --- 基础知识

    [源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 目录 [源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 0x00 摘要 0x01 分布式并 ...

  8. kubebuilder实战之三:基础知识速览

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  9. Docker的学习笔记(一)基础知识

    概述 本人最近在学习docker相关的知识,既是工作本身的需要也是自己对技术的追求的必要,以后我也会推出容器相关的随笔,既可以增长自己的知识,也可以和读者广泛交流,岂不乐乎?话不多说.第一篇先介绍do ...

随机推荐

  1. spring-boot autoConfiguration

    一, 第一个待注入类 public class CacheService { } public class LoggerService { } 方法一, 实现接口ImportSelectort pub ...

  2. Mongodb PHP封装类

    分享一个Mongodb PHP封装类 <?php /** * Mongodb 基本操作API,支持基本类似关系统型数据库的操作接口 * * @version 1.0 * [说明] * * 1:该 ...

  3. PageObject课程培训记录

    前言 昨晚的培训课程讲了PO设计模式,对于PO模式我们需要去了解关于为什么要使用PO,而不使用PO是什么情况?什么是PO模式?PO怎么去使用? 第一,为什么要使用PO,而不使用PO是什么情况? 我们先 ...

  4. Java知识系统回顾整理01基础06数组06二维数组

    一.一维数组和二维数组 这是一个一维数组, 里面的每一个元素,都是一个基本类型int int a[] =new int[]{1,2,3,4,5}; 这是一个二维数组,里面的每一个元素,都是一个一维数组 ...

  5. 记录编译JDK11源码时遇到的两个问题

    执行make all报错信息: 错误一 /src/hotspot/share/runtime/arguments.cpp:1461:35: error: result of comparison ag ...

  6. 满屏的try-catch,不瘆得慌?

    持续原创输出,点击上方蓝字关注我 目录 前言 Spring Boot 版本 全局统一异常处理的前世今生 Spring Boot的异常如何分类? 如何统一异常处理? 异常匹配的顺序是什么? 总结 前言 ...

  7. mysql CHAR and VARCHAR 比较

    写在前面 面试的时候突然有一位面试官问,说说CHAR和VARCHAR的区别,懵逼了,想自己平常使用的时候直接把VARCHAR拿来就用,真没注意到其中的不同. 反思,为什么没有注意到他们的不同 对于my ...

  8. 多测师讲解python _unttest框架002(结合项目实战)_高级讲师肖sir

    第一种调用方法: if __name__ == '__main__':# #第一种运行方法:运行所有的用例 import unittestfrom selenium import webdriverf ...

  9. MeteoInfoLab脚本示例:创建netCDF文件(合并文件)

    在MeteoInfoLab中增加了创建netCDF文件并写入数据的功能,这里利用合并多个netCDF文件为一个新的netCDF文件为例.1.创建一个可写入的netCDF文件对象(下面用ncfile表示 ...

  10. hdu6376 度度熊剪纸条-----01背包

    题目:度度熊有一张纸条和一把剪刀.   纸条上依次写着 N 个数字,数字只可能是 0 或者 1.     度度熊想在纸条上剪 K 刀(每一刀只能剪在数字和数字之间),这样就形成了 K+1 段.   他 ...