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

    你可能感兴趣的文章
    Objective-C实现Gale-Shapley盖尔-沙普利算法(附完整源码)
    查看>>
    Objective-C实现gamma recursive伽玛递归算法(附完整源码)
    查看>>
    Objective-C实现gamma 伽玛功能算法(附完整源码)
    查看>>
    Objective-C实现gauss easte高斯复活节日期算法(附完整源码)
    查看>>
    Objective-C实现gaussian filter高斯滤波器算法(附完整源码)
    查看>>
    Objective-C实现gaussian naive bayes高斯贝叶斯算法(附完整源码)
    查看>>
    Objective-C实现gaussian高斯算法(附完整源码)
    查看>>
    Objective-C实现geometric series几何系列算法(附完整源码)
    查看>>
    Objective-C实现getline函数功能(附完整源码)
    查看>>
    Objective-C实现gnome sortt侏儒排序算法(附完整源码)
    查看>>
    Objective-C实现graph list图列算法(附完整源码)
    查看>>
    Objective-C实现GraphEdge图边算法(附完整源码)
    查看>>
    Objective-C实现GraphVertex图顶点算法(附完整源码)
    查看>>
    Objective-C实现greatest common divisor最大公约数算法(附完整源码)
    查看>>
    Objective-C实现greedy coin change贪心硬币找零算法(附完整源码)
    查看>>
    Objective-C实现greedy knapsack贪婪的背包算法(附完整源码)
    查看>>
    Objective-C实现GridGet算法(附完整源码)
    查看>>
    Objective-C实现half adder半加器算法(附完整源码)
    查看>>
    Objective-C实现hamiltonianCycle哈密尔顿图算法(附完整源码)
    查看>>
    Objective-C实现hamming code汉明码算法(附完整源码)
    查看>>