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

    你可能感兴趣的文章
    Python 3.4:未知格式代码“x“
    查看>>
    Python 3.5、ldap3 和 modify_password()
    查看>>
    python 3.6.8 升级至3.9版本升级
    查看>>
    Python 3.9 到 Python 3.12 的发展历程与区别
    查看>>
    python 32位和64位的区别在哪
    查看>>
    Python 3:何时使用 dict,何时使用元组列表?
    查看>>
    Python 3d 绘图 - 轴居中
    查看>>
    python ==》 字典
    查看>>
    python anaconda 安装使用
    查看>>
    python and或or 当参数传递的时候的用法
    查看>>
    Python append() 与列表上的 + 运算符,为什么这些会给出不同的结果?
    查看>>
    Python APP自动化测试工具adb与Monkey使用详解
    查看>>
    Python APP自动化测试框架Appium详解
    查看>>
    Python APP自动化测试框架开发实战
    查看>>
    python argparse模块
    查看>>
    Python asyncio库的学习和使用
    查看>>
    Python AttributeError:“dict“对象没有属性“append“
    查看>>
    Python base64和hashlib模块
    查看>>
    python basic programs
    查看>>
    python bert_gen.py 报错Unable to load weights from pytorch checkpoint file for......
    查看>>