Namespace
1、K8S集群中默认的Namespace为default,通过Namespace可以实现Pod之间的相互隔离(如测试环境、生成环境的隔离)
2、通过K8S的资源配置机制限定不同的Namespace对CPU、内存的使用,再通过K8S授权机制将不同的Namespace交给不同的租户进行管理,实现多租户资源的隔离
- 1、创建命名空间
kubectl create ns dev # 创建命名空间
kubectl delete ns dev # 删除命名空间,该空间下的所有资源也将被删除
- 2、创建命名空间(配置文件)
# ns-dev.yaml 文件
apiVersion: v1
kind: Namespace
metadata:
name: dev
kubectl create -f /home/lixing/ns-dev.yaml # 创建命名空间
kubectl delete -f /home/lixing/ns-dev.yaml # 删除命名空间,该空间下的所有资源也将被删除
- 查询命名空间
kubectl get ns # 查询命名空间
default 未指定命名空间的对象都会被分配到该空间
kube-node-lease 集群节点之间的心跳维护
kube-public 此命名空间下的资源可以被所有用户访问
kube-system 由K8S系统创建的资源都会被分配到该空间
- 查询 kube-system 命名空间下的 deployment、pod、service 资源
kubectl get deployment,pods,service -n kube-system -o wide
deployment.apps/coredns 【CoreDNS 在K8s1.12版本之后成为K8S集群默认的DNS服务,主要用作服务发现】
pod/kube-apiserver-k8smaster【资源操作的唯一入口,接受用户输入的指令,提供认证、授权、API注册和发现等机制】
pod/kube-scheduler-k8smaster【负责集群的资源调度,按照预定的策略将pod调度到相应的node节点上】
pod/kube-controller-manager-k8smaster【负责维护集群的状态,程序部署、故障检测、自动扩展、滚动更新】
pod/etcd-k8smaster【负责存储集群中各种资源的对象信息】
pod/kube-proxy-b4j99【负责提供集群内部的服务发现和负载均衡,当前K8S集群一共3个节点】
pod/kube-proxy-lllq9【负责提供集群内部的服务发现和负载均衡,当前K8S集群一共3个节点】
pod/kube-proxy-mnfdn【负责提供集群内部的服务发现和负载均衡,当前K8S集群一共3个节点】
service/kube-dns【K8S的DNS服务】
Label
1、Namespace虽然可以对Pod进行隔离,但不同Namespace下的Pod是不能相互访问的
2、Label通过K-V的形式在资源上添加标识,用它来对资源(Node、Pod、Service)进行区分和选择,实现资源的多纬度分组,以便灵活、方便地进行资源分配、调度、配置和部署等管理
-
常用Label标签
架构标签:“tier”:“frontend|backend”
环境标签:“env”:“dev|test|pro”
版本标签:“version”:“release|stable” -
Label标签选择器
env = test:选择所有Label中的key="env"并且value="test"的资源对象
env != test:选择所Label中的key="env"并且value!="test"的资源对象
env in (dev,test):选择所有Label中的key="env"并且value="dev"或value="test"的资源对象
env not in (dev,test):选择所有Label中的key="env"并且value!="dev"和value!="test"的资源对象
env = test,version != stable:选择所有Label中的key="env"并且value=“test”,并且key="version"并且value!="stable"的资源对象 -
1、打标签
kubectl label pod nginx -n dev version=1.0 # 给Pod(nginx)添加标签(version=1.0)
kubectl label pod nginx -n dev version=2.0 --overwrite # 给Pod(nginx)更新标签(version=2.0)
kubectl label pod nginx -n dev version- # 给Pod(nginx)删除标签(version)
- 2、打标签
# pod-nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-nginx
namespace: dev
labels:
env: "test"
version: "1.0"
spec:
containers:
- image: nginx:1.17.1
imagePullPolicy: IfNotPresent
name: container-nginx
ports:
- name: port-nginx
containerPort: 80
protocol: TCP
kubectl create -f /home/lixing/pod-nginx.yaml # 创建标签
kubectl delete -f /home/lixing/pod-nginx.yaml # 删除标签
- 查看标签
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