博客
关于我
【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/

    你可能感兴趣的文章
    npm错误 gyp错误 vs版本不对 msvs_version不兼容
    查看>>
    npm错误Error: Cannot find module ‘postcss-loader‘
    查看>>
    npm,yarn,cnpm 的区别
    查看>>
    NPOI之Excel——合并单元格、设置样式、输入公式
    查看>>
    NPOI初级教程
    查看>>
    NPOI利用多任务模式分批写入多个Excel
    查看>>
    NPOI在Excel中插入图片
    查看>>
    NPOI将某个程序段耗时插入Excel
    查看>>
    NPOI格式设置
    查看>>
    NPOI设置单元格格式
    查看>>
    Npp删除选中行的Macro录制方式
    查看>>
    NR,NF,FNR
    查看>>
    nrf24l01+arduino
    查看>>
    nrf开发笔记一开发软件
    查看>>
    nrm —— 快速切换 NPM 源 (附带测速功能)
    查看>>
    nrm报错 [ERR_INVALID_ARG_TYPE]
    查看>>
    NS3 IP首部校验和
    查看>>
    NSDateFormatter的替代方法
    查看>>
    NSError 的使用方法
    查看>>
    nsis 安装脚本示例(转)
    查看>>