k8s pod restartcount 改0_和我一起学k8s(一)初识kubernetes

10bce6e5d7589b6fdf699dbe5df079ea.png

kubernetes

作者:DevOps旭

来自:DevOps探路者

一、什么是kubernetes

kubernetes是一款全新的,基于容器技术的分布式架构方案,他是脱胎于谷歌严守秘密十几年的绝密——Borg系统开源出来。Borg系统在谷歌是一个经受住了十几年的考验,可实现大规模集群管理的系统,它基于容器技术,实现了资源管理的自动化,跨数据中心的资源利用率的最大化。但是由于严格的保密协议,外界无人知晓Borg系统的工作方式,直到2015年4月,伴随着Borg论文的发布,人们才得以对他有更多的了解,同时发布的,便是kubernetes。

kubernetes是一个开放的平台,它并不会局限于任何一种语言,也不会限定任何编程接口,所以任何语言开发的服务,都可以被映射为kubernetes的Service,同时通过标准的TCP通信协议进行交互。而kubernetes最为优秀的特性之一便是没有任何入侵性,无论是语言,框架还是中间件,所以非常方便服务向kubernetes迁移。

而kubernetes作为一个完备的分布式系统支撑平台,自身具有强大的集群管理能力,包括安全机制,准入机制,多租户支撑能力,服务注册及自动发现能力,负载均衡能力,故障发现及自我修复能力,资源调度能力等等。因此kubernetes是一个全新的分布式架构解决方案。

二、为什么要使用kubernetes呢?

使用kubernetes的理由千千万,而技术驱动永远都是IT行业的第一驱动力。不过回顾历史,在2013年,docker的问世,以其简练易用的使用方式,极大的降低了容器的使用门槛,但是由单机走向集群已成为必然,随后kubernetes横空出世,并且由Google联合20多家公司一起创立了CNCF(Cloud Native Computing Foundation,云原生计算基金会),一起推广kubernetes,开创了云原生的新时代。

而kubernetes带来的便利也是显而易见。首先,kubernetes实现了一个一站式式的方案,简化了老式的复杂的团队协作方案。其次,可以拥抱微服务架构,kubernetes帮我们实现了实例的多副本,副本数量动态控制,滚动式升级、回退,具有超强的稳定性和高速迭代能力。第三,简化了服务上云的难度,同时现在多家公有云也均支持k8s。

三、kubernetes的架构

kubernetes架构包括etcd集群,master节点,node节点,如下图所示

c4c8bd32c69616a9e0d0b1d27e016314.png

本文先简单介绍一下k8s,后续后对架构进行详细的拆解。

1、ETCD集群

ETCD集群作为一个分布式集群,具有响应快,一致性key-value的优势,在k8s架构中,API-SERVER是唯一一个可以与ETCD集群通信的组件,将包括pod、rs、service等一切创建的对象写入到etcd集群中,并且通过增强乐观锁系统、验证系统的健壮性,而ETCD集群也是k8s唯一存储集群状态和元数据的地方。

2、API-SERVER

API-SERVER是k8s的中心组件,其他组件会通过restful API的形式调用API-SERVER,用来对集群进行CRUD操作,并将数据存储到ETCD中

3、SCHEDULER

SCHEDULER通过RESTFUL API监听 API-SERVER,将等待创建的pod分配到node节点上。他是通过和API-SERVER的交互,更新pod的状态,然后由kubelet监听API-SERVER,获取pod的状态并进行pod的创建。

4、CONTROLLER-MANAGER

CONTROLLER-MANAGER通过与API-SERVER的交互,获取资源的状态变化,当发生故障或者是期望状态改变时,CONTROLLER-MANAGER会尝试将其状态调整为期望状态,以确保集群始终处于预期的工作状态。

5、KUBELET

KUBELET负责所有运行在NODE节点上的组件,包括在API-SERVER中注册该节点,监听API-SERVER并创建POD,并与API-SERVER交互,更新POD的实时状态。

6、KUBE-PROXY

用于实现集群的通信,将service的访问请求分发到后端的POD上。

四、kubernetes的基本概念及常用命令

1、pod

pod是kubernetes最重要的基本概念,也是k8s中的最小运行单元,一个pod中可以运行一个或多个的container及一个管理container——pause,如下图

ff5210a7026bee911d46aa16af2c6514.png

pause

在一个pod内pause作为管理容器,为其他container提供共享IP、共享volume

关于pod 常用命令包括

kubectl get pod -n $namespace 来获取pod列表kubectl get pod -n $namespace -o wide 可以看到pod的分布kubectl describe pod $podid -n $namespace 来查看pod的详情及事件kubectl exec pod $podid -n $namespace bash -c $container 可进入pod内的容器中kubectl exec pod $podid -n $namespace -c $container -- command 可在pod内的容器中执行shell命令

2、Deployment

Deployment是kubernetes在1.2中引入的概念,通过其内部的ReplicaSet控制器来实现滚动升级,常用场景包括创建Deployment来完成POD副本的创建、检查Deployment状态,个,更新Deployment,回退Deployment,动态扩容Deployment等等,常用命令包括

kubectl create deployment nginx --image=nginx 创建一个nginx的Deploymentkubectl scale deployment nginx --replicas=3 将nginx的deployment扩容为3副本kubectl set image deployment nginx nginx=nginx:1.16 更新nginx的镜像为nginx:1.16kubectl rollout undo deployment nginx 回退Deployment到上一个版本

3、StatefulSet

有状态应用的控制器,此控制器的pod具有如下特点

a、具有稳定唯一的标识,如mysql-0,mysql-1,且第一个必定为0

b、启停受顺序控制,启动第n个时,前n-1个必须是运行且准备好的状态

c、采用稳定的持久卷,以确保数据的安全

d、需要为每个pod创建单独的DNS,域名为$podnname.$headlessservicename,如mysql-0.mysql

4、service

service是一个服务的访问入口,且service自带复杂均衡的功能。

5、job

批处理资源,此类job是短暂运行,1.5后引入了cronjob,解决了需要定时反复执行的问题。

6、Namespace

命名空间,用于划分逻辑分区

7、PV/PVC

网络存储,具有如下几个特点

a、PV只能是网络存储,不属于任何node,但可以在node上访问

b、PV是独立于pod之外的

总的来说,k8s中资源种类繁多,这里就不做深入解读了,后续会针对资源一一深入解析。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值