博客
关于我
【K8s学习笔记】K8s是如何部署应用的?
阅读量:429 次
发布时间:2019-03-06

本文共 2444 字,大约阅读时间需要 8 分钟。

Kubernetes基础架构与应用部署实践

Kubernetes基础架构回顾

Kubernetes(简称K8s)是一款开源的容器编排引擎,基于容器化技术(例如Docker)构建高效的云原生应用部署环境。其核心架构由控制平面(Master节点)和执行节点(Node节点)组成。

控制平面组件

  • kube-apiserver:K8s的访问入口,接收所有API请求并存储在etcd中。
  • etcd:一个高可用性的键值存储系统,用于保存集群状态和配置数据。
  • kube-scheduler:负责监控节点状态,调度容器到适当的节点。
  • kube-controller-manager:管理集群资源,包括节点、副本、端点、账户与令牌等。
  • cloud-controller-manager:与云服务提供商交互,管理节点、路由、服务和数据卷。

执行节点组件

  • kubelet:每个节点上的管理进程,负责容器运行和节点状态监控。
  • kube-proxy:维护网络转发规则,实现Service的网络流量转发。
  • 容器运行时环境(CRI):支持多种容器技术,确保容器运行环境一致性。

Pod与Service、Label概念

Pod概念

Pod是K8s中最小的、可调度的部署单元。一个Pod可以包含一个或多个紧密相关的容器。Pod的结构包括:

  • Pause容器:作为根容器,负责共享IP和Volume。
  • 业务容器:与Pause容器关联的用户业务容器。

Pod的设计原因:

  • 将一组容器视为一个单元,简化状态检测和资源管理。
  • 通过共享IP和Volume,简化容器间通信和文件共享。

Service概念

Service是K8s中核心资源之一,其作用是为一组Pod提供唯一的访问地址。Service定义了一个ClusterIP,仅集群内的容器才能通过此IP访问到Service。通过Label Selector,Service可以动态绑定相关Pod,实现负载均衡和服务发现。

Label概念

Label是K8s中用来标记资源的关键技术。每个资源对象可以定义多个Label,Label可以作为键值对或集合使用。Service通过Label Selector动态选择目标Pod,实现服务路由和负载均衡。

Service动态绑定Pod

Service动态绑定Pod的实现依赖于Label和kube-proxy。定义Pod的Label标签,Service在创建时定义Label Selector(类似于SQL查询规则),kube-proxy通过这些规则选择目标Pod并建立路由表。

部署应用实践(Minikube)

安装Kubectl

sudo su -apt-get update && apt-get install -y apt-transport-httpscurl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -cat /etc/apt/sources.list.d/kubernetes.listdeb > /dev/nullapt-get update && apt-get install -y kubelet kubectl

安装Minikube

curl -Lo minikube-linux-amd64-1.11.0-aliyuncs http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.11.0/minikube-linux-amd64sudo install minikube-linux-amd64-1.11.0-aliyuncs /usr/local/bin/minikube

部署K8s集群

minikube start --driver docker --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version v1.18.3

部署Pod和Service

kubectl create deployment hello-minikube --image=registry.cn-hangzhou.aliyuncs.com/google_containers/echoserver:1.4kubectl expose deployment hello-minikube --type=NodePort --port=8080minikube service hello-minikube --url

浏览器访问

minikube service hello-minikube

查看Pod描述

kubectl describe pod hello-minikube

部署流程原理

  • 初始化:kubelet、kube-scheduler、kube-controller-manager、kube-proxy向kube-apiserver注册自身信息并监听watch接口。
  • 创建Pod:kubectl发送创建Pod请求,kube-apiserver存储到etcd并通知kube-scheduler。
  • 调度Pod:kube-scheduler监测节点负载,创建Pod部署描述并通知kubelet。
  • 拉取镜像:kubelet拉取镜像,创建Pause容器和业务容器,共享Pod IP和Volume。
  • 创建Service:kubectl expose命令创建Service,kube-proxy收到事件并建立路由表。
  • 请求处理:访问NodePort地址,kube-proxy根据路由表转发到Service,负载均衡到Pod。
  • 通过以上步骤,可以在Minikube环境中部署和测试K8s应用,了解其工作原理和实践操作方法。

    转载地址:http://cqauz.baihongyu.com/

    你可能感兴趣的文章
    pandas 根据值从多列中的一列查找
    查看>>
    Pandas 根据布尔条件选择行和列
    查看>>
    pandas 滚动窗口 - datetime64[ns] 未实现
    查看>>
    pandas 版本兼容特定的蟒蛇和NumPy配置吗?
    查看>>
    pandas 生成excel多级表头
    查看>>
    Pandas 的 DataFrame 详解-ChatGPT4o作答
    查看>>
    pandas 读取excel数据,以字典形式输出
    查看>>
    Pandas 读取具有浮点值的 csv 文件会导致奇怪的舍入和小数位数
    查看>>
    pandas 适用,但仅适用于满足条件的行
    查看>>
    pandas 重新采样到每月的特定工作日
    查看>>
    pandas :按移位分组和累加和(GroupBy Shift And Cumulative Sum)
    查看>>
    pandas :检测一个DF和另一个DF之间缺失的列
    查看>>
    Pandas-从具有嵌套列表列表的现有列创建动态列时出错
    查看>>
    Pandas-通过对列和索引的值求和来合并两个数据框
    查看>>
    pandas.columns、get_dummies等用法
    查看>>
    pandas.DataFrame.copy(deep=True) 实际上并不创建深拷贝
    查看>>
    pandas.read_csv()的详解-ChatGPT4o作答
    查看>>
    PANDAS.READ_EXCEL()输出‘;溢出错误:日期值超出范围‘;而不存在日期列
    查看>>
    pandas100个骚操作:再见 for 循环!速度提升315倍!
    查看>>
    Pandas:对给定列求和 DataFrame 行
    查看>>