K8s集群组件、flannel网络插件、Pod详解

2023-11-05

Kubernetes

1.K8S集群架构

  • master(管理节点)
  • node (计算节点)
  • image (镜像仓库)

2.角色与功能

master功能:

  1. 提供集群的控制
  2. 对集群进行全局决策
  3. 检测和响应集群事件

master节点核心组件:

  • APIAServer:整个系统的对外接口,供客户端和其它组件调用,后端元数据存储到etcd中
  • Scheduler:负责对内部资源进行分配和调度
  • ControllerManager:负责管理控制器,相当于"大总管"
  • etcd:分布式键值数据库(key-value),K8S运行过程中产生的元数据全部存储在etcd中在·

node功能:

  1. 运行容器的实际节点
  2. 提供运行环境
  3. 在多个节点运行
  4. 水平扩展

node核心组件:

  • kubelet:负责监视Pod,包括创建、修改、删除等
  • kube-proxy:负责对Pod对象提供代理,实现service的通信与负载均衡
  • RunTime:容器管理(Docker)

镜像仓库:

  1. 存储镜像
  2. 为计算节点提供镜像支持

仓库组件:

  • Registry
  • Harbor

3.部署环境要求

Master

  • 内核版本 >=3.10
  • 最低配置 2CPU,4G内存
  • 节点中不可有重复的主机名、MAC地址、UUID
  • 卸载防火墙
  • 禁用 swap
  • 禁用 selinux

Node

  • 卸载防火墙
  • 禁用 swap、selinux
  • 配置yum仓库,安装kubeadm、kubelet、docker-ce、ipvsadm、ipset
  • 配置docker私有镜像仓库和cgroup驱动
  • 配置master主机环境/etc/hosts
  • 配置内核参数

4.flannel插件

flannel是什么

flannel实际上是一种"覆盖网络"(overlay network),也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VxLAN、AWS、VPC、GCE等数据转发方式

目的

进行路由转发,使不同主机内的容器实现互联互通

5.Pod

什么是Pod?

Pod可以由一个或多个容器组成(装容器的盒子)

Pod是kubernetes中最小的管理元素

Pod是一个服务多个进程的聚合单位

同一个Pod共享网络IP及权限、共享主机名称、共享存储设备

为什么要使用Pod?

容器服务之间有关联性

启动容器的时候需要初始化或进行相关配置

Pod的生命周期

Pod自创建开始至终止的时间范围称为生命周期

在这段时间内Pod处于多种不同状态,并执行相关操作

创建主容器为必须的操作,其它为可选操作(包括初始化容器、启动后钩子、存活性探测、就绪性探测、终止前钩子)

在这里插入图片描述

Pod的创建过程

pod是k8s的基础单元,以下为一个pod资源对象的典型创建过程:

1,用户通过kubectl或其他api客户端提交pod spec给api server;

2,api server尝试着将pod对象的相关信息存入etcd中,待写入操作执行完成,api server即会返回,确认信 息至客户端;

3,api server开始反映etcd中的状态变化;

4,所有的k8s组件均使用watch机制来跟踪检查api server上的相关变动;

5, kube-scheduler通过其watch觉察到api server创建了新的pod对象但尚未绑定至任何工作节点;

6,kube-scheduler为pod对象挑选一个工作节点并将结果信息更新至api server;

7, 调度结果信息由api server更新至etcd,而且api server也开始反映此pod对象的调度结果;

8,pod被调度到目标工作节点上的kubelet尝试在当前节点上调用docker启动容器,并将容器的结果状态回 送至api server;

9,api server将pod状态信息存入etcd中;

10,在etcd确认写入操作成功完成后,api server将确认信息发送至相关的kubelet。

在这里插入图片描述

Pod相位状态

Pending:容器创建中,但尚未调度完成

Running:所有容器都已经被kubelet创建完成

Succeeded:所有容器都已经终止了并不会被重启

Failed :Pod中的容器至少有个退出,或者是非0状态

Unknow:无法获取到Pod对象的状态信息

在这里插入图片描述

kubctl管理命令

集群信息查询
子命令 说明
help 用于查看命令及子命令的帮助信息
cluster-info 显示集群的相关配置信息
version 查看服务器及客户端的版本信息
api-resources 查看当前服务器上所有的资源对象
api-versions 查看当前服务器上所有资源对象的版本
config 管理当前节点上kubeconfig 的认证信息
Pod管理命令
子命令 说明 备注
run 创建Pod资源对象 一般用来创建Pod模板
get 查看资源对象的状态信息 可选参数: -o 显示格式
describe 查询资源对象的属性信息
logs 查看容器的报错信息 可选参数: -c 容器名称

在这里插入图片描述

系统命名空间

default:默认的命名空间,不声明命名空间的Pod都在这里

kube-node-lease:为高可用提供心跳监测的命名空间

kube-public:公共数据,所有用户都可以读取它

kube-system:系统服务对象使用的名称空间

系统核心服务都运行在kube-system名称空间中

查看名称空间

kubectl get namespace

查看名称空间中的资源对象

kubectl -n kube-system get pods

Pod资源文件

资源文件管理命令
子命令 说明 备注
exec 在某一个容器内执行特定的命令 可选参数: -c 容器名称
cp 在容器和宿主机之间拷贝文件或目录 可选参数: -c 容器名称
apply (创建/更新)资源对象 可选参数: -f 文件名称
delete 删除资源对象 可选参数: -f 文件名称
create 创建资源对象 可选参数: -f 文件名称
[root@master ~]# vim myhttpd.yaml
---   #Yaml文件的起始标志								 							
kind: Pod   #当前创建资源的类型
apiVersion: v1   #当前资源对应的版本
metadata:   #属性信息,元数据
  name: myhttpd   #属性信息,资源的名称		
spec:   #资源的特性描述(公约)
  terminationGracePeriodSeconds: 0   #宽限期(删除Pod不会立即删除,会等业务执行完毕)
  restartPolicy: Always   #服务故障策略(Always、Never、OnFailure)默认Always
  containers:   #容器资源特征描述
  - name: apache    #容器的名称
    image: myos:httpd   #启动容器使用的镜像
    stdin: true   #启用交互式
    tty: true   #分配终端
    imagePullPolicy: IfNotPresent #镜像下载策略(Always、Never、IfNotPresent($=0不重启))
    ports:   #容器使用的端口
    - protocol: TCP   #容器使用的协议
      containerPort: 80   #端口号

静态Pod

什么是静态Pod?

静态Pod是由kubelet守护进程直接管理的Pod,不需要apiServer服务器监管,是在节点上直接创建

kubelet监视每个静态Pod,在它奔溃后重新启动

删除静态Pod只能从创建Pod的节点上删除,master上无法删除

静态Pod配置路径:/var/lib/kubelet/config.yaml

资源对象文件路径:/etc/kubernetes/manifests

自定义命令

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

K8s集群组件、flannel网络插件、Pod详解 的相关文章

  • 允许出口流量流向单个 IP 地址

    我正在编写 Kubernetes 集群的网络策略 如何在出口策略中指定要授权的单个 IP 地址 而不是授权整个 IP 地址范围 一个基于的例子官方文档 https kubernetes io docs concepts services n
  • Docker 从密码数据库获取用户名时出错

    我有一个 python 脚本 我想将其容器化 测试远程 py import os import pwd try userid pwd getpwuid os stat st uid pw name except KeyError err r
  • 将mysql数据导入kubernetes pod

    有谁知道如何将我的 dump sql 文件中的数据导入到 kubernetes pod 中 直接 与处理 docker 容器的方式相同 docker exec i container name mysql uroot password se
  • Kubernetes Pod 中的容器之间共享哪些命名空间?

    Linux中有6种命名空间 Network UTS Users Mount IPC Pid 我知道所有容器与 Kubernetes Pod 中的暂停容器共享相同的网络命名空间 默认情况下 不同的容器有不同的 PID 命名空间 因为它们有不同
  • 从 docker 中的脚本创建 SQL Server 数据库

    我希望这是一个简单的问题 我在任何地方都找不到任何东西 如何在Microsoft SQL Server Docker容器 Dockerfile 我正在看以下内容Dockerfile FROM microsoft mssql server w
  • 我可以在私有 GCP 网络子网中启动 Google 容器引擎 (GKE) 吗?

    我正在尝试在私有 GCP 网络子网中启动 Google 容器引擎 GKE 我创建了自定义 Google Cloud VPC 然后我也在该 VPC 下创建了自定义专用网络访问子网 1 当我使用私有子网创建 GKE 集群时 我的 Kuberne
  • .m2 的 Docker 缓存在本地不起作用

    考虑这个 gitlab ci yml variables MAVEN OPTS Dmaven repo local root m2 repository cache key M2 paths root m2 repository 当直接在
  • 实时/热重载不适用于 dockerized NestJS API

    我遇到了一个奇怪的问题 我目前正在使用 Windows 10 并通过 WSL2 运行 docker 我在 Windows 文件管理器中克隆了存储库 并且我尝试在 DEV 中运行它 也就是说 一旦我更新了在我的本地存储库中的文件中 此更改反映
  • 禁用 Kubernetes NGINX 入口的 SSL 重定向

    默认情况下 在 Kubernetes NGINX 入口中启用 SSL 重定向 如何禁用此功能 目前的实施如下 apiVersion extensions v1beta1 kind Ingress metadata name project
  • 如何对 nginx ingress 中的特定 HTTP 方法进行基本身份验证?

    我可以使用基本身份验证创建入口 我遵循 kubernetes ingress nginx 中的模板 apiVersion extensions v1beta1 kind Ingress metadata name ingress with
  • dockerfile 没有创建目录并复制文件?

    我的 dockerfile 中有以下内容 还有很多 不过我把相关的部分贴在这里了 RUN useradd jenkins USER jenkins Maven settings RUN mkdir m2 COPY settings xml
  • Openshift pod 运行时用户 ID 与 Dockerfile 中的用户不匹配

    我们在 Dockerfile 和入口点 shell 脚本中有 默认 用户 需要在运行时执行 当我们将其部署到 Openshift 集群 4 6 中时 pod 具有不同的用户 并且由于此入口点 shell 脚本失败 因此应用程序无法启动 请求
  • 如何使用 docker 和 monorepo 组织共享库

    我拥有的 我有 2 个 python 应用程序共享一些代码 足以让我尝试将共享部分隔离到模块 包 库中 我故意使术语含糊不清 因为我不确定解决方案是什么 我的所有代码都在单一存储库中 因为我希望克服管理比我们团队成员更多的存储库的一些烦恼
  • Concourse CI 找不到 kubernetes 秘密

    当运行程序尝试检索资源时 我收到以下错误 checking failed Expected to find variables git 我的资源看起来类似于 name resource repo type git source uri ht
  • 如何从 K8s API 获取 Kubernetes 集群名称

    如标题所述 是否可以从API中找到K8s集群名称 我查了一下 API 没有找到 kubectl config current context就可以了 它输出更多一点 比如项目名称 区域等 但它应该给你你需要的答案
  • Heroku 码头部署

    我正在关注这篇文章https devcenter heroku com articles container registry and runtime https devcenter heroku com articles containe
  • 如何在arm64主机上运行amd64 docker镜像

    警告 请求的映像平台 linux amd64 与检测到的主机平台 linux arm64 v8 不匹配 并且未请求特定平台 2021 07 28 22 25 06 349222 F tensorflow core platform cpu
  • 无法连接到docker中的elasticsearch容器

    我正在尝试使用 docker 的官方 elasticsearch 镜像 我遵循了本指南 https www elastic co guide en elasticsearch reference current docker html但是当
  • 无法通过docker连接到ASP.NET Core

    大家好 人们已经关注这个问题太久了 需要一些帮助 我制作了一个 ASP NET Core 网站 没有什么特别的 只是 VS 2017 v 1 1 附带的模板 我使用 dotnet core cli 发布网站并使用此 dockerfile 构
  • Docker - 如何通过 API 将输入发送到程序

    我一直在使用 Docker 的远程 API 创建一个容器 在其中运行一个 Python 程序 附加到该容器并将写入 stdout 的输出流式传输到网络 现在 我希望我的 Python 程序接受来自 stdin 的用户输入 例如 import

随机推荐

  • 万字长文解读计算机视觉中的注意力机制(附论文和代码链接)

    文中论文和代码已经整理 如果需要 点击下方公号关注 领取 持续传达瓜货 所向披靡的张大刀 注意力机制是机器学习中嵌入的一个网络结构 主要用来学习输入数据对输出数据贡献 注意力机制在NLP和CV中均有使用 本文从注意力机制的起源和演进开始 并
  • centos登录root账户

    su root 然后输入密码 回车
  • Element 入门教程

    Element 入门 Element 布局 业务 element 美化页面 表格 表单 对话框 表单 分页工具条 页面 Element 入门 官网 https element eleme cn zh CN 引入 Element 的 css
  • scala学习-scala读取Hbase表中数据并且做join连接查询

    1 业务需求 sparkSQL on hbase sparkSQL直接读取Hbase中的两个表 进行连接查询 2 图示 绿色的线 上图中绿色的线是做过测试的 直接在hive中建表 然后load数据进去 数据文件是存储在HDFS上的 1 建表
  • 【React】setState是同步的还是异步的?

    文章目录 异步情况下的setState 控制setState的同步和异步 setState 同步 异步总结 setState 的参数接收 异步情况下的setState import React Compontent from react c
  • Spring报错 conflicts with existing, non-compatible bean definition of same name and class

    如果出现这个错误可能有两种情况 1 那就是你的spring容器中确实注入了两个同名的对象 这个需要仔细检查自己的 Service Controller component是不是有相同的value值 或者xml文件中有两个一样的id 2 就是
  • 运行Adobe提示This non-genuine Adobe app has been disabled soon

    运行Adobe提示This non genuine Adobe app has been disabled soon这个问题 如何解决呢 小编为大家带来了详细的解决方案 一起来看看吧 分享一个临时处理可用的方法 需要用到的软件 Radio
  • 桌面下雪小程序 WIN32

    想起以前还没有上大学的时候 过圣诞节 有同学发了一个桌面下雪的小程序 当看到效果的 哇 当时觉得好高端 就想什么时候我也能写出这么一个程序 学了计算机之后 发现这完全可以实现 于是就准备写一个 当卡壳的时候在网上找资料 结果发现在网上找到的
  • HashMap为什么使用红黑树而不用普通的AVL树

    红黑树是一种平衡二叉树 要求从根到叶子的最长路径不会超过最短路径的2倍 AVL树是高度平衡的二叉树 左右子树树高不超过1 补充 AVL是Adelson Velskii和Landis树的缩写 是一种用于排序的二叉搜索树 一般用平衡因子判断是否
  • 操作生产库之前--你应该做什么

    操作生产库之前 你应该做什么 操作之前的数据库风险单 在操作生产库一般可能会出现无法预知的未知因素 这可能给数据库的操作带来意外的麻烦 这些都是在操作之前 应该考虑的 数据库操作者 操作开始时间 操作时间范围 预计工作时间的两倍半 可能出现
  • 为什么程序员一定要会用Google和Stack Overflow?

    内容简介 前言 为什么用Google不用百度 为什么用Stack Overflow 小结 前言 下文中 谷歌统一用Google表示 作为程序员 用Google比用百度更节省时间 此话不假 在法国工作也有4年了 加上之前的两个6个月的实习 勉
  • angularjs中post请求进行跨域

    post请求进行跨域 angularjs内置封装了类ajax的网络服务 http 所以实现了依赖外部插件来完成完整的前后端分离方案 scope main getData function http method POST url http
  • Git基于已有分支创建新的分支,简单的git 命令

    准备工作 进入要创建git分支项目目录 打开git命令行 1 基于已有分支代码创建新的分支 git checkout b new branch name origin source branch 2 将代码推送到新创建的git分支上 git
  • Qt Creator使用内存泄漏检测工具Valgrind

    Qt Creator使用内存泄漏检测工具Valgrind 随着软件变得越来越复杂 内存泄漏和野指针问题已经成为程序员最头痛的问题之一 幸运的是 现代IDE提供了许多工具来帮助我们解决这些问题 在这篇文章中 我们将介绍如何在Qt Creato
  • 单价数量和总价的公式_小学六年超全的数学公式!家长们赶紧给孩子看过来……...

    小学数学基础知识整理 一到六年级 小学一年级 初步认识加减法 学会基础加减 小学二年级 完善加减法 表内乘法 学会应用题 基础几何图形 小学三年级 学会万以内加减法 长度单位和质量单位 倍数的认知 多位数乘一位数 时间量及单位 长方形和正方
  • 租赁OLED透明屏:打造独特商业体验的智慧选择

    近年来 OLED透明屏技术在商业领域中迅速崛起 其高透明度和卓越的图像质量为商家创造了全新的展示方式 租赁OLED透明屏作为一种智慧选择 不仅能提升品牌形象和吸引力 还能创造与众不同的视觉体验 对此 尼伽将和大家一起深入探讨租赁OLED透明
  • 如何从零开始搭建公司自动化测试框架?

    搭建的自动化测试框架要包括API测试 UI测试 APP测试三类 以上三类其实可以简化为两类 那就是 1 接口自动化测试框架搭建 2 UI自动化测试框架搭建 没问题 安排 且是手把手教你如何搭建以上两类自动化测试框架 刷到这个问题的测试人员
  • Ubuntu上vscode调试C/C++代码

    这篇文章起初是我看了一个B站的视频 作者讲述了如何在Ubuntu的 环境中通过使用vscode调试C C 代码 这个教程非常好 也非常推荐给大家 但是这个教程有一个局限性 就是他在他的公共号上写的教程非常简略 以至于我想再次看一遍 需要重新
  • 微信小程序引入背景图的三种方法

    1 直接在标签里加上style样式 加上背景图
  • K8s集群组件、flannel网络插件、Pod详解

    文章目录 Kubernetes 1 K8S集群架构 2 角色与功能 3 部署环境要求 Master Node 4 flannel插件 flannel是什么 目的 5 Pod 什么是Pod 为什么要使用Pod Pod的生命周期 Pod的创建过