k8s(1)-入门简介及概念

11 篇文章 0 订阅
本文介绍Kubernetes的部署方式,包括其基本概念、组件功能及部署流程。解释了容器化部署的优势,并介绍了Kubernetes如何实现自我修复、弹性伸缩等功能。通过实例展示了部署Nginx服务的过程。
摘要由CSDN通过智能技术生成

1.部署方式

传统部署、虚拟化部署、容器化部署

传统部署:

应用直接部署在物理机上,技术相对简单,不能为应用程序定义资源使用边界,容易发生冲突,很难合理分配资源,造成资源浪费,且应用程序之间容易相互影响,

虚拟化部署:

在一台物理机上运行多个操作系统,每个虚拟机都是独立的环境,一定程度上解决了应用程序冲突的问题,但是在一台物理机上增加了两个操作系统,操作系统本身相对臃肿,浪费部分资源。

容器化部署:

容器内的应用程序所需的硬件资源由容器提供,而不是硬件!每个容器容器有拥有自己独立的文件系统、CPU、内存、进程空间等等。注意一个pod里包含一个或多个容器!

2.容器编排

容器管理问题统称为长期编排,市面上出现一些容器编排根据,Docker SWarm、Mesos、Kubernetes。市场占有率2019年k8s占77%,现今k8s已经一家独大。

3.k8s功能

k8s本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来读节点中的容器进行管理。目的是为了实现资源管理的自动化。

自我修复:一旦某个容器奔溃、能够在1s内迅速启动新的容器。

弹性伸缩:可以根据需要,自动集群中正在运行的容器数量进行调整。

服务发现:服务通过自动发现的形式找到它所依赖的服务。

负载均衡:一个服务启动多个容器,能够自动实现请求的负载均衡。

版本回退:如果发布新版本的程序有问题,可以立即回退到原来的版本。

存储编排:可以根据容器自身需求自动创建存储卷。

4.k8s组件

 集群由master和node节点组成,两者由不同的小组件构成。

Master节点:

ApiServe:

资源操作的唯一入口,接受用户输入的命令,提供认证、授权、API注册和发现等机制。

Scheduler:

负责集群资源调度,按照预定的调度策略将Pod调度到相应的node的节点上。

ControllerManager:

负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新。

Node节点:

Kubellet:

负责维护容器的 生命周期,即通过控制docker、创建、更新、销毁容器。

KubeProxy:

负责提供集群内部的服务发现和负载均衡。

Docker:

负责节点上的各种操作,本质上多个pod就是用了docker。

以部署nginx为例子,讲解部署过程中的每一个细节,每一个组件的工作内容。

1.一旦k8s环境启动后,master和node都会将自身的信息存储到etcd数据库中

2.一个nginx的安装请求首先被发送到master的ApiSever组件。

3.ApiSever组件会调用scheduler组件来决定到底应该吧这个组件安装到那个node节点上,在此时,它会从etcd中读取各个node节点的信息,然后按照一定算法进行选择,并将选中的结果告诉ApiServe

4.ApiServe调用controller-manager去调度node节点安装nginx服务。

5.Kubelet接收到指令后,会通知Docker,然后由Docker来启动一个nginx的pod,pod是k8s的最小操作单元,容器必须跑在pod中。

6.至此,一个nginx服务就运行成功了,如果需访问nginx,就需通过kube-proxy产生访问的代理,这样外界用户就可以访问集群中的nginx。

5.重要概念

Master:集群控制节点,每个集群需要至少一个master节点负贡集群的管控

Node:工作负载节点,山master分配容需到这些nodc工作节点上,然后nodc节点上的docker负责容器的运行。

Pod: kubernetes的最小控制单元, 容器都是运行在pod中的,一个个pod中可以有1个或者多个容器

Controller:控制器,通过它来实现对pod的管理。比如启动pod、停止pod、缩pod的数量等等

Service: pod划外服务的统一入口,下面可以维护者同一类的多个pod。

Label:标签,用于对pod进行分美,同类pod会拥有相同的标签。

NameSpace:命名空间,用来隔离pod的运行环境。

6.部署工作详细过程

 执行命令:

kubectl run httpd-app --image=httpd --replicas=2

Kubernetes 部署了 deployment httpd-app,有两个副本 Pod,分别运行在 k8s-node1 和 k8s-node2

① kubectl 发送部署请求到 API Server。

② API Server 通知 Controller Manager 创建一个 deployment 资源。

③ Scheduler 执行调度任务,将两个副本 Pod 分发到 k8s-node1 和 k8s-node2。

④ k8s-node1 和 k8s-node2 上的 kubectl 在各自的节点上创建并运行 Pod。

补充两点:

1. 应用的配置和当前状态信息保存在 etcd 中,执行 kubectl get pod 时 API Server 会从 etcd 中读取这些数据。

2. flannel 会为每个 Pod 都分配 IP。因为没有创建 service,目前 kube-proxy 还没参与进来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值