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

    你可能感兴趣的文章
    nginx 后端获取真实ip
    查看>>
    Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
    查看>>
    nginx 常用配置记录
    查看>>
    Nginx 我们必须知道的那些事
    查看>>
    Nginx 的 proxy_pass 使用简介
    查看>>
    Nginx 的配置文件中的 keepalive 介绍
    查看>>
    Nginx 负载均衡详解
    查看>>
    nginx 配置 单页面应用的解决方案
    查看>>
    nginx 配置~~~本身就是一个静态资源的服务器
    查看>>
    Nginx下配置codeigniter框架方法
    查看>>
    nginx添加模块与https支持
    查看>>
    Nginx的Rewrite正则表达式,匹配非某单词
    查看>>
    Nginx的使用总结(一)
    查看>>
    Nginx的是什么?干什么用的?
    查看>>
    Nginx访问控制_登陆权限的控制(http_auth_basic_module)
    查看>>
    nginx负载均衡器处理session共享的几种方法(转)
    查看>>
    nginx负载均衡的五种算法
    查看>>
    Nginx配置ssl实现https
    查看>>
    Nginx配置TCP代理指南
    查看>>
    Nginx配置代理解决本地html进行ajax请求接口跨域问题
    查看>>