一文读懂kubernetes

容器编排管理平台

  • 以Pod(容器组)为基本的编排和调度单元以及声明式的对象配置模型(控制器、configmap、secret等)
  • 资源配额与分配管理
  • 健康检查

微服务支撑平台

  • 服务发现、服务编排与内部路由支持
  • 服务快速部署和自动负载均衡
  • 提供对“有状态”的支持

可移植的云平台

  • 新一代应用云化的事实标准,成为面向云原生应用的新可移植层、即新“云平台”
  • 为用户提供简单且一致的容器化应用部署、伸缩和管理机制,形成新的、通用的应用云化模型
  • 云厂商锁定的问题得以解决,云应用支持跨云迁移

k8s hello word演示

service部署

#创建hello-service服务
kubectl create -f hello-service.yaml --record
#查看服务是否创建成功
kubectl get svc|grep hello-service
#查看服务的详细信息
kubectl describe svc|hell-service
#启动前台可以访问的k8s内部的容器
kubectl  run -i --tty busbox --image=busybox --restart=Never
#查看服务的dns地址
nslookup hello-service

Deployment部署

#创建deployment
kubectl create -f hello-deployment.yaml --record=true
#查看deployment
kubectl get deployments

请求的自动负载均衡

#查看部署pods的信息
kubectl get pods|grep hello

#查看部署的日志 deployname可以通过pods信息中获得
kubectl logs -f deployname

查看两个pods的日志可以看到负载均衡的效果

服务伸缩

#使修改的文件生效
kubectl apply -f hello-deployment.yaml

服务的版本升级

修改版本后用以下命令监控

#查看版本升级的日志
kubectl rollout status deployment/hello-deployment
#回退到上一个版本
kubectl rollout undo deployments/hello-deployment

Master组件

Kubernetes集群大脑,控制平面

所有集群的控制命令都传递给Master组件并在其上执行

每个Kubernetes集群至少有一套Master组件

每套master组件包括三个核心组件(apiserver,scheduler和controller-manager)以及集群数据配置中心etcd

API Server:

集群控制的唯一入口,是提供kubernetes集群控制Restful API的核心组件
集群内各个组件间数据交互和通信的中枢
提供集群控制安全机制(身份认证、授权以及admission control)

Schelduler

通过API Server的watch接口监听新建Pod副本信息,并通过调度算法为该Pod选择一个最合适的Node
支持自定义调度算法provider
默认调度算法内置预选策略和优选策略,决策考量资源需求、服务质量、软硬件约束、亲缘性、数据局部性等指标参数

ControllerManager

集群内各种资源controller的核心管理者
针对每一种具体的资源,都有相应Controller
保证其下管理的每个Controller所对应的资源始终处于期望状态

每个Controller的逻辑

for{
    获取资源期望状态
    获取资源当前状态
    改变:当前状态 -> 期望状态
}

Etcd:

Kubernetes集群的主数据库,存储着所有资源对象以及状态
默认与Master组件部署在一个Node上
Etcd的数据变更都是通过API Server进行

Node

Node:Kubernetes集群中真正的工作负载节点

kubernetes集群由多个Node共同承担工作负载,Pod被分配到某个具体的Node上执行
kubernetes通过node controller对node资源进行管理,支持动态在集群中国添加或删除node
每个集群node上都会部署kuberlet和Kube-proxy两个组件

Kube-proxy:运行在每个Node上

service抽象概念的实现,将到service的请求按策略(负载均衡)算法分发到后端Pod(Endpoint)上

默认使用iptables mode实现

支持nodeport模式,实现从外部访问集群内的service

Kubernetes架构和组件:

两类节点:Master和Node
Master组件:apiserver,scheduler,controller
节点组件:kubelet,kube-proxy

kubernetes基本概念

kubernetes对象

是一种持久化的、用于表示集群状态的实体

kubernetes示意图

Metedata属性

Name和UID

kubernetes集群中左右对象都通过name和UID明确标识

API中的对象访问路径:/api/{version}/namespaces/{namespace}/{object-kind}/name 比如/api/v1/namespaces/default/pods/hello-kubernetes

在kubernetes集群的整个生命周期内创建的每个对象实例都具有不同的UID

Namespace

不仅仅是一个属性、本身也是一个object

namespace:用于将物理集群划分为多个虚拟集群

namespace间完全隔离,因此也常被用来隔离不同的用户以及权限

内置三个namespaces;default、kubet-system和kube-public,Node和PersistentVolume不属于任何namespace

Label 标签

label用于建立集群对象之间的灵活的、松耦合的多维关联关系

一个label是一个键-值对,其中的key、value均由用户自己定义

label可以附着任何对象上,每个对象也可以有任意个标签。标签可以在对象定义时附加上,也可以通过命令动态管理标签

label可以将有组织的结构映射到集群对象上,从而形成一个与现实世界管理结构同步对应松耦合的、多维对象管理结构

通过label selector查询和筛选建立对象间的关系

Annotations注解

可以将任意非标识性的元数据附加到对象上

Annotations也是以键值对形式呈现

工具和库可以检索到并使用这些Annotations元数据

将数据作为Annotation附着在对象上,有利于创建一些用于部署,管理和做内部检查的共享工具或客户端

kubernetes对象分类

kubernetes 常用对象分为四类:

workload
discovery&loadbalance
config&storage:向应用中注入配置信息或者将数据持久化保存到容器外的
cluster:定义了集群自身的数据如何配置

pod 一个有特定关系的容器集合

pod是集群中可以创建和部署的最小且最简的kubernetes对象单元

pod也是一种封装,它封装了应用容器,存储资源,独立的网络IP以及决定容器如何运行的策略选项

每个pod顶置一个Pause容器,其名字空间,IPC资源,网络和存储资源被Pod内其他容器共享。pod中的所有容器紧密协作,并且作为一个整体被管理,调度和运行

pod生命周期
pod是一个非持久性实体

![](http://7xsaec.com1.z0.glb.clouddn.com/pod%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F.png)

Controllers

controller是kubernetes核心对象之一

controller用于保证集群内一组pod始终按照某种期望的状态(desired state)正常运行

状态包括:pod副本数量、节点选择、资源约束、持久化数据维持等

kubernetes支持多种controller,常用的deployment,replicaset,deamonst等

replicaset

确保健康pod的副本数始终满足用户定义的数量

前身是ReplicationController(rc)

相比rc,增加集合式label selector的支持

支持单独使用,但更多隐藏在deployment控制器后面,由deployment自动管理

Deployment

为Pod和ReplicaSet提供了声明式的定义(declarative)

用户在deployment文件中描述期望状态,Deployment controller就会自动将Pod和Replica Set的实际状态改变到期望状态

Deployment支持Pod的RollingUpdate,并自动管理背后的ReplicaSet

Deployment支持将pod Rollback到之前的任意revision(仅限于pod-template模板改动)

StatefulSet

提供对有状态的应用的部署和控制的支持

DeamonSet

保证在每个Node上都运行一个Pod副本

适用场景:系统Daemon程序、监控跟踪、日志收集等

ConfigMap

常用来向Pod提供非敏感的配置信息

Secret

Secret解决的是集群内密码,token,秘钥等敏感数据的配置问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值