初始提交
This commit is contained in:
13
k8s知识笔记/一、k8s 资源清单/1、什么是资源.conf
Normal file
13
k8s知识笔记/一、k8s 资源清单/1、什么是资源.conf
Normal file
@@ -0,0 +1,13 @@
|
||||
一、常见的资源类型分类
|
||||
|
||||
1.1 名称空间级别
|
||||
* 工作负载型资源: Pod、Deployment、ReplicaSet、DaemonSet、Job、CronJob
|
||||
* 服务发现及负载均衡型资源: Service、Ingress
|
||||
* 配置及存储型资源: Volume、CSI
|
||||
* 特殊类型的存储卷: ConfigMap、Secret、PersistentVolumeClaim
|
||||
|
||||
1.2 集群级资源
|
||||
Namespace、Node、PersistentVolume、ClusterRole、ClusterRoleBinding、CustomResourceDefinition
|
||||
|
||||
1.3 元数据型资源
|
||||
HPA、PodTemplate、LimitRange
|
||||
160
k8s知识笔记/一、k8s 资源清单/2、资源清单的五大字段.conf
Normal file
160
k8s知识笔记/一、k8s 资源清单/2、资源清单的五大字段.conf
Normal file
@@ -0,0 +1,160 @@
|
||||
一、资源清单-结构
|
||||
|
||||
五大对象字段:
|
||||
1. apiVersion [接口组/版本]
|
||||
2. kind [资源类型]
|
||||
3. metadata [元数据]
|
||||
4. spec [规格/期望]
|
||||
5. status [状态]
|
||||
|
||||
1.1 [接口组/版本] group/apiVersion
|
||||
* 例子: apiVersion: v1 # pod
|
||||
apiVersion: apps/v1 # deployment
|
||||
apiVersion: batch/v1 # job
|
||||
apiVersion: networking.k8s.io/v1 # ingress
|
||||
apiVersion: rbac.authorization.k8s.io/v1 # rbac
|
||||
|
||||
常见命令:
|
||||
1、查看集群api版本命令: kubectl api-versions
|
||||
|
||||
root@k8s-master:~# kubectl api-versions
|
||||
admissionregistration.k8s.io/v1
|
||||
apiextensions.k8s.io/v1
|
||||
apiregistration.k8s.io/v1
|
||||
apps/v1
|
||||
authentication.k8s.io/v1
|
||||
authorization.k8s.io/v1
|
||||
autoscaling/v1
|
||||
autoscaling/v2
|
||||
batch/v1
|
||||
certificates.k8s.io/v1
|
||||
coordination.k8s.io/v1
|
||||
crd.projectcalico.org/v1
|
||||
discovery.k8s.io/v1
|
||||
events.k8s.io/v1
|
||||
flowcontrol.apiserver.k8s.io/v1
|
||||
networking.k8s.io/v1
|
||||
node.k8s.io/v1
|
||||
policy/v1
|
||||
rbac.authorization.k8s.io/v1
|
||||
resource.k8s.io/v1
|
||||
scheduling.k8s.io/v1
|
||||
storage.k8s.io/v1
|
||||
v1
|
||||
|
||||
[注意事项]:
|
||||
1. group为空时, 直接使用v1表示
|
||||
2. group和version之间用/分隔
|
||||
3. v1表示默认的版本, 即 core/v1
|
||||
|
||||
2、查看某个资源的api解释命令: kubectl explain <资源类型> [Deployment、ReplicaSet、DaemonSet、Job、CronJob]
|
||||
例子: kubectl explain Pod
|
||||
|
||||
1.2 [资源类型] kind: List
|
||||
* 例子: kind: Pod
|
||||
kind: Deployment
|
||||
kind: Service
|
||||
kind: Ingress
|
||||
kind: ConfigMap
|
||||
kind: Secret
|
||||
kind: PersistentVolumeClaim
|
||||
kind: Namespace
|
||||
kind: Node
|
||||
kind: PersistentVolume
|
||||
kind: ClusterRole
|
||||
kind: ClusterRoleBinding
|
||||
kind: CustomResourceDefinition
|
||||
kind: HPA
|
||||
kind: PodTemplate
|
||||
kind: LimitRange
|
||||
|
||||
1.3 [元数据] metadata:
|
||||
* 例子: metadata:
|
||||
name: my-pod
|
||||
namespace: default
|
||||
labels:
|
||||
app: my-app
|
||||
annotations:
|
||||
description: "This is my pod"
|
||||
|
||||
1.4 [规格/期望] spec:
|
||||
* 例子:
|
||||
spec:
|
||||
containers:
|
||||
- name: my-container
|
||||
image: nginx:latest
|
||||
ports:
|
||||
- containerPort: 80
|
||||
replicas: 3
|
||||
selector:
|
||||
matchLabels:
|
||||
app: my-app
|
||||
volumeMounts:
|
||||
- name: my-volume
|
||||
mountPath: /data
|
||||
volumes:
|
||||
- name: my-volume
|
||||
persistentVolumeClaim:
|
||||
claimName: my-pvc
|
||||
|
||||
1.5 [状态] status: # 初次自定义时, 一般不写该字段, 由系统自动生成和维护
|
||||
* 例子:
|
||||
status:
|
||||
coordinations:
|
||||
leaseDurationSeconds: 15
|
||||
renewTime: "2023-10-01T12:00:00Z"
|
||||
|
||||
|
||||
|
||||
# =======================================================================
|
||||
|
||||
|
||||
|
||||
二、pod 资源清单示例:
|
||||
# 1. 创建一个名为 my-pod 的 Pod,包含两个容器 第一个容器使用 nginx 镜像,监听 80 端口, 第二个容器使用 busybox 镜像, 执行一个简单的命令 Pod 运行在 default 命名空间:
|
||||
vim my-pod.yaml
|
||||
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: my-pod
|
||||
namespace: default
|
||||
labels:
|
||||
app: my-app
|
||||
annotations:
|
||||
description: "This is my pod"
|
||||
spec:
|
||||
containers:
|
||||
- name: my-container
|
||||
image: nginx:latest
|
||||
ports:
|
||||
- containerPort: 80
|
||||
- name: sidecar-container
|
||||
image: busybox
|
||||
command:
|
||||
- "bash/sh"
|
||||
- "-c"
|
||||
- "sleep 3600"
|
||||
replicas: 3
|
||||
selector:
|
||||
matchLabels:
|
||||
app: my-app
|
||||
volumeMounts:
|
||||
- name: my-volume
|
||||
mountPath: /data
|
||||
volumes:
|
||||
- name: my-volume
|
||||
persistentVolumeClaim:
|
||||
claimName: my-pvc
|
||||
|
||||
2、pod 资源清单应用命令: (实例化资源对象)
|
||||
kubectl apply -f my-pod.yaml
|
||||
|
||||
3、查看 pod 资源命令:
|
||||
kubectl get pods -A # 查看所有命名空间的 pod
|
||||
kubectl get pods -n default # 查看 default 命名空间的 pod
|
||||
kubectl get pods -n kube-system # 查看 kube-system 命名空间的 pod
|
||||
kubectl get pod my-pod -o yaml # 查看指定 pod 的详细信息
|
||||
kubectl get pod my-pod -o wide # 查看指定 pod 的宽表信息(IP、节点等)
|
||||
|
||||
|
||||
6
k8s知识笔记/一、k8s 资源清单/3、pod的生命周期.conf
Normal file
6
k8s知识笔记/一、k8s 资源清单/3、pod的生命周期.conf
Normal file
@@ -0,0 +1,6 @@
|
||||
一、几个常用的探测和钩子
|
||||
启动探测:
|
||||
就绪探测:
|
||||
存货探测:
|
||||
启动后钩子:
|
||||
关闭前钩子:
|
||||
46
k8s知识笔记/二、k8s pod 控制器/1、RC控制器.conf
Normal file
46
k8s知识笔记/二、k8s pod 控制器/1、RC控制器.conf
Normal file
@@ -0,0 +1,46 @@
|
||||
一、RC 控制器简介
|
||||
ReplicationController(RC)是Kubernetes中的一种控制器, 用于确保指定数量的Pod副本在集群中运行。
|
||||
RC控制器通过监视Pod的状态, 并根据需要创建或删除Pod来维持所需的副本数。
|
||||
RC控制器的主要功能包括:
|
||||
1. 确保指定数量的Pod副本在运行
|
||||
2. 监控Pod的状态
|
||||
3. 根据需要创建或删除Pod
|
||||
|
||||
二、RC 控制器资源清单
|
||||
|
||||
# 资源清单例子
|
||||
|
||||
apiVersion: v1 # 接口组/版本
|
||||
kind: ReplicationController # 资源类型:RC 控制器
|
||||
metadata: # RC 控制器元数据
|
||||
name: nginx-rc # RC 控制器名称
|
||||
spec: # RC 控制器规格 ·
|
||||
replicas: 2 # 期望的pod副本数
|
||||
selector: # 标签选择器
|
||||
app: nginx # 选择标签为app=nginx的pod
|
||||
template: # pod模板
|
||||
metadata: # pod元数据
|
||||
labels: # pod标签,必须与selector匹配(是其子集)
|
||||
app: nginx # 标签key为app,value为nginx
|
||||
spec: # pod规格
|
||||
containers: # 容器组列表
|
||||
- name: nginx # 容器名称
|
||||
image: nginx:1.7.9
|
||||
env: # 环境变量
|
||||
- name: ENV # 环境变量名称
|
||||
value: test # 环境变量值
|
||||
- name: ENV2 # 环境变量名称
|
||||
value: test2 # 环境变量值
|
||||
ports:
|
||||
- containerPort: 80 # 容器端口
|
||||
|
||||
# 创建RC控制器
|
||||
kubectl create -f 1.rc.yaml
|
||||
|
||||
# 查看RC控制器
|
||||
kubectl get rc
|
||||
|
||||
# 查看RC控制器详情
|
||||
kubectl describe rc nginx-rc
|
||||
|
||||
|
||||
60
k8s知识笔记/二、k8s pod 控制器/2、RS控制器.conf
Normal file
60
k8s知识笔记/二、k8s pod 控制器/2、RS控制器.conf
Normal file
@@ -0,0 +1,60 @@
|
||||
一、RS 控制器简介
|
||||
ReplicationSet(RS)是Kubernetes中的一种控制器, 用于确保指定数量的Pod副本在集群中运行。
|
||||
RS控制器通过监视Pod的状态, 并根据需要创建或删除Pod来维持所需的副本数。
|
||||
RS控制器相较RC控制器在标签选择器方面更为灵活, 支持更多的匹配方式。
|
||||
RS控制器的主要功能包括:
|
||||
1. 确保指定数量的Pod副本在运行
|
||||
2. 监控Pod的状态
|
||||
3. 根据需要创建或删除Pod
|
||||
|
||||
RS 在标签选择器上, 除了可以定义键值对的 matchLabels 选择形式, 还支持 matchExpressions 字段,可以提供多种选择。目前支持的操作包括:
|
||||
1. In: # label的值在某个列表中
|
||||
2. NotIn: # label的值不在某个列表中
|
||||
3. Exists: # 某个label 存在
|
||||
4. DoesNotExist: # 某个label不存在
|
||||
|
||||
# 例子: matchExpressions 选择形式
|
||||
spec:
|
||||
selector:
|
||||
matchExpressions:
|
||||
- key: app
|
||||
operator: Exists
|
||||
|
||||
# 例子: matchExpressions 选择形式
|
||||
spec:
|
||||
selector:
|
||||
matchExpressions:
|
||||
- key: app
|
||||
operator: In
|
||||
values:
|
||||
- spring-k8s
|
||||
- hahahah
|
||||
|
||||
|
||||
二、RS 控制器资源清单
|
||||
|
||||
# 资源清单例子
|
||||
apiVersion: apps/v1 # 接口组/版本
|
||||
kind: ReplicaSet # 资源类型:RS 控制器
|
||||
metadata: # RS 控制器元数据
|
||||
name: nginx-rs # RS 控制器名称
|
||||
spec: # RS 控制器规格 ·
|
||||
replicas: 2 # 期望的pod副本数
|
||||
selector: # 标签选择器
|
||||
matchLabels: # 匹配标签模式
|
||||
app: nginx # 选择标签为app=nginx的pod
|
||||
template: # pod模板
|
||||
metadata: # pod元数据
|
||||
labels: # pod标签,必须与selector匹配(是其子集)
|
||||
app: nginx # 标签key为app,value为nginx
|
||||
spec: # pod规格
|
||||
containers: # 容器组列表
|
||||
- name: nginx # 容器名称
|
||||
image: nginx:1.7.9
|
||||
env: # 环境变量
|
||||
- name: ENV # 环境变量名称
|
||||
value: test # 环境变量值
|
||||
- name: ENV2 # 环境变量名称
|
||||
value: test2 # 环境变量值
|
||||
ports:
|
||||
- containerPort: 80 # 容器端口
|
||||
77
k8s知识笔记/二、k8s pod 控制器/3、deployment控制器.conf
Normal file
77
k8s知识笔记/二、k8s pod 控制器/3、deployment控制器.conf
Normal file
@@ -0,0 +1,77 @@
|
||||
一、Deployment 控制器基本概念
|
||||
|
||||
Deployment 控制器是 Kubernetes 中用于管理应用程序部署和更新的高级控制器。
|
||||
它提供了一种声明式的方法来定义和管理应用程序的生命周期, 包括创建、更新和回滚等操作。
|
||||
Deployment 控制器(通过管理 ReplicaSet 来确保应用程序的期望状态与实际状态保持一致),从而实现高可用性和弹性伸缩。
|
||||
|
||||
|
||||
|
||||
二、声明式与命令式
|
||||
|
||||
# kubectl replace -f deployment.yaml
|
||||
命令式创建deployment控制器,
|
||||
不支持部分更新,会覆盖之前的配置
|
||||
|
||||
# kubectl apply -f deployment.yaml
|
||||
声明式创建deployment控制器,
|
||||
支持部分更新,会合并之前的配置, 只更新与新配置中不同的部分
|
||||
apply 可以结合 -f or -k 参数从文件或者目录中读多个配置文件,并根据当前集群资源状态进行更新
|
||||
|
||||
# kubectl diff -f deployment.yaml
|
||||
比较当前集群实际运行的资源清单对象与当前资源清单文件对象的差异
|
||||
|
||||
|
||||
三、Deployment 控制器资源清单
|
||||
|
||||
# 资源清单例子
|
||||
|
||||
apiVersion: apps/v1 # 接口组/版本
|
||||
kind: Deployment # 资源类型:Deployment 控制器
|
||||
metadata:
|
||||
labels:
|
||||
app: myapp-deployment
|
||||
name: myapp-deployment
|
||||
spec:
|
||||
selector:
|
||||
metadata:
|
||||
app: myapp-deployment
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: myapp-deployment
|
||||
spec:
|
||||
containers:
|
||||
- name: myapp-container
|
||||
image: nginx:1.7.9
|
||||
ports:
|
||||
- containerPort: 80
|
||||
|
||||
# 上边的Deployment控制器清单没在spec中设置replicas,默认为 1
|
||||
|
||||
|
||||
三、Deployment常用命令
|
||||
|
||||
# kubectl create -f deployment.yaml
|
||||
创建Deployment控制器
|
||||
|
||||
# kubectl create -f deployment.yaml --record
|
||||
创建Deployment控制器, 并记录变更历史
|
||||
|
||||
# kubectl apply -f deployment.yaml
|
||||
创建或更新Deployment控制器
|
||||
|
||||
# kubectl scale deployment myapp-deployment --replicas=3
|
||||
扩缩容Deployment控制器
|
||||
|
||||
# kubectl autoscale deployment myapp-deployment --min=10 --max=15 --cpu-percent=80
|
||||
基于CPU使用率自动扩缩容Deployment控制器
|
||||
|
||||
# kubectl rollout status deployment myapp-deployment
|
||||
查看Deployment控制器的滚动更新状态
|
||||
|
||||
# kubectl rollout undo deployment myapp-deployment
|
||||
回滚Deployment控制器到上一个版本
|
||||
|
||||
# kubectl set image deployment/myapp-deployment myapp-container=nginx/nginx:1.9.1
|
||||
更新Deployment控制器的镜像
|
||||
|
||||
31
k8s知识笔记/常用命令.sh
Normal file
31
k8s知识笔记/常用命令.sh
Normal file
@@ -0,0 +1,31 @@
|
||||
# 获取当前的资源, pod
|
||||
kubectl get pods <选项> <命令>
|
||||
-A, --all-namespaces 获取所有命名空间的资源
|
||||
-o, --output='': 输出格式, json, yaml, wide(显示更多信息)
|
||||
-n, --namespace='': 指定命名空间
|
||||
-l, --selector='': 基于标签的过滤器
|
||||
--show-labels=false: 显示标签
|
||||
|
||||
# 进入 Pod 内部容器执行命令
|
||||
kubectl exec -it <pod名称> <选项> <命令>
|
||||
-c, --container='': 指定容器名称, pod 内有多个容器时使用
|
||||
-it: 交互式终端,默认可省略
|
||||
-- /bin/bash 或 -- /bin/sh: 进入容器后使用的 shell 类型, 取决于容器内是否有 bash
|
||||
|
||||
# 查看 Pod 日志
|
||||
kubectl logs <pod名称> <选项> <命令>
|
||||
-f, --follow=false: 持续输出日志
|
||||
-c, --container='': 指定容器名称, pod 内有多个容器时使用
|
||||
--tail=-1: 输出日志的最后几行, -1表示全部
|
||||
--since=0s: 只输出最近多少时间的日志, 10s, 5m, 1h
|
||||
--timestamps=false: 显示日志时间戳
|
||||
--previous=false: 查看上一个容器实例的日志, 容器重启后使用
|
||||
|
||||
# 查看资源的详细信息
|
||||
kubectl describe <资源类型> <资源名称> <选项>
|
||||
-n, --namespace='': 指定命名空间, 不指定则为 default
|
||||
-A, --all-namespaces: 查看所有命名空间的资源
|
||||
--show-events=false: 是否显示事件信息, 默认显示
|
||||
--field-selector='': 基于字段的过滤器, 例如 status.phase=Running
|
||||
-l, --selector='': 基于标签的过滤器
|
||||
--sort-by='': 根据指定字段排序, 例如 metadata.name
|
||||
Reference in New Issue
Block a user