k8s概述

news2024/9/23 21:20:29

前言

通过linux基于cgroup,ns,及rootfs的学习,我们了解了基于容器技术原理。在大规模情况下,单单容器技术完全不够,k8s的出现就是解决

在大规模集群中存在各种各样的任务,任务之间又有着各样的关系。对于这些关系要如何处理优雅得体才是作业编排与系统管理的痛点所在

k8s架构

k8s架构由Master和Node两种节点组成,而这两种角色分别对应控制节点和计算节点。
在这里插入图片描述

Master结点

master节点,由3个紧密协作的独立组件组合而成

  • kube-apiserver 负责API服务
  • kube-shceduler 负责任务调度
  • kube-controller-manager 负责容器编排

整个集群的持久化数据,则由kube-apiserver处理后保存在etcd中

Node结点

  • 核心:kubelet,负责与容器运行时(Docker)交互。这种交互所依赖的是一个称作CRI(Container Runtime Interface),远程调用接口。其定义了容器运行时核心操作(比如:启动容器所需的参数)。
    这里通过CRI层,来实现k8s与容器层的解耦,我并不关心你使用的是什么容器技术,只要能运行标准镜像,就可以接入到Kubernetes中。
  • 除此之外,kubelet还通过gRPC与叫作Device Plugin插件交互。这个插件是用于管理GPU等宿主机的物理设备。是使用K8s进行机器学习,高性能作业,必须关注的插件。
    kubelet 另一个重要功能 调用网络插件配置容器网络与存储插件提供容器的持久化存储。这两插件与kubelet 交互接口分别是 CNI(Container Networking)与CSI(Container Storage Interface)。

k8s的设计思想

声明式API是k8s最核心的设计理念。

  1. k8s定义了编排对象,比如Pod,Job, CronJob等。
  2. 又定义了运维能力对象,比如Service,Ingress, Horizontal Pod Autoscaler(自动水平扩展器)等。

开发者,可以根据自己应用的需求,选用不同的编排对象和服务对象。这种使用方式就是所谓的“声明式API”。
在这里插入图片描述
如上,我们从容器这个最基础的概念出发,首先遇到了容器间 “紧密协作” 关系的难题,于是就有了 Pod;有了 Pod 之后,我们希望能一次启动或收缩多个应用的实例,这样就需要 Deployment 这个 Pod 的多实例管理器;有一组相同的 Pod之后,我们又需要通过固定的IP地址和端口以负载均衡方式访问它,这个时候就有了 Service。

可是,如果现在两个不同pod之间不仅有访问关系,还要求在发起时加上授权信息。最典型的盒子就是Web 访问数据库时肯定时需要密码信息。

Kubernetes 提供了一个加 Secret 服务,它把键值对的数据保存在 Etcd 中,我们使用这个密码信息时,就要用到 Secret 里的数据以 Volume 的方式挂载到容器里。

除了应用与应用之间的关系,应用的运行的形态是影响“如何容器化这个应用”的第二个重要因素

为此,k8s定义了新的,基于Pod改进的对象。

  • job,用来描述一次性运行的Pod(大数据任务)
  • DaemonSet, 用来描述每个宿主机上必须且只能运行一个副本的守护进程服务
  • CronJob, 用来描述定时任务

什么是Pod

上术介绍可以了解到 Pod在k8s 的地位是在最中心,所有的服务都是为 Pod 提供服务或者管理 Pod。 要理解Pod,则需要明白他和容器的关系

kubernetes 中最小的编排单位是Pod ,而非容器。将这个设计落实到API对象上,Container 就成了Pod属性里的一个普通字段。

要彻底理解Pod与容器的关系,就要牢记一个结论:Pod扮演的是传统部署环境中的“虚拟机”的角色,容器则是“虚拟机”中运行的“用户进程”。

即如果后期用户想配置“调度”,“网络”,“存储”,“安全”的相关属性,基本上在Pod上。

k8s的安装

2017年,在志愿者的推动下,一个独立的部署工具誔生,名叫kubeadm.

# 创建一个Master节点
$ kubeadm init

# 将一个Node 节点加入当前集群
$ kubeadm join <Master 节点的IP 和端口>

kubeadm的部署思路: 直接在宿主柚子上运行kubelet,然后使用容器部署其它的Kubernetes组件

为什么不是全部用容器技术布署?
kubelet是用来操作容器运行时的核心组件。除了跟容器运行时打交道,kubelet在配置容器网络,管理容器volume时,都需要直接操作宿主机。如果kubelet以容器运行,直接操作宿主机,就会变的很麻烦。

官网提供了几种安装方式《安装工具

初学者:还是直接使用docker desktop 提供的功能来部署《m1 mac安装docker、k8s(成功案例)》

第一个k8s程序

创建一个简单的nginx应用

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  # 指定 label,便于检索
  labels:
    app: nginx
spec:
  containers:
    - name: nginx
      # 指定镜像
      image: nginx:alpine
      # 指定暴露端口
      ports:
        - containerPort: 80

---
# 创建网络服务
apiVersion: v1
kind: Service
metadata:
  name: kube-node-service
  labels:
    name: kube-node-service
spec:
  type: NodePort      #这里代表是NodePort类型的
  ports:
    - port: 80          #这里的端口和clusterIP(10.97.114.36)对应,即10.97.114.36:80,供内部访问。
      targetPort: 80  #端口一定要和container暴露出来的端口对应,nodejs暴露出来的端口是8081,所以这里也应是8081
      protocol: TCP
      nodePort: 32143   # 所有的节点都会开放此端口,此端口供外部调用。

  selector:
    app: nginx          #这里选择器一定要选择容器的标签,之前写name:kube-node是错的。

通过以下命令进行操作

## 通过配置文件创建服务
sudo kubectl create -f nginx.yaml

## 如果有修改可使用
sudo kubectl apply -f nginx.yaml

## 移除服务
sudo kubectl delete -f nginx.yaml

## 查看服务
sudo kubectl get service

## 查看
sudo kubectl get pod

## 通过浏览器访问了
http://<nodeIP> : 32143

主要参考

《深入剖析Kubernates》
《m1 mac安装docker、k8s(成功案例)》
《第一个 k8s应用》
《理解现代云原生时代的引擎》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/611378.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

tinkerCAD入门操作(4):使用对齐工具和工作平面帮助程序

tinkerCAD入门操作(4)&#xff1a;使用对齐工具和工作平面帮助程序 介绍 在本课中&#xff0c;我们将建造一座简单的城堡。您将了解有关对齐工具、镜像和帮助程序工具的所有信息。 开始 您将使用的第一个工具是对齐工具。 无需使用鼠标仔细定位两个部分&#xff0c;对齐工具…

团队管理之性能实施团队日志6

一、从问题统计看进度风险 从统计来看&#xff0c;近三个星期过去 了&#xff0c;发现了 59 个问题。28 个是性能问题还需要再细分类型&#xff0c;现在这个还是粗了点&#xff0c;比如说配置问题、代码问题。 所以笼统说来除了这里的功能问题之外&#xff0c;其他的基本上都是…

对话中科易安市场经理:联网智能门锁之运行、运营与运维

大家好&#xff01;我是中科易安市场部的市场经理&#xff0c;相信很多中科易安联网智能门锁的新老朋友对我并不陌生&#xff0c;或许我们没有面见&#xff0c;但是每一篇中科易安发布的原创推文皆出自我手。此刻&#xff0c;我想和中科易安的产品用户、客户以及媒体朋友们&…

weblogic 重置密码|修改密码

一&#xff1a;重置密码&#xff1a; 我本机的文件目录&#xff1a; /u01/wls12214/Middleware/user_projects/domains/wls_domain/ 第一步删除&#xff1a; DefaultAuthenticatorlnit.ldift &#xff08;先对此文件备份&#xff0c;防止后续异常可复原&#xff09; 删除此文件…

使用Leangoo领歌敏捷工具实施多团队规模化敏捷

多团队大规模敏捷的场景定义&#xff1a; 多个敏捷团队开发同一个大型产品&#xff0c;几十人&#xff0c;甚至几百人开发一个产品或解决方案。 在Leangoo领歌中创建多团队大规模敏捷项目&#xff1a; 多团队规模化敏捷的项目结构&#xff1a; 在Leangoo企业中创建项目&…

图解LeetCode——230. 二叉搜索树中第K小的元素

一、题目 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 个最小元素&#xff08;从 1 开始计数&#xff09;。 二、示例 2.1> 示例 1&#xff1a; 【输入】root [3,1,4,null,2], k 1 【输出】1 2.2> 示例 2&…

数据库优化之常用的show variables、show status配置优化

文章目录 ⭐️ MySQL优化-配置优化1、show variables查看MySQL服务器配置参数1&#xff09;查看及调整系统配置变量值2&#xff09;查询缓存相关参数&#xff1a; 2、show status查看MySQL服务器运行状态值1&#xff09;调整max_connections&#xff1a;2&#xff09;调整back_…

chatgpt赋能python:Python可以烧录进硬件里吗?

Python可以烧录进硬件里吗&#xff1f; Python编程语言已经成为了越来越多的开发工程师的首选工具。这是一门易学易用的编程语言&#xff0c;以其灵活性、可读性和功能强大而受到广泛的青睐。因此&#xff0c;许多人都很自然地想知道这个问题&#xff1a;Python可以烧录进硬件…

公司大规模裁员的时间轴

正如我们常说的公司在大规模裁员之前是有很多征兆的&#xff0c;不是就拍怕脑袋决定的。 这次公司的裁员真的属于教科书级别的裁员&#xff0c;因此觉得记录下公司整个过程的时间轴是有意义的&#xff0c;希望能够给所有朋友有个参考。 也很想知道的是&#xff0c;如果是你&am…

react组件性能优化探索实践

React本身就非常关注性能&#xff0c;其提供的虚拟DOM搭配上Diff算法&#xff0c;实现对DOM操作最小粒度的改变也是非常的高效。然而其组件渲染机制&#xff0c;也决定了在对组件进行更新时还可以进行更细致的优化。 react组件渲染 react的组件渲染分为初始化渲染和更新渲染。…

PB12.5 获取ip与计算机名

/建立全局的结构s_wsadata //结构如下: //version unsignedinteger //highversion unsignedinteger //description[257] character //systemstatus[129] character //maxso…

MySQL基础知识每日总结(5)

regexp检查总是返回0(没有匹配)或者1(匹配) 一、CASE表达式 1.两种写法 ①简单case表达式 case sex when 1 then 男when 2 then 女else 其他 end②搜索case表达式 casewhen sex 1 then 男when sex 2 then 女else 其他 end以上两种写法结果相同&#xff0c;但是简单case表达…

SpringCloudAlibaba:服务注册与发现之Nacos学习

目录 一、服务注册与发现介绍 1、常见注册中心 2、服务注册与发现的基本流程是: 3、服务注册与发现的主要好处是: 二、Alibaba Nacos 介绍 三、Nacos基本使用 1.linux安装包方式单节点安装部署 1. jdk安装配置 2. nacos安装 2.Nacos集成SpringBoot实现服务注册与发现…

跨国企业的组网需求分析

【案例背景】 经济全球化的背景下&#xff0c;跨国企业如何解决数据远距离传输的问题&#xff0c;稳定、安全、快速地搭建企业内网&#xff0c;影响着业务的正常开展。 【客户需求】 这家跨国企业在国内外均有办事处&#xff0c;其中国内的办公人员需要访问位于国外的内部服务…

交直流系统潮流计算(含5种控制模式)matlab代码

目录 1主要内容 2 部分代码 3 程序结果 4 下载链接 1主要内容 该程序参考文献《交直流系统潮流计算及相互关联特性分析》&#xff0c;采用5种交直流潮流控制方式&#xff1a;1.定电流定电压 2.定电流定熄弧角 3.定功率定电压 4.定功率定熄弧角 5.定触发角定电流。以9节点系…

LNMP服务

目录 一、安装Nginx服务 1.编译安装nginx服务 2.添加nginx系统服务 二、安装Mysql服务 1.编译安装mysql服务 2.修改mysql配置文件 3.设置路径环境变量 4.初始化数据库 5.添加mysql系统服务 6.修改mysql 的登录密码 三、安装配置 PHP 解析环境 1.安装环境依赖包 2.编…

【论文阅读】Neuralangelo:高保真神经表面重建

【论文阅读】Neuralangelo&#xff1a;高保真神经表面重建 Abstract1. Introduction2. Related work3. Approach3.1.预备工作3.2.数值梯度计算3.3.渐进细节层次3.4.优化 4. Experiments4.1. DTU Benchmark4.2. Tanks and Temples4.3.细节水平4.4.消融 5. Conclusion paper proj…

(栈和队列) 1047. 删除字符串中的所有相邻重复项 ——【Leetcode每日一题】

❓1047. 删除字符串中的所有相邻重复项 难度&#xff1a;简单 给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&#xff0c;直到无法继续删除。 在完成所有重复项删除操作后返回…

小波和小波变换(应试)

零基础小白共计花费2小时38分04秒完成对小波的“平地起高楼”学习。 记录所有学习过程。 一、大致浏览PPT 这个阶段跳着看&#xff0c;太难的跳过 1.总结知识点 共四个部分 1.小波介绍 2.小波变换 小波变换的定义连续小波变换的定义离散小波变换小波重构 3.哈尔小波变换 …

华为OD机试真题 Java 实现【相对开音节】【2022Q4 100分】,附详细解题思路

一、题目描述 相对开音节构成的结构为辅音元音&#xff08;aeiou&#xff09;辅音(r除外)e&#xff0c;常见的单词有life,time,woke,coke,joke,note,nose,communicate&#xff0c;use&#xff0c;gate&#xff0c;same&#xff0c;late等。 给定一个字符串&#xff0c;以空格…