Kubernetes 对象

什么是对象

K8s集群中创建的任何东西都可以被视为对象:Deployment、Pod、Service等等

对象类型

kubectl api-resources # 查询所有type
namespaces【命名空间,隔离Pod】
nodes【集群组成部分】
pods【装载容器】
deployments【Pod控制器】
services【统一Pod对外接口】
ingresses【统一Pod对外接口】
# 存储资源
csidrivers
csinodes
csistoragecapacities
storageclasses
volumeattachments
# 配置资源
configmaps
secrets

操作对象的指令

kubectl --help # 查询所有指令
create【创建资源】
get【显示资源】
delete【删除资源】
edit【编辑资源】
set【为对象设置指定特性】
run【在集群上运行特定镜像】
expose【暴露资源为Service】
describe【 显示特定资源或资源组的详细信息】
explain【显示资源文档】
logs【打印 Pod 中容器的日志】 
attach【挂接到一个运行中的容器】
exec【在某个容器中执行一个命令】
port-forward【将一个或多个本地端口转发到某个 Pod】
proxy【运行一个指向 Kubernetes API 服务器的代理】
cp【在Pod内、外复制文件】
auth【检查授权】
debug【创建调试会话以排除工作负载和节点故障】           
events【列出事件】
apply【根据文件名或stdin创建资源】
replace【根据文件名或stdin替换资源】
patch【更新资源】
diff【区分实时版本与潜在应用版本】      
wait【Experimental: Wait for a specific condition on one or many resources】            
kustomize【Build a kustomization target from a directory or URL】       
label【更新某资源上的标签】
annotate【更新一个资源的注解】
completion【输出指定shell(bash、zsh、fish或powershell)的shell完成代码】      
rollout【Manage the rollout of a resource】
scale【Set a new size for a deployment, replica set, or replication controller】
autoscale【Auto-scale a deployment, replica set, stateful set, or replication controller】
cluster-info【展示集群信息】
top【Display resource (CPU/memory) usage】
cordon【标记节点为不可调度】
uncordon【标记节点为可调度】
drain【 清空节点以准备维护】
taint【更新一个或者多个节点上的污点】
certificate【修改证书资源】
alpha【Commands for features in alpha】
api-resources【Print the supported API resources on the server】
api-versions【Print the supported API versions on the server, in the form of "group/version"】
config【修改 kubeconfig 文件】    
plugin【Provides utilities for interacting with plugins】          
version【输出客户端和服务端的版本信息】

对象管理

1、指令式命令(适合在集群中运行一次性任务,一般做测试使用)

直接使用命令去操作k8s的资源,操作简单,只能操作活动对象,无法审计和跟踪,所以通常用于测试
命令语法:kubectl command [type] [name] [flags]
	command:指定要对资源执行的操作,create、apply、run、get、delete
	type:指定资源的类型,deployment、pod、service、ingress
	name:指定资源的名称(名称大小写敏感)
	flags:指定额外的可选参数
案例:kubectl create deployment nginx --image nginx

2、指令式对象配置(目标对象为单个文件,可用于生产项目)

kubectl create -f nginx.yaml # 创建配置文件中定义的对象
kubectl replace -f nginx.yaml # 通过覆盖活动配置来更新配置文件中定义的对象
kubectl apply -f nginx.yaml # create和replace的组合
kubectl delete -f nginx.yaml -f redis.yaml # 删除两个配置文件中定义的对象
apiVersion: apps/v1 # 创建该对象所使用的 Kubernetes API 的版本
kind: Deployment # 创建对象的类别
metadata: # 唯一标识对象的一些数据
  namespace: demo-ns
  name: nginx-deployment
spec: # 该对象期望的状态
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # 运行2个Pod
  template: # Pod模板
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

3、声明式对象配置(目标对象为文件目录,可用于生产项目)

kubectl diff -R -f configs/
kubectl apply -R -f configs/

Kubernetes 名字空间

名字空间(Namespace)提供一种机制将同一集群中的资源划分为相互隔离的组

# Kubernetes 启动时会创建四个初始名字空间:
## default:默认
## kube-node-lease:该名字空间包含用于与各个节点关联的 Lease(租约)对象。 节点租约允许 kubelet 发送心跳, 由此控制面能够检测到节点故障
## kube-public:所有的客户端(包括未经身份验证的客户端)都可以读取该名字空间
## kube-system:用于 Kubernetes 系统创建的对象
kubectl create ns <名字空间名称> # 创建命名空间
kubectl get ns # 查询命名空间
kubectl delete ns <名字空间名称> --force --grace-period=0 # 删除命名空间,该空间下的所有资源也将被删除
# 设置当前上下文的默认命名空间
kubectl config set-context --current --namespace=<名字空间名称>

Kubernetes 标签(Labels)

  • 标签用于指定对用户有意义且相关的Kubernetes对象的标识属性
  • 标签可以在创建Kubernetes对象时附加到对象上,随后可以随时添加和修改
  • 每个Kubernetes对象都可以定义一组键/值标签且每个键对于给定对象必须是唯一的

常用的实例标签

版本标签:"release" : "stable", "release" : "canary"
环境标签:"environment" : "dev", "environment" : "qa", "environment" : "production"
架构标签:"tier" : "frontend", "tier" : "backend", "tier" : "cache"

标签选择器

selector:
  matchLabels:
    component: redis
  matchExpressions:
    - { key: tier, operator: In, values: [cache] }
    - { key: environment, operator: NotIn, values: [dev] }

# matchLabels 是由 {key,value} 对组成的映射,matchLabels 映射中的单个 {key,value} 等同于 matchExpressions 的元素
# matchExpressions 是 Pod 选择算符需求的列表。 有效的operator(运算符)包括 In、NotIn、Exists 和 DoesNotExist
- 打标签(命令)
```bash
kubectl label pod <Pod名称> -n <命名名称> version=1.0 # 给Pod添加标签(version=1.0)
kubectl label pod <Pod名称> -n <命名名称> version=2.0 --overwrite # 给Pod更新标签(version=2.0)
kubectl label pod <Pod名称> -n <命名名称> version- # 给Pod删除标签(version)
#
kubectl get pod nginx -n dev --show-labels # 查看Pod(nginx)的标签
# kubectl get pod -l "version=1.0" -n dev --show-labels # 筛选Pod中标签为version=1.0
# kubectl get pods -l environment=production,tier!=frontend
# kubectl get pods -l 'environment in (production),tier in (frontend)'
# kubectl get pods -l 'environment in (production, qa)'
# kubectl get pods -l 'environment,environment notin (frontend)'

自定义注解

"metadata": {
  "annotations": {
    "key1" : "value1",
    "key2" : "value2"
  }
}

# 自定义注解将元数据附加到 Kubernetes 对象。
# 标签可以用来选择对象和查找满足某些条件的对象集合,而注解不用于标识和选择对象

字段选择器

kubectl get pods --field-selector status.phase=Running # 筛选出 status.phase 字段值为 Running 的所有 Pod
kubectl get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always
kubectl get pods --field-selector metadata.namespace!=default
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大能嘚吧嘚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值