学网站开发如何挣钱,300平方别墅装修大约多少钱,联想电脑网站建设策划书,小型网站开发语言写在前面#xff1a;如有问题#xff0c;以你为准#xff0c;
目前24年应届生#xff0c;各位大佬轻喷#xff0c;部分资料与图片来自网络
内容较长#xff0c;页面右上角目录方便跳转 namespace 实现资源分组#xff0c;label实现业务分组
Namespace
基础理论
最重…
写在前面如有问题以你为准
目前24年应届生各位大佬轻喷部分资料与图片来自网络
内容较长页面右上角目录方便跳转 namespace 实现资源分组label实现业务分组
Namespace
基础理论
最重要功能资源分割网络隔离结合NNetworkPolicy
Namespace是kubernetes系统中一种非常重要的资源它的主要作用是用来实现
多套系统的资源隔离或者多租户的资源隔离。
默认情况下kubernetes集群中的所有Pod都是可以相互访问的。但是在实际中可能不想让两个Pod之间进行互相的访问那么此时就可以将两个Pod划分到不同的Namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中可以形成逻辑上的“组”以方便不同的组的资源进行隔离使用和管理。可以通过kubernetes的授权机制将不同的Namespace交给不同租户进行管理这样就实现了多租户的资源隔离。此时还能结合kubernetes的资源配额机制限定不同租户能占用的资源例如CPU使用量、内存使用量等等来实现租户可用资源的管理
如下图中dev交给开发组部门进行管理test交给测试组部门进行管理
不同部门之间无法直接通信分隔资源
label是将pod进行分组和打标签 名称空间在实际开发中如何划分
① 基于环境隔离如dev开发、test测试、prod生产等。② 基于产品线隔离如前端、后端、中间件、大数据、Android、iOS、小程序等。③ 基于团队隔离如企业发展事业部、技术工程事业部、云平台事业部等。
命名规则
① 不能带小数点.。② 不能带下划线_。③ 使用数字、小写字母或减号-组成的字符串
自带命名空间
kubernetes在集群启动之后会默认创建几个namespace default所有未指定的Namespace的对象都会被分配在default命名空间。 kube-node-lease集群节点之间的心跳维护v1.13开始引入。 kube-public此命名空间的资源可以被所有人访问包括未认证用户。 kube-system所有由kubernetes系统创建的资源都处于这个命名空间。 实操
命令行实操
查看
namespacens
# 查看所有namespacekubectl get namespacekubectl get ns# 指定查看nskubectl get ns default# 指定命名空间的输出格式kubectl get ns default -o wide/json/yaml# 查看命名空间的详情kubectl describe ns default#Active命名空间正在使用中 Terminating正在删除命名空间#ResourceQuota针对namespace做的资源限制#LimitRange针对namespacel中的每个组件做的资源限制 创建 删除
kubectl create ns devkubectl delete ns dev# 注可以通过删除 namespace 来删除隶属于该命名空间的所有pod
yaml 方式
apiVersion: v1
kind: Namespace
metadata:name: dev kubectl create -f ns-dev.yaml
Label
理论
例子前台和后台程序需要进行通信哪就要再同一个namespace下这样就没办法进行逻辑上的分组来区分前台和后台就要使用label来进行逻辑上的分组同一个组的Pod使用同一个label进行区分
Label是kubernetes的一个重要概念。它的作用就是在资源上添加标识用来对它们进行区分和选择。Label的特点 一个Label会以key/value键值对的形式附加到各种对象上如Node、Pod、Service等。一个资源对象可以定义任意数量的Label同一个Label也可以被添加到任意数量的资源对象上去。Label通常在资源对象定义时确定当然也可以在对象创建后动态的添加或删除。可以通过Label实现资源的多纬度分组以便灵活、方便地进行资源分配、调度、配置和部署等管理工作
重点namespace 实现资源分组label实现业务分组
label也用于实现Pod调度污点和容忍
Pod控制器与现有和未来Pod之间连接
Service 与现有和未来Pod之间连接
一些常用的Label标签示例如下
版本标签“version”:”release”,”version”:”stable”环境标签“environment”:”dev”,“environment”:”test”,“environment”:”pro”架构标签“tier”:”frontend”,”tier”:”backend” 标签语法
标签是一组键值对key/value标签的 key 有两个部分可选的前缀和标签名通过 / 分隔。标签前缀 标签前缀部分是可选的。如果指定必须是一个 DNS 的子域名如k8s.eip.work 。不能多余 253 个字符。使用 / 和标签名分隔。 如果省略标签前缀则标签的 key 就被认为是专属于用户的。Kubernetes 的系统组件 如kube-scheduler、kube-controller-manager、kube-apiserver、kubectl 或其他第三方组件向可以的 Kubernetes 对象添加标签的时候必须指定一个前缀。 kubernetes.io/ 和 k8s.io/ 这两个前缀是 Kubernetes 核心组件预留的 标签名 标签名部分是必须的。不能多余 63 个字符。必须由字母、数字开始和结尾。可以包含字母、数字、减号-、下划线_、小数点. 标签的 value 不能多于 63 个字符。可以为空字符串。如果不为空则必须由字母、数字开始和结尾。如果不为空可以包含字母、数字、减号-、下划线_、小数点.。
Label Selector
通常来讲会有多个 Kubernetes 对象包含相同的标签。通过使用标签选择器label selector用户/客户端可以选择一组对象。标签选择器是 Kubernetes 中最主要的分类和筛选手段。Kubernetes 的 api-server 支持两种形式的标签选择器equality-based 基于等式的 和 set-based 基于集合的 。标签选择器可以包含多个条件并使用逗号进行分隔此时只要满足所有条件的 Kubernetes对象才会被选中。基于等式的标签选择器可以使用三种操作符 、 、!。前两个操作符含义是一样的都代表相等后一个操作符代表不相等。 标签定义完毕之后还要考虑到标签的选择这就要用到Label Selector即 Label用于给某个资源对象定义标识。Label Selector用于查询和筛选拥有某些标签的资源对象
当前有两种Label Selector
基于等式的Label Selector。 nameslave选择所有包含Label中的key“name”并且value“slave”的对象。env!production选择所有包含Label中的key“env”并且value!“production”的对象。基于集合的Label Selector。 name in (master,slave)选择所有包含Label中的key“name”并且value“master”或value“slave”的对象。name not in (master,slave)选择所有包含Label中的key“name”并且value!“master”和value!“slave”的对象。标签的选择条件可以使用多个此时将多个Label Selector进行组合使用逗号,进行分隔即可。 namesalve,env!production。name not in (master,slave),env!production
注解 annotations
注解annotation 可以用来向 Kubernetes 对象的 meta.annotations 字段添加任意的信息。Kubernetes 的客户端或者自动化工具可以存取这些信息以实现自定义的逻辑
label 实操
命令行
创建与查看
[rootmaster k8s]# kubectl get pod -n snj-test --show-labelsNAME READY STATUS RESTARTS AGE LABELSsnj-nginx-test 1/1 Running 0 47s none[rootmaster k8s]# kubectl label pod -n snj-test snj-nginx-test version1.0pod/snj-nginx-test labeled[rootmaster k8s]# kubectl get pod -n snj-test --show-labelsNAME READY STATUS RESTARTS AGE LABELSsnj-nginx-test 1/1 Running 0 4m6s version1.0
更新与删除
更新关键字段--overwrite
删除key-
[rootmaster k8s]# kubectl label pod -n snj-test snj-nginx-test version2.0error: version already has a value (1.0), and --overwrite is false[rootmaster k8s]# kubectl label pod -n snj-test snj-nginx-test version2.0 --overwritepod/snj-nginx-test labeled[rootmaster k8s]# kubectl get pod -n snj-test --show-labelsNAME READY STATUS RESTARTS AGE LABELSsnj-nginx-test 1/1 Running 0 5m16s version2.0[rootmaster k8s]# kubectl label pod -n snj-test snj-nginx-test version-pod/snj-nginx-test unlabeled[rootmaster k8s]# kubectl get pod -n snj-test --show-labelsNAME READY STATUS RESTARTS AGE LABELSsnj-nginx-test 1/1 Running 0 8m33s none
yaml
apiVersion: v1kind: Podmetadata:name: nginx-podlabels: # 标签app: nginxenvironment: prodspec:containers:- name: nginximage: nginx
label selector 实操
命令行
key标签
value标签值
# 选择了标签名为 environment 且 标签值为 production 的Kubernetes对象kubectl get pods -l environmentproduction,tierfrontend# 选择了标签名为 tier 且标签值不等于 frontend 的对象以及不包含标签 tier 的对象kubectl get pods -l tier ! frontend# 选择所有包含 partition 标签的对象kubectl get pods -l partition# 选择所有不包含 partition 标签的对象kubectl get pods -l !partition
基于集合标签选择器可以根据标签名的一组值进行筛选。支持的操作符有三种
in、notin、exists
# 选择所有的包含 environment 标签且值为 production 或 qa 的对象kubectl get pods -l environment in (production, qa)# 选择所有的 tier 标签不为 frontend 和 backend的对象或不含 tier 标签的对象kubectl get pods -l tier notin (frontend, backend)# 选择包含 partition 标签不检查标签值且 environment 不是 qa 的对象kubectl get pods -l partition,environment notin (qa)
yaml
示例Job、Deployment、ReplicaSet 和 DaemonSet 同时支持基于等式的选择方式和基于集合的选择方式。
具体的可以看pod和pod 控制器解析笔记
apiVersion: apps/v1kind: Deploymentmetadata:name: nginxnamespace: defaultlabels:app: nginxspec:selector:matchLabels:# matchLabels 是一个 {key,value} 组成的 map。# map 中的一个 {key,value} 条目相当于 matchExpressions 中的一个元素# 其 key 为 map 的 keyoperator 为 In values 数组则只包含 value 一个元素。# matchExpression 等价于基于集合的选择方式# 支持的 operator 有 In、NotIn、Exists 和 DoesNotExist。# 当 operator 为 In 或 NotIn 时values 数组不能为空。# 所有的选择条件都以 AND 的形式合并计算即所有的条件都满足才可以算是匹配app: nginxmatchExpressions:- {key: tier, operator: In, values: [cache]}- {key: environment, operator: NotIn, values: [dev]}replicas: 1template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latest