kubernetes理论概念详情(K8S)

2023-11-04

--------------------------1.优势---------------------------------
--------------------------2.四组基本概念---------------------
--------------------------3.核心组件---------------------------
--------------------------4.其他概念----------------------------
--------------------------5.基本命令----------------------------
--------------------------6.kubeadm操作及命令------------

最近在学k8s,整理了一些理论知识,刚入门学习理论比较难,理论比较枯燥,但建议都要记起来。真的很重要。

1.优势

1.自动装箱,水平扩展,自我修复。
2.服务发现和负载均衡
3.自动发布(默认滚动发布模式)和回滚
4.集中化配置管理和秘钥管理
5.存储编排
6.任务批处理运行
。。。

2.四组基本概念

●Pod/Pod控制器
●Name/Namespace
●Label/Label选择器
●Service/Ingress

Pod

Pod是K8S里能够被运行的最小的逻辑单元(原子单元)
1个Pod里面可以运行多个容器,它们共享UTS+NET+IPC名称空间
可以把Pod理解成豌豆荚,而同一Pod内的每个容器是一颗颗豌豆
一个Pod里运行多个容器,又叫:边车(SideCar)模式

Pod控制器

●Pod控制器是Pod启动的一种模式,用来保证在K8S里启动的Pod应始终按照人们的预期运行(副本数,生命周期,健康状态检查…)
●K8S内提供了众多的Pod控制器,常用的有以下几种:
Deployment
DaemonSet
ReplicaSet
StatefulSet
Job
Cronjob

Name

●由于K8S内部,使用“资源”来定义每一 种逻辑概念(功能)故每种”资源”,都应该有自己的 ”名称”。
●资源”有api版本( apiVersion )类别( kind )、元数据( metadata )、定义清单( spec)、状态( status )等配置信息。
●"名称”通常定义在“资源”的"元数据”信息里。

Namespace

●随着项目增多、人员增加、集群规模的扩大,需要一种能够隔离K8S内各种“资源”的方法,这就是名称空间
●名称空间可以理解为K8S内部的虚拟集群组
●不同名称空间内的“资源” ,名称可以相同,相同名称空间内的同种"资源”,"名称” 不能相同
●合理的使用K8S的名称空间,使得集群管理员能够更好的对交付到K8S里的服务进行分类管理和浏览
●K8S里默认存在的名称空间有: default、 kube-system、 kube-public
●查询K8S里特定“资源”要带上相应的名称空间

Label

●标签是k8s特色的管理方式 ,便于分类管理资源对象。
●一个标签可以对应多个资源,一个资源也可以有多个标签,它们是多对多的关系。
●一个资源拥有多个标签,可以实现不同维度的管理。
●标签的组成: key=value与标签类似的,还有一种"注解”( annotations )

Label选择器

●给资源打上标签后,可以使用标签选择器过滤指定的标签
●标签选择器目前有两个:基于等值关系(等于、不等于)和基于集合关系(属于、不属于、存在)
●许多资源支持内嵌标签选择器字段
matchLabels
matchExpressions

Service

●在K8S的世界里,虽然每个Pod都会被分配一个单独的IP地址 ,但这个IP地址会随着Pod的销毁而消失
●Service (服务)就是用来解决这个问题的核心概念
●一个Service可以看作一 组提供相同服务的Pod的对外访问接口
●Service作用于哪些Pod是通过标签选择器来定义的
Service实现类型:
ClusterIP:提供一个集群内部的虚拟IP地址以供Pod访问(默认模式)
NodePort:在Node上打开一个端口以供外部访问
LoadBalancer:通过外部的负载均衡器来访问
ClusterIP是默认模式,LoadBalancer需要额外的模组来提供负载均衡

Ingress

●Ingress是K8S集群里 工作在OSI网络参考模型下,第7层的应用 ,对外暴露的接口
●Service只能进行L 4流量调度,表现形式是ip+port
●Ingress则可以调度不同业务域、不同URL访问路径的业务流量

注(访问顺序):Ingress --> service–>pod–>docker

3.核心组件

1.配置存储中心–>etcd服务
2.主控(master)节点
●kube-apiserver服务
●kube-controller-manager服务
●kube-scheduler服务
3.运算( node )节点
●kube-kubelet服务
●Kube-proxy服务
4.CLI客户端
CLI客户端
●kubectl
5.核心附件
●CNI网络插件→flannel/calico
●服务发现用插件→coredns
●服务暴露用插件> traefik
●GUI管理插件> Dashboard

Apiserver(k8s集群的大脑)

●提供了集群管理的RESTAPI接口(包括鉴权、数据校验及集群状态变更)
●负责其他模块之间的数据交互,承担通信枢纽功能
●是资源配额控制的入口
●提供完备的集群安全机制

controller-manager(控制器管理器)

由一系列控制器组成,通过apiserver监控整个集群的状态,并确保集群处于预期的工作状态
●Node Controller
●Deployment Controller
●Service Controller
●Volume Controller
●Endpoint Controller
●Garbage Controller
●Namespace Controller
●Job Controller
●Resource quta Controller

Scheduler(调度程序)(监控node资源的状况)

●主要功能是接收调度pod到适合的运算节点上
●预算策略( predict )
●优选策略( priorities )

Kubelet(容器的搭起,销毁等动作)(负责pod的生命周期,运行node上)(容器的守护进程)

●简单地说, kubelet的主要功能就是定时从某个地方获取节点上pod的期望状态(运行什么容器、运行的副本数量网络或者存储如何配置等等) ,并调用对应的容器平台接口达到这个状态
●定时汇报当前节点的状态给apiserver,以供调度的时候使用
●镜像和容器的清理工作保证节点上镜像不会占满磁盘空间,退出的容器不会占用太多资源

kube-proxy(发现机制,运行在node上,最先用iptables做隔离,现在流行用ipvs,简单的网络代理,和负载均衡器,更方便)

●是K8S在每个节点上运行网络代理, service资源的载体
●建立了pod网络和集群网络的关系( clusterip- >podip )
●常用三种流量调度模式
●Userspace (废弃)
●Iptables (废弃)
●Ipvs(推荐)
●负责建立和删除包括更新调度规则、通知apiserver自己的更新,或者从apiserver哪里获取其他kube-proxy的调度规则变化来更新自己的
Endpoint Controller 负责维护Service和Pod的对应关系
Kube-proxy负责service的实现,即实现了K8s内部从pod到Service和外部从node port到service的访问

注:Pod网络是kube-kubelet提供,不是直接由Kube-proxy提供

各组件的工作流程:

User(采用命令kubectl)—> API server(响应,调度不同的Schedule)—> Schedule(调度)—> Controller Manager(创建不同的资源)—> etcd(写入状态)—> 查找集群
(node哪个有资源,通过Schedule,到对应的node上创建pod)

4.其他概念

RC(ReplicationController)

Kubelet需要管理大量的pod,而显而易见的是通常情况下一个应用不会以单独一个pod完成,比较常见的是使用大量的Pod组成一个简单应用,管理这些大量的pod的一个方案RC
RC可以指定pod的副本数量,并且在其中有Pod故障时可以自动拉起新的pod,大大简化了维护难度
目前建议采用ReplicaSet和Deployment代替RC

ReplicaSet副本控制器

确保pod的一定数量的分数(replica)在运行,如果超过这个数量,制器会杀死一些,如果少了,控制器会启动一些。
用来解决pod的扩容和缩容问题。
新一代的RS,主要功能和RC一样,维持pod的数量稳定,指定pod的运行位置,使用方法也相似,主要区别是更新了api,支持更多功能
RS不建议直接使用,而是用更上层的概念Deployment调用ReplicaSet
通常用于无状态应用,与Deployments配置使用。

Deployments

提供官方的用于更新Pod和ReplicaSet的方法,Deployments用来定义您预期的应用状态。
Deployments集成了上线部署,滚动升级,创建副本,暂停上线任务,恢复上线任务,回滚到以前某一版本(成功/稳定)的Deployments等功能
目前最常用的控制器就是Deployment,创建Deployment时也会创建ReplicaSet
Deployment可以管理一个或多个RS,并且通过RS来管理pod

注意:一个完整的应用一般都是多个Deployment构成

StatefulSets有状态应用用于解决各个pod实例独立生命周期管理,提供各个实例的启动顺序和唯一性
稳定,唯一的网络标识符
稳定,持久存储
有序的,优雅的部署和扩展
有序,优雅的删除和终止
有序的自动滚动更新
DaemonSet能够让所有的node节点运行同一个Pod。(一般用来部署代理,如果收集日志的代理,可以通过DaemonSet快速的在node上部署同一个pod)
副本数的控制是通过RS去控制的,

Service

(相当于锁定器,不会因为pod被销毁而找不到后端资源,pod销毁,Ip等信息会改变) 定义了pods的逻辑集合和访问这个集合的策略,pods集合是通过定义service时提供的label选择器完成的

Node管理机制

Container Runtime(容器) 归Kubelet进程管理
Kubelet发现机制,如果发现容器挂了,Kubelet会通过API server 监控容器状态,如果本身状态为1,变成了0,它就会去把容器再拉起来

5.基本命令

Format:Kubectl command -type name flags

常用Command:
create:(创建资源)
apply:(应用资源的配置变更,也可以代替create创建新的资源)
get:(查看资源)
describe:(查看资源的详细描述)
delete:(删除资源)
常用的flags包含-n=namespace,-o=wide(能看到宿主机)
默认namespace(default,kube-system)

查看存在有哪些namespace

Kubectl get namespace
Kubectl get ns 

查看命名空间中的存在的pod

Kubectl get pod –namespace=kube-system
Kubuctl get pod –n kube-system

运行一个Deployment
创建一个简单的deployment

Kubectl create deployment mydep –image-nginx    (mydep创建名称,基于nginx镜像)

查看deployment的创建情况

Kubectl get deployment

回显:

NAME    READY    UP-TO-DATE      AVAILABLE     AGE
mydep    1/1         1              1          2m3s

查看pod跑在哪个节点上

Kubectl get pod –ndefault

从yaml文件创建deployment

Kubectl create –f name.yaml 

查看创建结果

Kubectl get deployment

回显:

NAME    READY    UP-TO-DATE      AVAILABLE     AGE
name     3/3       3                3         114s

create –f 指从某个文件创建对应资源
可以apply代替create
主流用法,一个Pod里边只跑一个容器

6.kubeadm涉及一些操作及命令

kubeadm安装kubenetes1.18.2

1.基础环境:
设置本地DNS秘钥登录(免密登录)

ssh-keygen    ssh-copy-id root@192.168.0.99

设置node节点通过master能访问外网
参考我另一篇文档“华为云内网服务器通过公网服务器访问外网”
设置docker-ce yum仓库

yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo

2.卸载自带老版本依赖
yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine

3.安装docker-ce

yum install docker-ce docker-ce-cli containerd.io

启动docker

systemctl start docker
systemctl enable docker

配置docker加速器

vim /etc/docker/daemon.json

{     
      "registry-mirrors" : ["https://registry.docker-cn.com"]
}

4.k8s仓库取得阿里云镜像

cat /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
enable=1
yum install kubelet-1.18.2 kubeadm-1.18.2 kubectl-1.18.2

配置docker的service文件,添加环境变量,让它帮我们代理访问k8s来拉取镜像

vim /usr/lib/systemd/system/docker.service
...
[Service]
Environment="HTTPS_PROXY=http://www.ik8s.io:10080"
Environment="NO_PROXY=127.0.0.0/8,192.168.0.0/24"
...

改了service文件,需要重新加载一下

systemctl daemon-reload
systemctl restart docker
docker info

查看iptables内生的桥接相关功能,默认开启。

[root@master ~]# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
1
[root@master ~]# cat /proc/sys/net/bridge/bridge-nf-call-iptables
1

修改配置文件

vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
KUBE_PROXY=MODE=ipvs   ##指明kube_proxy使用ipvs模式
systemctl enable kubelet.service
kubeadm init --kubernetes-version=v1.18.2 --pod-network-cidr=10.10.10.0/24 --service-cidr=172.7.0.0/24 --ignore-preflight-errors=Swap

(这可能跟“科学上网”有关,由于kubeadm
默认从官网k8s.grc.io下载所需镜像,而国内无法访问。因此需要把上面在docker的service文件中设置的代理注释或删除掉,同时需要通过–image-repository指定阿里云镜>像仓库地址)

下面这个指定了阿里云镜像仓库地址:

kubeadm init --kubernetes-version=v1.18.2 --pod-network-cidr=10.10.10.0/24 --service-cidr=172.7.0.0/24 --ignore-preflight-errors=Swap --image-repository registry.aliyuncs.com/google_containers

–pod-network-cidr string
指明 pod 网络可以使用的 IP 地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配 CIDRs。
–service-cidr string
默认值:“10.96.0.0/12” 为服务的虚拟 IP 地址另外指定 IP 地址段

kubeadm join 192.168.0.102:6443 --token 4orxq1.exesrgh7hkgce60o \
    --discovery-token-ca-cert-hash sha256:20fb6b286380ccd8ec6c82fd03f790b9c4df7fb3dbfabb7bc2f83f4755e543e7

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

验证

docker image ls   ## 查看镜像
ss -ntl | grep 6443 ## kube-apiserver的端口
kubectl get cs    ##查询组件状态
kubectl get nodes   ##查询集群节点 (因为还没有部署好flannel,所以节点显示为NotReady)
kubectl get ns   ##查看命名空间

部署网络插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
docker image ls |grep flannel ##会看到下载好的flannel的镜像
kubectl get nodes ##master 节点已经Ready
kubectl get pods -n kube-system |grep flannel ##kube-system名称空间下flannel插件

节点部署

kubeadm join 192.168.0.102:6443 --token 4orxq1.exesrgh7hkgce60o \
    --discovery-token-ca-cert-hash sha256:20fb6b286380ccd8ec6c82fd03f790b9c4df7fb3dbfabb7bc2f83f4755e543e7
  ###node节点会自动拉取kube-proxy、flannel、pause镜像
kubectl get node
kubectl get image ls
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kubernetes理论概念详情(K8S) 的相关文章

随机推荐

  • OPT3001光照传感器驱动教学

    OPT3001自学笔记 OPT3001是一款低功耗环境光照度采集IC 之前的项目中有用到这颗芯片 因此在这里给大家分享一下 如果这篇文章刚好能帮到你那就更好了 一 OPT3001的寄存器 单片机是通过IIC协议读写OPT3001的寄存器来控
  • 软件测试基础理论学习记录一

    今天是学习 软件测试 的第一天 由于刚开始的综述比较简单 就一次性把前三章看完了 主要包括软测背景 软件开发过程和软测实质三部分内容 1 软件测试背景 通过几个比较有名的软件错误案例 如Intel奔腾浮点除法缺陷等 引出 软件缺陷 的概念
  • Rust数据结构——排序算法(一)

    Rust数据结构 排序算法 一 0x01 常见的排序算法 排序算法是数据结构中很常见的算法 如果你了解过数据结构 那么对 常见的排序算法有哪些 这个问题的回答都懒得答了 那么我还是来列举下吧 选择排序 插入排序 希尔排序 冒泡排序 快速排序
  • TypeScript 常用的工具类型

    TypeScript 常用的工具类型 总结了常用的工具类型 文章目录 TypeScript 常用的工具类型 Awaited
  • App测试经典面试题及参考答案

    正己守道 厚德载物 App测试面试题及参考答案 最近整理了一些关于App测试的面试题 本参照答案是本人在工作实践中总结 仅代表个人观点 如有错误 请谅解 1 问 说一些你在测试过程中常用到的adb命名 答 回答本问题时 首先不要想到哪个命名
  • Python中的继承

    Python中的继承 文章目录 Python中的继承 继承的概念 一 继承的语法 单继承 多继承 二 子类与父类 1 子类重写父类方法 2 子类调用父类的同名方法和属性 super 调用父类方法 小汇总 结语 继承的概念 面向对象编程 OO
  • NSX-T 架构(3)

    传输节点 Edge 在第一篇我们提到了Edge Edge节点 VMware NSX Edge节点是专用于运行无法分发到管理程序的网络服务的服务设备 它们被分组在一个或多个集群中 代表一个能力池 Edge不是一个干活的实例 它是个池 里面专门
  • 龙书笔记(5)

    今天说下颜色和光照 一 颜色 1 颜色表示 RGB数据可用2种不同的结构表示 1 D3DCOLOR eg D3DCOLOR brightRed D3DCOLOR ARGB 255 255 0 0 四个参数的顺序是 Alpha r g b 2
  • 用户界面的需求分析与设计原则

    一 引言 用户界面是人与计算机之间的媒介 用户通过用户界面来与计算机进行信息交换 因此 用户界面的质量 直接关系到应用系统的性能能否充分发挥 能否使用户准确 高效 轻松 愉快地工作 所以软件的友好性 易用性对于软件系统至关重要 目前国内软件
  • python课程设计——单项选择标准化考试

    功能要求 本系统采用序列或字典保存单个试题 每个数据应当包括 题干 选项 答案等信息 本系统功能 1 试题录入 可以随时添加试题 2 试题抽取 每次从试题库中可以随机抽出N道题 N由键盘输入 3 答题 用户可实现输入自己的答案 4 自动判卷
  • MySQL基础语句

    文章目录 前言 帮助信息 注释 数据库操作类语句 连接数据库 查看数据库列表 展示所有数据库 查询当前数据库叫啥 创建数据库 删除数据库 修改数据库编码格式 使用某个数据库 查看当前数据库下所有数据表 表操作 表的约束 查询表结构 查询某个
  • 看懂低压降稳压器(LDO)一篇就够了

    电源管理是电子系统中的的一个基本模块 智能手机 电脑和我们所熟知的绝大多数电子产品都需要这个模块去实现本身的功能 随着人们对电子产品便携性的追求 计算能力的增长 以及传感器的多样化 电源管理设计有了更高的要求 为了满足新的电源设计上的更高的
  • ctfshow php特性

    web89 要求使用get方式传递数据 intval函数如果数组里有值 就输出1 构造payload num 0 web90 这里使用了 intval num 0 函数调用 其中第二个参数为 0 表示使用合适的进制进行转换 intval 函
  • 巴比特

    摘要 元宇宙变得越来越重要 因为它为企业提供了一种与来自世界各地的用户进行交流和协作的新途径 从小企业到大公司 每个品牌都可以踏入虚拟世界 并从中获益 那么一般的企业如何将业务转移到元宇宙呢 这7个步骤了解一下 热点资讯 Meta 宣布大幅
  • 偏微分方程(Partial Differential Equation II)

    数学物理方法 正交曲面坐标系下的分离变量 球函数 勒让德方程的解 勒让德函数 连带勒让德函数 球谐函数 柱函数 贝塞尔方程的解 贝塞尔函数 球贝塞尔方程 偏微分方程 Partial Differential Equation I 偏微分方程
  • php网页如何适应手机端,PC网页的移动端适配兼容性应该如何实现自动适配

    概念 移动时代的今天 现如今随着智能手机的不断发展 移动端搜索的比例也在不断增加 而传统的PC站点在手机端的用户体验度很差 这容易导致大量用户的流失 所以做一个对应的手机站是非常有必要的前端代码的编写永远逃不过 兼容 二词 从前PC时代 因
  • 第四届“泰迪杯”数据分析技能赛通知

    各有关单位 为推广我国高校数据分析实践教学 培养学生数据分析的应用和创新能力 增加校企交流合作和信息共享 提升我国高校的教学质量和企业的竞争能力 由泰迪杯数据分析技能赛组织委员会主办 广东泰迪智能科技股份有限公司承办 广东省工业与应用数学学
  • cgminer 2.2.4 参数详解!

    日期 2012 02 13 分类 Cgminer 版权声明 转载时请以超链接形式标明文章原始出处和作者信息及本声明 http bitcoin blogbus com logs 192244223 html cgminer2 2 4已经发布
  • 用Cookie添加登录界面的记住密码功能

    在网上看到很多关于cookie记录登录密码的功能 但是大部分都是jsp界面 最近刚好有个项目用到了cookie功能 所以编写了这个介绍 补全一下 1 第一步 首先需要在登录界面中写一个form表单 这个不用多说
  • kubernetes理论概念详情(K8S)

    1 优势 2 四组基本概念 3 核心组件 4 其他概念 5 基本命令