在部署和管理pod中,只有先理解这些概念,才能更好的去进行控制器的学习和管理。
- 名称
- kubernetes rest api所有的对象都是由名称和UID组成。
- 名称
- kubernetes名称最大长度为253个字符。
apiVersion: v1 kind: Pod metadata: name: nginx-demo #Pod的名称 spec: containers: - name: nginx #容器的名称 image: nginx:1.7.9 ports: - containerPort: 80
- kubernetes名称最大长度为253个字符。
- UIDs
- kubernetes系统自动生成的字符串唯一标识对象。
- 命名空间
- 介绍
- kubernetes支持多个虚拟集群,他们底层依赖于一个物理集群。这些虚拟机群称为命名空间。
- 何时使用命名空间
- 命名空间适用于很多库团队、跨项目的用户场景。对于只有几个到几十个用户的集群,根本不需要创建命名空间。
- 不要使用命名空间来做轻微的资源隔离,例如软件的不同版本,请使用lables来区分。
- 使用命名空间
- 查看命名空间 kubectl get namespace
- default 没有指名使用其他命名空间的对象,会默认使用default
- kube-system kubernetes系统创建对象所使用的命名空间
- kube-public 这个命名空间是自动创建的,所有用户都可以读取他。主要用于集群使用。
- 为请求设置命名空间 kubectl run nginx --image=nginx --namespace= 命名空间
- 查看指定命名空间的pod kubectl get pods --namespace=命名空间
- 查看命名空间 kubectl get namespace
- 设置系统默认命名空间
- 设置默认命名空间 kubectl config set-context --current --namespace=命名空间
- 查看系统默认命名空间 kubectl config view | grep namespace:
- 命名空间和DNS
- 当您创建一个service时,kubernetes会创建一个相应的DNS条目
- 这对于跨多个命名空间(如开发、分级和生产)使用相同的配置非常有用。
- 并非所有的对象都在命名空间中
- 查看在命名空间中的对象
kubectl api-resources --namespaced=true
- 查看不在命名空间中的对象
kubectl api-resources --namespaced=false
- 查看在命名空间中的对象
- 命名空间的创建、删除等
- 介绍
- 标签和选择器
- 官网链接 https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/labels/
- 标签
- 标签是附加到kubernetes对象(例如:pod)上的键值对,用于对对象进行标识。标签可以在创建时候附加到对象上,也可以随时添加和修改。每个键值对象必须是唯一的。
"metadata": { "labels": { "key1" : "value1", "key2" : "value2" } }
- 标签是附加到kubernetes对象(例如:pod)上的键值对,用于对对象进行标识。标签可以在创建时候附加到对象上,也可以随时添加和修改。每个键值对象必须是唯一的。
-
选择器
- 通常一个对象携带多个标签,通过标签选择器来找到对象组。
- 标签过滤-运算符
- 相等性 运算符=、==
- 不相等性 !=
- 标签过滤-指定一个集合
- in 示例:environment in (production,qa)
- notin 示例:environment notin(frontend,backend)
- exists
- 示例一:partition #所有包含partition标签的资源
- 示例二:!partition #所有不包含partition标签的资源
- API
- 查找指定标签的pod kubectl get pods -l app=useridentity,app=useridentity #同时指定多个标签
- 查找指定标签的pod kubectl get pods -l 'app in (useridentity)' #集合方式查找
- 在API对象上设置引用
- 在一些kubernetes对象,例如:Pod,ReplicationController 等也使用标签选择器指定了其他的资源集合;
- 并且这些对象只支持相等性的方式设置;
设置格式一:
"selector": { "component" : "redis", }
设置格式二:
selector: component: redis
目前job、deployment、Replica Set、Daemon Set支持集合的方式;
selector: matchLabels: component: redis matchExpressions: - {key: tier, operator: In, values: [cache]} - {key: environment, operator: NotIn, values: [dev]}
- 标签
- 注解
- 字段选择器
- 推荐使用的标签
- 官方链接 https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/common-labels/
- 推荐标签是为了让程序管理变得更容易。共享标签和注解都使用同一个前缀app.kubernetes.io。没有前缀的标签是用户私有的。
- 我们应该在每个资源上都使用他们。
-
app.kubernetes.io/name 应用程序的名称 mysql 字符串 app.kubernetes.io/instance 用于唯一确定应用实例的名称 wordpress-abcxzy 字符串 app.kubernetes.io/version 应用程序的当前版本(例如,语义版本,修订版哈希等 5.7.21 字符串 app.kubernetes.io/component 架构中的组件 database 字符串 app.kubernetes.io/part-of 此级别的更高级别应用程序的名称 wordpress 字符串 app.kubernetes.io/managed-by 用于管理应用程序的工具 helm 字符串 - 自定义常用标签
release 版本 stable(稳定版)、canary(金丝雀版) environment 环境 dev(开发版本)、qa()、production(生成版) tier 层 frontend(前端)、backend(后端)、middleware(中间件)、cache(缓存层)track daily(每日)、weekly(每周) partition 分区 customerA、customerB - 使用示例
apiVersion: apps/v1 kind: StatefulSet metadata: labels: app.kubernetes.io/name: mysql app.kubernetes.io/instance: wordpress-abcxzy app.kubernetes.io/version: "5.7.21" app.kubernetes.io/component: database app.kubernetes.io/part-of: wordpress app.kubernetes.io/managed-by: helm
-
理解kubernetes对象
官方链接 https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/kubernetes-objects/
主要是说明kuberneter对象在kubernetes api和.yaml文件中是如何表示的。
- 理解kubernetes对象
- 在kubernetes系统中,kubernetes对象是持久化的实体。kubernets使用这些实体去表示整个集群的状态。主要描述以下信息:
- 哪些容器化应用在运行(以及运行在哪个node上)
- 可以被应用使用的资源
- 关于应用运行时的表现策略,比如重启、升级、容错等策略。
- deployment.yaml示例
-
apiVersion: apps/v1 # 所使用的kubernetes api版本 kind: Deployment #想要创建的对象类型 metadata: #帮助识别对象唯一性的数据。包括name、UID和可选的namespace name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 2 # tells deployment to run 2 pods matching the template template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
- 在kubernetes系统中,kubernetes对象是持久化的实体。kubernets使用这些实体去表示整个集群的状态。主要描述以下信息: