Kubernetes基础
Kubernetes是什么
Kubernetes是当今最流行的开源容器管理平台,它就是大名鼎鼎的Google Borg的开源版本。Google在2014年推出了Kubernetes,本文发布时最新的版本是1.11。Kubernetes源于希腊语,意为舵手,K8S是一个简称,因为首尾字母中间正好有8个字母。基于容器技术,Kubernetes可以方便的进行集群应用的部署、扩容、缩容、自愈机制、服务发现、负载均衡、日志、监控等功能,大大减少日常运维的工作量。
Kubernetes is primarily targeted at applications composed of multiple containers. It therefore groups containers using pods and labels into tightly coupled and loosely coupled formations for easy management and discovery.
Kubernets所有的操作都可以通过Kubernetes API来进行,通过API来操作Kubernetes中的对象,包括Pod、Service、Volume、Namespace等等。Kubernetes的整体结构如下图所示:
Master
也叫做 Cluster Control Plane。
Node
Node 可以是一个物理机也可以是虚拟机,每个节点上都运行了可以运行 Pods 的服务。通过Master节点来进行管理。节点实际上是由云供应商提供的,Kubernetes管理中创建节点实际上只是在Kubernetes中创建一个代表节点的对象。
Node 包含以下几方面的信息:
- Addresses:包括主机名、内部IP、外部IP。
- Condition:描述运行的状态,包括OutOfDisk、Ready、MemoryPressure、PIDPressure、DiskPressure、NetworkUnavailable、ConfigOK。
- Capacity:描述节点资源的情况,包括CPU, memory and the maximum number of pods that can be scheduled onto the node.
- Info:包括内核版本、Kubernetes版本、Docker版本、OS等基础信息。
Kubernetes 对象 Objectes
Objects是Kubernetes生态中持久化的对象,这些对象反映了集群运行的状态。这些状态包括节点上运行了什么样的应用(容器化的)、应用可以使用的资源、应用的管理策略。Kubernetes的Object是一种意图的记录,一旦创建了Objects,意味着你告诉K8S系统一直保持Objects处于你希望的状态。Object包含Spec和Status两个属性,Spec包含对象的一些属性,Status是对象的实际状态。
举例来说,Deployment 是代表集群中应用运行情况的 Object,创建一个 Deployment ,我们会指定Spec为同时运行三个实例。K8S会读取Spec,然后运行三个实例。如果运行中其中一个实例有问题,K8S会重新运行一个实例。
上面说过Kubernetes通过API来操作对象,API接收json格式的参数,但是URL的拼接方式非常不直观,因此我们可以将参数写在 yaml 文件中。使用API操作对象时,需要通过Names或UID来唯一区分对象,例如/api/v1/pods/some-name
这样使用Name请求一个pod对象。Kubernetes中Names必须小于253个字符,仅能包含小写的字母、-
和_
。UID是Kubernetes为对象生成的唯一标识。
1. Pod
a single instance of an application in Kubernetes
Pod 是Kubernetes中可以创建和部署的最小单位。Pod包含了应用容器、存储资源、唯一的网络IP地址以及容器运行的参数。Pod内部的容器共享的网络、存储资源。Docker是Pod中最常用的容器运行环境,但仍允许用户使用其他的容器环境。
Pod使用有两种方式:一个容器一个Pod、一个Pod中运行多个容器。Pods设计的目标就是支持多个容器进程共同组合为一个服务,这种用法是一个相对高级的功能,仅有程序间存在紧耦合情况是才这么用。
Restarting a container in a Pod should not be confused with restarting the Pod. The Pod itself does not run, but is an environment the containers run in and persists until it is deleted.
Pod的生命周期有几个状态
2. Pods and Controller
Controller 在集群范围内提供Pod的创建、管理、扩容、复制、自愈等功能。
2.1 Deployments
Deployment 是新一代用于 Pod 管理的对象,与 Replication Controller 相比,它提供了更加完善的功能,使用起来更加简单方便。
2.2 StatefulSets
在 Kubernetes 中,Deployment 和 ReplicaSets 都是运行无状态应用的有效手段。但这两种方式对于有状态应用来说就不太合适了。StatefulSet 的目的就是给为数众多的有状态负载提供正确的控制器支持。
2.3 DaemonSet
DaemonSet能够让所有(或者一些特定)的Node节点运行同一个pod。当节点加入到kubernetes集群中,pod会被(DaemonSet)调度到该节点上运行,当节点从kubernetes集群中被移除,被(DaemonSet)调度的pod会被移除,如果删除DaemonSet,所有跟这个DaemonSet相关的pods都会被删除。
2.4 ReplicationController
Replication Controller,称为副本控制器。副本控制器的作用即保证集群中一个RC所关联的Pod副本数始终保持预设值。
2.5 ReplicaSet
ReplicaSet 跟 ReplicationController 没有本质的不同,只是名字不一样,并且 ReplicaSet 支持集合式的 selector(ReplicationController 仅支持等式)。
2.6 Job
在有些场景下,是想要运行一些容器执行某种特定的任务,任务一旦执行完成,容器也就没有存在的必要了。在这种场景下,创建pod就显得不那么合适。于是就是了Job,Job指的就是那些一次性任务。通过Job运行一个容器,当其任务执行完以后,就自动退出,集群也不再重新将其唤醒。
2.7 Garbage Collection
Kubernetes进行垃圾回收管理的控制器,Kubernetes的垃圾回收由kubelet进行管理,每分钟会查询清理一次容器,每五分钟查询清理一次镜像。在kubelet刚启动时并不会立即进行GC,即第一次进行容器回收为kubelet启动一分钟后,第一次进行镜像回收为kubelet启动五分钟后。
2.8 CronJob
这个比较容易理解,从字面也能看出来,是执行定时任务的控制器。
3. Service
Kubernetes的 Service 是一组 Pod 的逻辑抽象,这组 Pod 通过 Label 来定义。Service 的定义 yaml 如下。
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
上面的yaml定义了一组含有app=MyApp
标签的Pod共同组成一个名为my-service
服务。Kubernetes支持两种服务发现的模式:environment variables 和 DNS。
4. Volumes
我们知道容器中的文件系统是临时的,一旦容器重新启动,所有运行时对文件的操作都会丢失。Kubernetes使用Volumes来解决这个问题。不同于Docker自身的Volume,Kubernetes提供了Volume的生命周期管理,另外还提供了多种存储形式的支持。在Pod的spec中指定volume的类型以及挂载的位置。
Kubernetes支持的volume的类型:awsElasticBlockStore、azureDisk、azureFile、cephfs、configMap、csi、downwardAPI、emptyDir、fc、local、nfs。
Add-ons
- DNS
- Ingress Controller
- Heapster
- Dashboard
参考资料
- Kubernetes Introduction
- Kubernetes Concept
- Kubernetes Design and Architecture
- StatefulSet: Kubernetes 中对有状态应用的运行和伸缩
- kubernetes DaemonSet资源对象
- Kubernetes对象之ReplicaSet
Kubernetes基础的更多相关文章
- Kubernetes基础:查看状态、管理服务
目标 了解Kubernetes Pod 了解Kubernetes Node 学习如何调试部署问题 了解如何通过Service暴露应用 Kubernetes Pods 在Kubernetes中创建一个D ...
- 1-2、kubernetes架构概述和kubernetes基础概念
kubernetes https://draveness.me/understanding-kubernetes http://kubernetes.kansea.com/docs/ master/n ...
- linux运维、架构之路-Kubernetes基础(一)
一.Kubernetes介绍 Kubernetes最初源于谷歌内部的Borg,提供了面向应用的容器集群部署和管理系统.Kubernetes的目标旨在消除编排物理/虚拟计算,网络和存储基础设施的负担,并 ...
- kubernetes基础架构及原理
kubernetes简称“k8s” 其中“8”代表的是“k”和“s”中间的8个字母. k8s是Google公司开发的Borg项目中独立出来的容器编排工具,然后将其捐献给CNCF这个组织,然后发扬光大. ...
- 003/kubernetes基础:开启云原生之门(Mooc)
一.简介:(https://www.imooc.com/learn/978) 在2017年Kubernetes战胜了两个强大的竞争对手Swarm和Mesos,成为容器管理与调度编排领域的首选平台和事实 ...
- kubernetes基础——一文读懂k8s
容器 容器与虚拟机对比图(左边为容器.右边为虚拟机) 容器技术是虚拟化技术的一种,以Docker为例,Docker利用Linux的LXC(LinuX Containers)技术.CGroup(Co ...
- kubernetes基础概念知多少
kubernetes(简称k8s)是一种用于在一组主机上运行和协同容器化应用程序的管理平台,皆在提供高可用.高扩展性和可预测性的方式来管理容器应用的生命周期.通过k8s,用户可以定义程序运行方式.部署 ...
- Kubernetes 基础资料
概述 这篇文章用来记录Kubernetes 的基础资料,整体以最新官方文档为准. 因为k8s整体比较偏运维,作为研发可先大致了解其概念及初级使用方式,后面重点学习点会放在service mesh is ...
- kubernetes 基础知识
1. kubernetes 包含几个组件 Kubernetes是什么:针对容器编排的一种分布式架构,是自动化容器操作的开源平台. 服务发现.内建负载均衡.强大的故障发现和自我修复机制.服务滚动升级和在 ...
随机推荐
- UEditor插入视频,Object Iframe等标签被过滤问题处理
UEditor插入视频由于兼容性问题,需要再处理一个视频代码,但是新版ueditor不支持Objec IFrame标签,所以要加入// xss过滤白名单 名单来源: https://raw.githu ...
- sed匹配多行替换
sed -i '/aaa/{:a;n;s/123/xyz/g;/eee/!ba}' yourfile 如题:aaa123123123123123eee怎么匹配aaa~eee(开始结束字符串确定),然后 ...
- Selenium Webdriver概述(转)
Selenium Webdriver https://www.yiibai.com/selenium/selenium_overview.html# webdriver自动化俗称Selenium 2. ...
- 012.Zabbix的IT服务
一 IT服务简介 IT服务能体现宏观度量和管理基础设施的总体情况的可用性,从而体现总体的趋势,发现并解决IT基础设施暴露的问题. 二 IT服务的添加 2.1 IT services--services ...
- 006.MySQL双主-Master02可用配置
[root@Master02 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_de ...
- 002.MMM高可用MySQL简介
一 简介 MMM即Multi-Master Replication Manager for MySQL:mysql多主复制管理器,基于perl实现,关于mysql主主复制配置的监控.故障转移和管理的一 ...
- CSUOJ Water Drinking
Description The Happy Desert is full of sands. There is only a kind of animal called camel living on ...
- springmvc学习总结(二) -- maven+springmvc+spring+mybatis+mysql详细搭建整合过程讲解
@_@ 写在最前 之前分享过下面这几篇: mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(上)(附demo和搭建过程遇到的问题解决方法) myba ...
- 接口开发-集成接口文档(swagger)
在正式进入主题之前,先说说实际工作中遇到的问题.不算是传统的原生APP开发,还是眼下的H5混合开发,只要是需要前后端通过接口配合的,往往都存在几个普遍的问题 (1)接口文档谁来写,尤其是跨部门,并且, ...
- spring data jpa在使用PostgreSQL表名大小写的问题解决
国内的文章看了一遍,其实没找到根本问题解决方法,下面将列举这一系列的问题解决方法: 1.在配置文件增加如下配置: spring.jpa.hibernate.naming.physical-strate ...