一、命令行工具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类型
标签:容器,kubectl,nginx,核心技术,yaml,pod,K8S,Pod From: https://www.cnblogs.com/qbbit/p/16642430.html(1)ClusterIP:集群内部访问
(2)NodePort:对外访问应用使用
(3)LoadBalancer:对外访问应用使用,公有云