资源管理
概述
1、在 Kubernetes 中,所有内容都抽象为资源,用户需要通过操作资源来管理 Kubernetes
2、Kubernetes 本质是一个集群系统,用户可以在集群中部署各种服务,
(1)部署服务就是在 Kubernetes 集群中运行一个个容器,并将在容器中运行指定容器
(2)Kubernetes 的最小管理单元是 Pod 而不是容器,所以只能将容器放在 Pod 中,而 Kubernetes 一般不会直接管理 Pod,而是通过 Pod 控制器来管理 Pod
(3)Pod 可以提供服务之后,Kubernetes 提供 Service 资源来访问 Pod 中服务
(4)如果 Pod 中程序的数据需要持久化,Kubernetes 还提供了各种存储系统
YAML
1、标记语言
2、基本语法
(1)key: value
(2)冒号之后需要一个空格
(3)大小写敏感
(4)使用缩进表示层级关系
(5)缩进不允许使用 Tab,只允许空格
(6)缩进的空格数不重要,只要相同层级的元素左对齐即可
(7)# 表示注释
(8)字符串无需加引号
(9)'' 表示字符串内容被转义;"" 不会对字符串内容转义
(10)引用:& 用来建立锚点(defaults),<< 表示合并到当前数据,* 用来引用锚点
数据类型
1、字面量 / 纯量 / 标量(scalars)
(1)单个、不可再分的值
(2)字符串布尔值、整数、浮点数、Null、时间、日期
(3)格式
key: value
2、对象
(1)键值对的集合,又称为映射(mapping)/ 哈希(hashes)/ 字典(dictionary)
(2)map、hash、set、object
(3)对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格
(4)行内写法
key: {key1:value1,key2:value2,key3:value3}
(5)对象表示法,使用缩进表示层级关系
key:
key1: value1
key2: value2
key3: value3
(6)较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value
#意思即对象的属性是一个数组 [complexkey1,complexkey2],对应的值也是一个数组 [complexvalue1,complexvalue2]
?
- complexkey1
- complexkey2
:
- complexvalue1
- complexvalue2
3、数组
(1)一组按次序排列的值,又称为序列(sequence)/ 列表(list)
(2)array、list、queue
(3)以 - 开头的行表示构成一个数组
- A
- B
- C
(4)行内写法,支持多维数组
key: [value1, value2, value3 ...]
(5)常规写法
key:
- value1
- value2
- value3
(6)数据结构的子成员是一个数组,则可以在该项下面缩进一个空格
-
- A
- B
- C
(7)一个相对复杂的例子
#意思是 companies 属性是一个数组,每一个数组元素又是由 id、name、price 三个属性构成。
companies:
-
id: 1
name: company1
price: 200W
-
id: 2
name: company2
price: 500W
#数组也可以使用流式(flow)的方式表示
companies: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}]
命令行工具(kubectl)
1、Kubernetes 提供 kubectl 是使用 Kubernetes API 与 Kubernetes 集群的控制面进行通信的命令行工具
2、针对配置信息,kubectl 在 $HOME/.kube 目录中查找一个名为 config 的配置文件,可以通过设置 KUBECONFIG 环境变量或设置 --kubeconfig 参数来指定其它 kubeconfig 文件。
3、语法
kubectl [command] [TYPE] [NAME] [flags]
(1)command:指定要对一个或多个资源执行的操作
(2)TYPE:指定资源类型。资源类型不区分大小写, 可以指定单数、复数或缩写形式
(3)NAME:指定资源的名称。名称区分大小写。 如果省略名称,则显示所有资源的详细信息
(4)在对多个资源执行操作时,你可以按类型和名称指定每个资源,或指定一个或多个文件:
(5)要按类型和名称指定资源
(6)要对所有类型相同的资源进行分组,请执行以下操作:TYPE1 name1 name2 name<#>。
(7)分别指定多个资源类型:TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>
(8)用一个或多个文件指定资源:-f file1 -f file2 -f file<#>
(9)使用 YAML 而不是 JSON, 因为 YAML 对用户更友好, 特别是对于配置文件
(10)flags: 指定可选的参数
(11)注意:从命令行指定的参数会覆盖默认值和任何相应的环境变量
(12)如果你需要帮助,在终端窗口中运行 kubectl help
4、操作
操作 | 语法 | 描述 |
---|---|---|
alpha | kubectl alpha SUBCOMMAND [flags] | 列出与 alpha 特性对应的可用命令,这些特性在 Kubernetes 集群中默认情况下是不启用的。 |
annotate | kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] | 添加或更新一个或多个资源的注解。 |
api-resources | kubectl api-resources [flags] | 列出可用的 API 资源。 |
api-versions | kubectl api-versions [flags] | 列出可用的 API 版本。 |
apply | kubectl apply -f FILENAME [flags] | 从文件或 stdin 对资源应用配置更改。 |
attach | kubectl attach POD -c CONTAINER [-i] [-t] [flags] | 挂接到正在运行的容器,查看输出流或与容器(stdin)交互。 |
auth | kubectl auth [flags] [options] | 检查授权。 |
autoscale | kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags] | 自动扩缩由副本控制器管理的一组 pod。 |
certificate | kubectl certificate SUBCOMMAND [options] | 修改证书资源。 |
cluster-info | kubectl cluster-info [flags] | 显示有关集群中主服务器和服务的端口信息。 |
completion | kubectl completion SHELL [options] | 为指定的 Shell(Bash 或 Zsh)输出 Shell 补齐代码。 |
config | kubectl config SUBCOMMAND [flags] | 修改 kubeconfig 文件。有关详细信息,请参阅各个子命令。 |
convert | kubectl convert -f FILENAME [options] | 在不同的 API 版本之间转换配置文件。配置文件可以是 YAML 或 JSON 格式。注意 - 需要安装 kubectl-convert 插件。 |
cordon | kubectl cordon NODE [options] | 将节点标记为不可调度。 |
cp | kubectl cp <file-spec-src> <file-spec-dest> [options] | 从容器复制文件、目录或将文件、目录复制到容器。 |
create | kubectl create -f FILENAME [flags] | 从文件或 stdin 创建一个或多个资源。 |
delete | kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags] | 基于文件、标准输入或通过指定标签选择器、名称、资源选择器或资源本身,删除资源。 |
describe | kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] | 显示一个或多个资源的详细状态。 |
diff | kubectl diff -f FILENAME [flags] | 在当前起作用的配置和文件或标准输之间作对比 (BETA) |
drain | kubectl drain NODE [options] | 腾空节点以准备维护。 |
edit | kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags] | 使用默认编辑器编辑和更新服务器上一个或多个资源的定义。 |
events | kubectl events | 列举事件。 |
exec | kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]] | 对 Pod 中的容器执行命令。 |
explain | kubectl explain [--recursive=false] [flags] | 获取多种资源的文档。例如 Pod、Node、Service 等。 |
expose | kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [flags] | 将副本控制器、服务或 Pod 作为新的 Kubernetes 服务暴露。 |
get | kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags] | 列出一个或多个资源。 |
kustomize | kubectl kustomize |
列出从 kustomization.yaml 文件中的指令生成的一组 API 资源。参数必须是包含文件的目录的路径,或者是 git 存储库 URL,其路径后缀相对于存储库根目录指定了相同的路径。 |
label | kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] | 添加或更新一个或多个资源的标签。 |
logs | kubectl logs POD [-c CONTAINER] [--follow] [flags] | 打印 Pod 中容器的日志。 |
options | kubectl options | 全局命令行选项列表,这些选项适用于所有命令。 |
patch | kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags] | 使用策略合并流程更新资源的一个或多个字段。 |
plugin | kubectl plugin [flags] [options] | 提供用于与插件交互的实用程序。 |
port-forward | kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags] | 将一个或多个本地端口转发到一个 Pod。 |
proxy | kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags] | 运行访问 Kubernetes API 服务器的代理。 |
replace | kubectl replace -f FILENAME | 基于文件或标准输入替换资源。 |
rollout | kubectl rollout SUBCOMMAND [options] | 管理资源的上线。有效的资源类型包括:Deployment、 DaemonSet 和 StatefulSet。 |
run | kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server | client | none] [--overrides=inline-json] [flags] | 在集群上运行指定的镜像。 |
scale | kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags] | 更新指定副本控制器的大小。 |
set | kubectl set SUBCOMMAND [options] | 配置应用资源。 |
taint | kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [options] | 更新一个或多个节点上的污点。 |
top | kubectl top [flags] [options] | 显示资源(CPU、内存、存储)的使用情况。 |
uncordon | kubectl uncordon NODE [options] | 将节点标记为可调度。 |
version | kubectl version [--client] [flags] | 显示运行在客户端和服务器上的 Kubernetes 版本。 |
wait | kubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | --all)]) [--for=delete|--for condition=available] [options] | 实验特性:等待一种或多种资源的特定状况。 |
5、资源类型
(1)以下输出可以通过 kubectl api-resources 获取
(2)内容以 Kubernetes 1.25.0 版本为准
资源名 | 缩写名 | API 版本 | 按命名空间 | 资源类型 |
---|---|---|---|---|
bindings | v1 | true | Binding | |
componentstatuses | cs | v1 | false | ComponentStatus |
configmaps | cm | v1 | true | ConfigMap |
endpoints | ep | v1 | true | Endpoints |
events | ev | v1 | true | Event |
limitranges | limits | v1 | true | LimitRange |
namespaces | ns | v1 | false | Namespace |
nodes | no | v1 | false | Node |
persistentvolumeclaims | pvc | v1 | true | PersistentVolumeClaim |
persistentvolumes | pv | v1 | false | PersistentVolume |
pods | po | v1 | true | Pod |
podtemplates | v1 | true | PodTemplate | |
replicationcontrollers | rc | v1 | true | ReplicationController |
resourcequotas | quota | v1 | true | ResourceQuota |
secrets | v1 | true | Secret | |
serviceaccounts | sa | v1 | true | ServiceAccount |
services | svc | v1 | true | Service |
mutatingwebhookconfigurations | admissionregistration.k8s.io/v1 | false | MutatingWebhookConfiguration | |
validatingwebhookconfigurations | admissionregistration.k8s.io/v1 | false | ValidatingWebhookConfiguration | |
customresourcedefinitions | crd,crds | apiextensions.k8s.io/v1 | false | CustomResourceDefinition |
apiservices | apiregistration.k8s.io/v1 | false | APIService | |
controllerrevisions | apps/v1 | true | ControllerRevision | |
daemonsets | ds | apps/v1 | true | DaemonSet |
deployments | deploy | apps/v1 | true | Deployment |
replicasets | rs | apps/v1 | true | ReplicaSet |
statefulsets | sts | apps/v1 | true | StatefulSet |
tokenreviews | authentication.k8s.io/v1 | false | TokenReview | |
localsubjectaccessreviews | authorization.k8s.io/v1 | true | LocalSubjectAccessReview | |
selfsubjectaccessreviews | authorization.k8s.io/v1 | false | SelfSubjectAccessReview | |
selfsubjectrulesreviews | authorization.k8s.io/v1 | false | SelfSubjectRulesReview | |
subjectaccessreviews | authorization.k8s.io/v1 | false | SubjectAccessReview | |
horizontalpodautoscalers | hpa | autoscaling/v2 | true | HorizontalPodAutoscaler |
cronjobs | cj | batch/v1 | true | CronJob |
jobs | batch/v1 | true | Job | |
certificatesigningrequests | csr | certificates.k8s.io/v1 | false | CertificateSigningRequest |
leases | coordination.k8s.io/v1 | true | Lease | |
endpointslices | discovery.k8s.io/v1 | true | EndpointSlice | |
events | ev | events.k8s.io/v1 | true | Event |
flowschemas | flowcontrol.apiserver.k8s.io/v1beta2 | false | FlowSchema | |
prioritylevelconfigurations | flowcontrol.apiserver.k8s.io/v1beta2 | false | PriorityLevelConfiguration | |
ingressclasses | networking.k8s.io/v1 | false | IngressClass | |
ingresses | ing | networking.k8s.io/v1 | true | Ingress |
networkpolicies | netpol | networking.k8s.io/v1 | true | NetworkPolicy |
runtimeclasses | node.k8s.io/v1 | false | RuntimeClass | |
poddisruptionbudgets | pdb | policy/v1 | true | PodDisruptionBudget |
podsecuritypolicies | psp | policy/v1beta1 | false | PodSecurityPolicy |
clusterrolebindings | rbac.authorization.k8s.io/v1 | false | ClusterRoleBinding | |
clusterroles | rbac.authorization.k8s.io/v1 | false | ClusterRole | |
rolebindings | rbac.authorization.k8s.io/v1 | true | RoleBinding | |
roles | rbac.authorization.k8s.io/v1 | true | Role | |
priorityclasses | pc | scheduling.k8s.io/v1 | false | PriorityClass |
csidrivers | storage.k8s.io/v1 | false | CSIDriver | |
csinodes | storage.k8s.io/v1 | false | CSINode | |
csistoragecapacities | storage.k8s.io/v1 | true | CSIStorageCapacity | |
storageclasses | sc | storage.k8s.io/v1 | false | StorageClass |
volumeattachments | storage.k8s.io/v1 | false | VolumeAttachment |
6、选项
--add-dir-header | 设置为 true 表示添加文件目录到日志信息头中 |
--alsologtostderr | 表示将日志输出到文件的同时输出到 stderr |
--as string | 以指定用户的身份执行操作 |
--as-group stringArray | 模拟指定的组来执行操作,可以使用这个标志来指定多个组。 |
--azure-container-registry-config string | 包含 Azure 容器仓库配置信息的文件的路径。 |
--cache-dir string 默认值: "$HOME/.kube/cache" | 默认缓存目录 |
--certificate-authority string | 指向证书机构的 cert 文件路径 |
--client-certificate string | TLS 使用的客户端证书路径 |
--client-key string | TLS 使用的客户端密钥文件路径 |
--cloud-provider-gce-l7lb-src-cidrs cidrs 默认值: 130.211.0.0/22,35.191.0.0/16 | 在 GCE 防火墙中开放的 CIDR,用来进行 L7 LB 流量代理和健康检查。 |
--cloud-provider-gce-lb-src-cidrs cidrs 默认值: 130.211.0.0/22,209.85.152.0/22,209.85.204.0/22,35.191.0.0/16 | 在 GCE 防火墙中开放的 CIDR,用来进行 L4 LB 流量代理和健康检查。 |
--cluster string | 要使用的 kubeconfig 集群的名称 |
--context string | 要使用的 kubeconfig 上下文的名称 |
--default-not-ready-toleration-seconds int 默认值: 300 | 表示 `notReady` 状态的容忍度秒数:默认情况下,`NoExecute` 被添加到尚未具有此容忍度的每个 Pod 中。 |
--default-unreachable-toleration-seconds int 默认值: 300 | 表示 `unreachable` 状态的容忍度秒数:默认情况下,`NoExecute` 被添加到尚未具有此容忍度的每个 Pod 中。 |
-h, --help | kubectl 操作的帮助命令 |
--insecure-skip-tls-verify | 设置为 true,则表示不会检查服务器证书的有效性。这样会导致你的 HTTPS 连接不安全。 |
--kubeconfig string | CLI 请求使用的 kubeconfig 配置文件的路径。 |
--log-backtrace-at traceLocation 默认值: 0 | 当日志机制运行到指定文件的指定行(file:N)时,打印调用堆栈信息 |
--log-dir string | 如果不为空,则将日志文件写入此目录 |
--log-file string | 如果不为空,则将使用此日志文件 |
--log-file-max-size uint 默认值: 1800 | 定义日志文件的最大尺寸。单位为兆字节。如果值设置为 0,则表示日志文件大小不受限制。 |
--log-flush-frequency duration 默认值: 5s | 两次日志刷新操作之间的最长时间(秒) |
--logtostderr 默认值: true | 日志输出到 stderr 而不是文件中 |
--match-server-version | 要求客户端版本和服务端版本相匹配 |
-n, --namespace string | 如果存在,CLI 请求将使用此命名空间 |
--one-output | 如果为 true,则只将日志写入初始严重级别(而不是同时写入所有较低的严重级别)。 |
--password string | API 服务器进行基本身份验证的密码 |
--profile string 默认值: "none" | 要记录的性能指标的名称。可取 (none|cpu|heap|goroutine|threadcreate|block|mutex) 其中之一。 |
--profile-output string 默认值: "profile.pprof" | 用于转储所记录的性能信息的文件名 |
--request-timeout string 默认值: "0" | 放弃单个服务器请求之前的等待时间,非零值需要包含相应时间单位(例如:1s、2m、3h)。零值则表示不做超时要求。 |
-s, --server string | Kubernetes API 服务器的地址和端口 |
--skip-headers | 设置为 true 则表示跳过在日志消息中出现 header 前缀信息 |
--skip-log-headers | 设置为 true 则表示在打开日志文件时跳过 header 信息 |
--stderrthreshold severity 默认值: 2 | 等于或高于此阈值的日志将输出到标准错误输出(stderr) |
--token string | 用于对 API 服务器进行身份认证的持有者令牌 |
--user string | 指定使用 kubeconfig 配置文件中的用户名 |
--username string | 用于 API 服务器的基本身份验证的用户名 |
-v, --v Level | 指定输出日志的日志详细级别 |
--version version[=true] | 打印 kubectl 版本信息并退出 |
--vmodule moduleSpec | 以逗号分隔的 pattern=N 设置列表,用于过滤文件的日志记录 |
7、环境变量
KUBECONFIG | kubectl 的配置 ("kubeconfig") 文件的路径。默认值: "$HOME/.kube/config" |
KUBECTL_COMMAND_HEADERS | 设置为 false 时,将关闭额外的 HTTP 标头,不再详细说明被调用的 kubectl 命令(此变量适用于 Kubernetes v1.22 或更高版本) |
KUBECTL_EXPLAIN_OPENAPIV3 | 切换对 `kubectl explain` 的调用是否使用可用的新 OpenAPIv3 数据源。OpenAPIV3 自 Kubernetes 1.24 起默认被启用。 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战