K8S核心技术
一、命令行工具Kubectl
kubectl 是 Kubernetes 集群的命令行工具,通过 kubectl 能够对集群本身进行管理,并能 够在集群上进行容器化应用的安装部署
1、基本语法
kubectl [command] [type] [name] [flags]
- comand:指定要对资源执行的操作,例如 create、get、describe 和 delete
- TYPE:指定资源类型,资源类型是大小写敏感的,开发者能够以单数、复数和缩略的 形式
- NAME:指定资源的名称,名称也大小写敏感的。如果省略名称,则会显示所有的资源
- flags:指定可选的参数。例如,可用-s 或者–server 参数指定 Kubernetes API server 的地址和端口
2、kubectl help 获取更多信息
kubectl --help




二、资源编排(yml文件)
1、YAML 文件概述
k8s 集群中对资源管理和资源对象编排部署都可以通过声明样式(YAML)文件来解决,也 就是可以把需要对资源对象操作编辑到 YAML 格式文件中,我们把这种文件叫做资源清单文 件,通过 kubectl 命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署了
2、YAML 文件书写格式
- 使用空格做为缩进
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- 低版本缩进时不允许使用 Tab 键,只允许使用空格
- 使用#标识注释,从这个字符一直到行尾,都会被解释器忽略
3、资源清单描述
在 k8s 中,一般使用 YAML 格式的文件来创建符合我们预期期望的 pod,这样的 YAML 文件称为资源清单
(1)常用字段

(2)主要字段




(3)额外的参数

写一个例子:
快速编写yaml文件的方式
- ①使用kubectl create命令生成yaml文件
kubectl create deptoyment web --image=nginx -o yaml --dry-run
- ②使用kubectl get命令导出yaml文件
kubectl get deploy nginx -o=yaml --export > qiu.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
creationTimestamp: null
generation: 1
labels:
app: nginx
managedFields:
- apiVersion: apps/v1
fieldsType: FieldsV1
fieldsV1:
f:metadata:
f:labels:
.: {}
f:app: {}
f:spec:
f:progressDeadlineSeconds: {}
f:replicas: {}
f:revisionHistoryLimit: {}
f:selector:
f:matchLabels:
.: {}
f:app: {}
f:strategy:
f:rollingUpdate:
.: {}
f:maxSurge: {}
f:maxUnavailable: {}
f:type: {}
f:template:
f:metadata:
f:labels:
.: {}
f:app: {}
f:spec:
f:containers:
k:{"name":"nginx"}:
.: {}
f:image: {}
f:imagePullPolicy: {}
f:name: {}
f:resources: {}
f:terminationMessagePath: {}
f:terminationMessagePolicy: {}
f:dnsPolicy: {}
f:restartPolicy: {}
f:schedulerName: {}
f:securityContext: {}
f:terminationGracePeriodSeconds: {}
manager: kubectl
operation: Update
time: "2022-08-30T09:27:43Z"
- apiVersion: apps/v1
fieldsType: FieldsV1
fieldsV1:
f:metadata:
f:annotations:
.: {}
f:deployment.kubernetes.io/revision: {}
f:status:
f:availableReplicas: {}
f:conditions:
.: {}
k:{"type":"Available"}:
.: {}
f:lastTransitionTime: {}
f:lastUpdateTime: {}
f:message: {}
f:reason: {}
f:status: {}
f:type: {}
k:{"type":"Progressing"}:
.: {}
f:lastTransitionTime: {}
f:lastUpdateTime: {}
f:message: {}
f:reason: {}
f:status: {}
f:type: {}
f:observedGeneration: {}
f:readyReplicas: {}
f:replicas: {}
f:updatedReplicas: {}
manager: kube-controller-manager
operation: Update
time: "2022-09-01T01:18:57Z"
name: nginx
selfLink: /apis/apps/v1/namespaces/default/deployments/nginx
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: nginx
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nginx
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
status: {}
三、POD
1、pod基本概念
Pod 是 k8s 系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最 小资源对象模型,也是在 k8s 上运行容器化应用的资源对象,其他的资源对象都是用来支 撑或者扩展 Pod 对象功能的,比如控制器对象是用来管控 Pod 对象的,Service 或者 Ingress 资源对象是用来暴露 Pod 引用对象的,PersistentVolume 资源对象是用来为 Pod 提供存储等等,k8s 不会直接处理容器,而是 Pod,Pod 是由一个或多个 container 组成
Pod 是 Kubernetes 的最重要概念,每一个 Pod 都有一个特殊的被称为”根容器“的 Pause 容器。Pause 容器对应的镜 像属于 Kubernetes 平台的一部分,除了 Pause 容器,每个 Pod 还包含一个或多个紧密相关的用户业务容器
- pod是k8s中最小部署单元
- 一个pod包含对个容器
- 一个pod中容器共享网络命名空间
- pod是短暂的
2、pod存在的意义

pod存在为了亲密性应用
- 两个应用之间进行交互
- 网络之间的调用
- 两个应用需要频繁调用
3、pod实现机制
(1)共享网络
- 通过pause容器把其他容器加入pause容器中,让所有业务容器在同一个名称空间中,可以实现网络共享
(2)共享存储
- 引入数据卷Volume,使用Volume进行持久化存储
4、pod镜像拉取策略
imagePullPolicy:
- IfNotPresent: 默认值,镜像在宿主机上不存在时才拉取
- Always: 每次创建Pod都会重新拉取一次镜像
- Never: pod永远不会主动拉取这个镜像
5、pod资源限制
每个 Pod 都可以对其能使用的服务器上的计算资源设置限额,Kubernetes 中可以设置限额 的计算资源有 CPU 与 Memory 两种,其中 CPU 的资源单位为 CPU 数量,是一个绝对值而非相 对值。Memory 配额也是一个绝对值,它的单 位是内存字节数。
Kubernetes 里,一个计算资源进行配额限定需要设定以下两个参数: Requests 该资源最 小申请数量,系统必须满足要求 Limits 该资源最大允许使用的量,不能突破,当容器试 图使用超过这个量的资源时,可能会被 Kubernetes Kill 并重启
例子:

上述配置表明 MySQL 容器申请最少 0.25 个 CPU 以及 64MiB 内存,在运行过程中容器所能使 用的资源配额为 0.5 个 CPU 以及 128MiB 内存。
6、pod重启机制

7、pod健康检查


8、pod调度策略
创建pod流程:

节点亲和性:

节点选择器:

污点和污点容忍:

四、Controller
1、什么是Controller
- 在器群上管理和运行容器的对象
2、Pod和Controller的关系
- Pod是通过Controller实现应用的运维,比如:伸缩,滚动升级等
- Pod和Controller之间通过Lable和Selector标签简历关系
3、Deployment控制器的应用场景
- 部署无状态应用
- 管理Pod和ReplicaSet
- 部署,滚动升级
主要应用于:web服务,微服务
4、yaml文件字段说明

5、Deployment控制器部署应用
# 创建一个yaml文件,并导出
kubectl create deployment web --image=nginx --dry-run -o yaml > web.yaml
# 使用yaml部署应用
kubectl apply -f web.yaml
# 查看应用
kubectl get pods
# 对外发布
kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web1 -o yaml > web1.yaml
# 查看状态
kubectl get pods,svc

6、升级回滚
# 执行set指定相应的镜像image
kubectl set image deployment web nginx=nginx:1.15
# 查看升级状态
kubectl rollout status deployment web
# 查看升级版本
kubectl rollout history deployment web
# 回滚到上一个版本
kubectl rollout undo deployment web
# 回滚到指定版本
kubectl rollout undo deployment web --to-reversion=2

7、弹性伸缩
# 创建更多的副本
kubectl scale deployment web --replicas=3
五、Service
1、service存在的意义
(1)防止pod失联,作为注册中心起到服务发现的作用
(2)定义一组pod访问的策略(负载均衡)
2、pod和service的关系
(1)根据label和selector标签建立关联的
(2)通过service实现pod的负载均衡
3、常用的service类型
(1)ClusterIP:集群内部访问
(2)NodePort:对外访问应用使用
(3)LoadBalancer:对外访问应用使用,公有云
K8S核心技术的更多相关文章
- K8s架构|全面整理K8s的架构介绍
K8S架构与核心技术介绍 1. 架构图 1.1 整体结构图 1.2 组件间的协议 CNI: CNI是Container Network Interface的是一个标准的,通用的接口 ;用于连接容器管理 ...
- 从拥抱开源到回馈开源,灵雀云助力CNCF中国区培训业务
6月27日,全球首屈一指的开源盛会 2018 LinuxCon + ContainerCon + CloudOpen China (LC3)在中国北京国家会议中心落下帷幕.二度落地中国的LC3大会热度 ...
- 【下一代核心技术DevOps】:(一)容器服务的Rancher选型
为什么说是下一代核心技术 其实经过互联网的多次变革说起,早期的C/S架构,到后来的B/S架构,一直到现在最普遍的M/S架构,他们的背后都是技术不断的优化改进,以适应促进IT技术的发展 整体而言在过去1 ...
- [Kubernetes]关于K8s,你应该知道的一些东西
Kubernetes概述 Kubernetes(也常称K8s,用8代替8个字符"ubernete"而成的缩写),是一个开源的,用于管理云平台中多个主机上的容器化应用. 它的一个核心 ...
- 通过实例快速掌握k8s(Kubernetes)核心概念
容器技术是微服务技术的核心技术之一,并随着微服务的流行而迅速成为主流.Docker是容器技术的先驱和奠基者,它出现之后迅速占领市场,几乎成了容器的代名词.但它在开始的时候并没有很好地解决容器的集群问题 ...
- InfoQ一波文章:菜鸟核心技术/Intel发布CPU新架构3D堆栈法/BDL/PaddlePaddle/百度第三代Spider/Tera
菜鸟智慧新物流核心技术全解析 孟靖 阅读数:63192018 年 12 月 14 日 16:00 2018 年天猫双 11 全球狂欢节已正式落下帷幕,最终成交额定格在 2135 亿元,物流订单 ...
- Kubernetes的核心技术概念和API对象
Kubernetes的核心技术概念和API对象 API对象是K8s集群中的管理操作单元.K8s集群系统每支持一项新功能,引入一项新技术,一定会新引入对应的API对象,支持对该功能的管理操作.例如副本集 ...
- K8S简介
简介 Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规 ...
- k8s极简史:K8s多集群技术发展的历史、现状与未来
引子 随着云原生技术的普及,越来越多的企业使用Kubernetes来管理应用,并且集群规模也呈爆发式增长,企业也亟需应对随集群规模增长而带来的各种挑战.同时,为了更好地提供高可用.弹性伸缩的应用,企业 ...
- 腾讯发布 K8s 多集群管理开源项目 Clusternet
11月4日,在腾讯数字生态大会上,腾讯宣布了云原生领域一项重磅开源进展-- K8s 多集群管理项目 Clusternet 正式开源. Clusternet 由腾讯联合多点生活.QQ音乐.富途证券.微众 ...
随机推荐
- Linux 内核音频数据传递主要流程 (下)
来而不往非礼也.前面看到了用户空间应用程序和 DMA buffer 之间交换数据,并更新 runtime->control->appl_ptr 指针的过程,这里看一下硬件设备驱动程序在完成 ...
- Python之os模块常用命令
OS模块介绍 os模块是Python标准库中的一个用于访问操作系统相关功能的模块,os模块提供了一种可移植的使用 操作系统功能的方法.使用os模块中提供的接口,可以实现跨平台访问.该模块包含了大量的操 ...
- 原来你是这样的JAVA[06]-反射
1.JVM为每个加载的class及interface创建了对应的Class实例来保存class及interface的所有信息: 获取一个class对应的Class实例后,就可以获取该class的所有信 ...
- Iphone通过ssh进行访问
Iphone通过usb进行ssh访问文件系统 在公司里wifi很不给力,而我又想通过ssh访问我的iphone,进行一些权限访问,这时我们该 itunnel_mux_rev71这个工具可以帮我们的忙 ...
- Conda 命令深入指南
Conda 命令深入指南 Conda 是一个功能强大的包管理系统,允许您为不同的项目创建和管理隔离的环境,从而更轻松地处理不同的依赖项集. 安装 可以按照 Conda 官方网站 (https://co ...
- Jmeter获取Websocket多帧消息的实现方法
由于需要对WebSocket进行压力测试,因此又回归到了JMeter的使用.网络上缺少具体的获取多帧消息的操作,且自己也踩了两个坑,总结一下可行的操作供大家参考. 一.情况说明 ...
- golang .(type)语法
一直弄不懂 .(type) 是啥,在 liteide 中输出 (1+1).(type),提示: use of .(type) outside type switch 于是搜索到这个文章: 作者:翔云翔 ...
- zxy 简单 dp 大讲堂
讲课讲得非常清楚啊,我绝赞膜拜.节奏可以,思路清晰,解法自然,为讲师点赞. 第一个题是 loj3282 / joisc2020 - Treatment Project.原问题由 \(\left(S, ...
- umich cv-2-1
UMICH CV Linear Classifiers 对于使用线性分类器来进行图片分类,我们可以给出这样的参数化方法: 而对于这样一个式子,我们怎么去理解呢? 首先从代数的角度,这个f(x,W)就是 ...
- Django——后台添加的用户密码错误
django项目中,当我们创建了user模型类,并生成了超级管理员,之后我们进入到admin后台页面中,添加一个用户,再去login页面登陆时,会提示我们 用户名或密码错误. 这时,我们第一时间会想到 ...