Kubernetes实战(二十八)-环境共享与隔离(Namespace)

Kubernetes使用命名空间的概念帮助解决集群中在管理对象时的复杂性问题。命名空间允许将对象分组到一起,便于将它们作为一个单元进行筛选和控制。无论是应用自定义的访问控制策略,还是为了测试环境而分离所有组件,命名空间都是一个按照组来处理对象。

Namespace 即命名空间,主要有两个方面的作用:

  • 资源隔离:可为不同的团队/用户(或项目)提供虚拟的集群空间,共享同一个Kubernetes集群的资源。比如可以为团队A创建一个Namespace ns-a,团队A的项目都部署运行在 ns-a 中,团队B创建另一个Namespace ns-b,其项目都部署运行在 ns-b 中,或者为开发、测试、生产环境创建不同的Namespace,以做到彼此之间相互隔离,互不影响。我们可以使用 ResourceQuota 与 Resource LimitRange 来指定与限制 各个namesapce的资源分配与使用
  • 权限控制:可以指定某个namespace哪些用户可以访问,哪些用户不能访问

1、Namespace 使用

查看 Namesapce,命令如下:

[root@kmaster ~]# kubectl get ns
NAME                   STATUS   AGE
default                Active   34d
develop                Active   17d
ingress-nginx          Active   33d
kube-node-lease        Active   34d
kube-public            Active   34d
kube-system            Active   34d
kubernetes-dashboard   Active   31d
pre-release            Active   17d

可以使用 kubectl describe 命令来查看某个namespace的概要信息,命令如下:

[root@kmaster ~]# kubectl describe ns default
Name:         default
Labels:       
Annotations:  
Status:       Active

No resource quota.

No resource limits.

常用创建 Namespace 方式是通过 yaml 文件创建,命令如下:

[root@master ~]# cat > ns.yaml <

删除 Namespace,命令如下:

[root@master ~]# kubectl delete ns oas-dev

切换 Namespace 上下文,传送门如下:

Kubernetes 切换context和namespace

2、Pod 与 Namespace

通过 Namespace、Deployment、Service 编排文件来展示 Namespace 在实际应用中的使用方法。

ns.yaml 内容如下:

apiVersion: v1
kind: Namespace
metadata:
  name: oas-dev

deploy.yaml 内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat
  namespace: oas-dev
  labels:
    name: tomcat
spec:
  replicas: 1
  selector:
    matchLabels:
      name: tomcat
  template:
    metadata:
      labels:
        name: tomcat
      containers:
      - name: tomcat
        image: 10.12.1.202:8088/oascloud/tomcat:latest
        volumeMounts:
        - name: tomcat
          mountPath: /usr/local/logs
        command: ['sh','-c','java -server -Xms512m -Xmx1024m -Djava.io.tmpdir=/var/tmp -Duser.timezone=Asia/Shanghai -jar tomcat.jar --server.port=8080 --spring.profiles.active=remote']
        ports:
        - containerPort: 8080
      volumes:
      - name: tomcat
        hostPath:
          path: /usr/local/logs

svc.yaml 内容如下:

apiVersion: v1
kind: Service
metadata:
  name: tomcat
  namespace: oas-dev
  labels:
    name: tomcat
spec:
  type: NodePort
  ports:
  - nodePort: 30002
    targetPort: 8080
    port: 8080
  selector:
    name: tomcat

Pod 和 Service 通过 labels 中的 name = tomcat 进行匹配,而他们都归属于同一个 oas-dev 命名空间下。

到此集群环境共享与隔离(Namespace)介绍完成。

你可能感兴趣的:(Kubernetes实战)