一、Kubernetes介绍

Kubernetes最初源于谷歌内部的Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes的目标旨在消除编排物理/虚拟计算,网络和存储基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心进行自助运营。Kubernetes 也提供稳定、兼容的基础(平台),用于构建定制化的workflows 和更高级的自动化任务。 Kubernetes 具备完善的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建负载均衡器、故障发现和自我修复能力、服务滚动升级和在线扩容、可扩展的资源自动调度机制、多粒度的资源配额管理能力。 Kubernetes 还提供完善的管理工具,涵盖开发、部署测试、运维监控等各个环节。kubernetes是一个全新的基于容器技术的分布式架构解决方案,并且是一个一站式的完备的分布式系统开发和支撑平台。Kubernetes作为云原生应用的基石,相当于一个云操作系统,其重要性不言而喻。

1、Kubernetes架构图

2、Kubernetes主要核心组件介绍

  1. etcd保存了整个集群的状态
  2. apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
  3. controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
  4. scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
  5. kubelet负责维护容器的生命周期,同时也负责Volume(CSI)和网络(CNI)的管理
  6. kube-proxy负责为Service提供cluster内部的服务发现和负载均衡

二、Kubernetes基础服务

1、Pod介绍

每个Pod都有一个特殊的被称为“根容器”Pause容器。Pause容器对应的镜像属于Kubernetes平台的一部分,Pause作为Pod根容器,它的状态代表整个容器组的状态。除了Pause容器,每个Pod还包含一个或多个紧密相关的用户业务容器,Pod里的多个业务容器共享Pause容器的IP,共享Pause容器挂载的Volume。

Kubernetes为每个Pod分配唯一的IP的地址,称之为Pod IP,一个Pod里的多个容器共享Pod IP。Kubernetes要求底层网络支持集群内任意两个Pod之间的TCP/IP的直接通讯,采用虚拟二层网络技术来实现,一个Pod里的容器与另外主机上的Pod容器能够直接通信。

Pod一旦被创建,就会被放入到etcd中存储,随后会被Kubernetes Master调度到某个具体的Node上并进行绑定(Binding),随后该Pod 被对应的Node上的kubelet进程实例化成一组相关的docker容器运行起来。当Pod里的某个容器停止时,Kubernetes会自动检测到这个问题并且重新启动这个Pod (也就是重启Pod里的所有容器),如果Pod所在的Node节点宕机,则会将这个Node上所偶的Pod从新调度到其他Node节点上。

①Endpoint

Pod的IP加上这里的容器端口(container Port),就组成了一个全新的概念---Endpoint 它代表着此Pod里的一个服务进程的对外通讯地址。一个Pod也存在着多个Endpoint的情况,比如我们把Tomcat定义为一个Pod时,可以对外暴露端口与服务端口这两个Endpoint。

②Event

Event是一个事件的记录,记录事件的最早生成时间、最后重现时间、重复次数、发起者、类型,以及导致此事件的原因等众多信息。Event通常会关联到某个具体的资源上,是排查故障的重要参考,Node描述信息包含了Event,而Pod同样有Event记录。当我们发现某个Pod迟迟无法创建时,我们就可以用kubectl describe pod [Pod名称]来查看,定位问题。

2、Pod基本用法

①Pod创建一个容器

###创建一个名为nginx-deployment的Pod###
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx ##容器名称
image: daocloud.io/library/nginx:1.13.-alpine #镜像地址
imagePullPolicy: IfNotPresent
ports:
- containerPort:

②Pod创建两个容器

###nginx和tomcat容器组合成一个整体对外提供服务时,应将这两个容器打包为一个Pod###
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: demon-pod
spec:
replicas:
selector:
matchLabels:
app: test
template:
metadata:
labels:
app: test
spec:
containers:
- name: demon-nginx-docker
image: daocloud.io/library/nginx:1.13.-alpine
imagePullPolicy: IfNotPresent
ports:
- containerPort:
- name: demon-tomcat-docker
image: daocloud.io/library/tomcat:8.5.-jre8-alpine
imagePullPolicy: IfNotPresent
ports:
- containerPort:

查看Pod运行状态

kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
demon-pod-77857c4f5f-nrgnh / Running 40s 10.2.1.5 192.168.29.176

我们可以看到READY信息为2/2,表示Pod中的两个容器都成功运行了 (状态Running)

查看创建的Pod详细信息:

kubectl describe pod demon-pod-77857c4f5f-nrgnh
Name: demon-pod-77857c4f5f-nrgnh
Namespace: default
Node: 192.168.29.176/192.168.29.176
Start Time: Thu, Nov :: +
Labels: app=test
pod-template-hash=
Annotations: <none>
Status: Running
IP: 10.2.1.5
Controlled By: ReplicaSet/demon-pod-77857c4f5f
Containers:
.....

最新文章

  1. Vertica 安装,建库,新建测试用户并授予权限,建表,入库
  2. XMind共享未保存的思维导图的教程
  3. jquery toastr introduction
  4. C语言itoa()函数和atoi()函数详解(整数转字符C实现)
  5. html5 app开发重大消息-腾讯在技术端推进Html5生态发展
  6. [未完成]关于GUI Java图形化界
  7. pandas对象保存到mysql出错提示“BLOB/TEXT column used in key specification without a key length”解决办法
  8. 微信小程序简易教程
  9. tomcat重启或关闭后,上传文件消失 .
  10. hdu2062 Subset sequence----递推
  11. mysql清空表
  12. blinker库
  13. Ubuntu 14.04 安装 CUDA 问题及解决
  14. [转] mongoDB与mongoose
  15. 【洛谷P1972】HH的项链 离线+树状数组
  16. 【ZZ】终于有人把云计算、大数据和人工智能讲明白了!
  17. [Hbase]Hbase容灾方案
  18. Elasticsearch相关概念了解
  19. Redis实战(七)Redis开发与运维
  20. 在C#中使用属性控制 XML 序列化来解析XML

热门文章

  1. Linux基础命令---间歇执行命令---watch
  2. vim 文档加密
  3. 1. centos7 的安装
  4. [转帖].MegaRAID SAS 9361-8i 开箱 极简测试
  5. [转帖]Windows 下如何配置Oracle ASM???
  6. Java基础(七)
  7. GitHub从小白到熟悉&lt;五&gt;
  8. 如何在LinuxKernel中操作file(set_fs與get_fs)
  9. JAVA文件类工具
  10. Codeforces 1190D. Tokitsukaze and Strange Rectangle