k8s部署-31-k8s中如何进行资源隔离资源


在k8s中的我们的资源如何隔离呢?如果说有一个服务异常了,内存无限制的占用,其他的服务岂不是无法部署上去了?而且我们一般一个集群是给很多人,很多对象使用的,那么如何保证他们互不打扰?且无法看到其他人的相关内容呢?


Namespace

一个重要的概念,Namespace,我们之前说过,但是没有细说他的功能是什么,他可以实现资源隔离和配额的隔离,比如下面的信息:

从上图可以清晰的看到他能做什么,接下来实际操作下吧。

新建namespace

首先我们先查询下本地有多少个namespace;

[root@node1 ~]# kubectl get namespaceNAME              STATUS   AGEdefault           Active   18dkube-node-lease   Active   18dkube-public       Active   18dkube-system       Active   18d[root@node1 ~]#

再看下命名空间中都有什么呢?这里我们只查看pod哈。

[root@node1 ~]# kubectl get podsNAME                                 READY   STATUS    RESTARTS   AGEdeploy-springboot-5dbfc55f78-mpg69   1/1     Running   1          21hnginx-ds-q2pjt                       1/1     Running   17         11dnginx-ds-zc5qt                       1/1     Running   22         17d[root@node1 ~]# kubectl get pods -n kube-node-leaseNo resources found in kube-node-lease namespace.[root@node1 ~]# kubectl get pods -n kube-publicNo resources found in kube-public namespace.[root@node1 ~]# kubectl get pods -n kube-systemNAME                                       READY   STATUS             RESTARTS   AGEcalico-kube-controllers-858c9597c8-6gzd5   1/1     Running            29         17dcalico-node-6k479                          1/1     Running            21         17dcalico-node-bnbxx                          1/1     Running            21         17dcoredns-84646c885d-6fsjk                   1/1     Running            21         17dcoredns-84646c885d-sdb6l                   1/1     Running            21         17dkube-flannel-ds-d7kvz                      0/1     CrashLoopBackOff   614        11dkube-flannel-ds-klfvj                      0/1     CrashLoopBackOff   612        11dnginx-proxy-node3                          1/1     Running            22         18dnodelocaldns-gj9xf                         1/1     Running            21         17dnodelocaldns-sw9jh                         1/1     Running            21         17d[root@node1 ~]#

从上面可以看到,如果不指定命名空间的话,默认访问的是名字为default的命名空间,如果我们想看到其他命名空间下的资源,我们需要手动使用“-n”参数来指定。而且,如果你创建的时候没有指定namespace,那么默认也是都在default这个命名空间下的。

那么接下来我们来创建一个命名空间吧。

[root@node1 ~]# mkdir namespace[root@node1 ~]# cd namespace/[root@node1 namespace]# vim create_namespace.yamlapiVersion: v1kind: Namespacemetadata:  name: dev[root@node1 namespace]# kubectl create -f create_namespace.yaml namespace/dev created[root@node1 namespace]# 

那么我们就创建了一个名字叫dev的命名空间,我们查看下:

[root@node1 namespace]# kubectl get namespaceNAME              STATUS   AGEdefault           Active   18ddev               Active   69skube-node-lease   Active   18dkube-public       Active   18dkube-system       Active   18d[root@node1 namespace]#

新建一个pod

[root@node1 namespace]# vim web-demo.yaml #deployapiVersion: apps/v1kind: Deploymentmetadata:  name: web-demo  namespace: devspec:  selector:    matchLabels:      app: web-demo  replicas: 1  template:    metadata:      labels:        app: web-demo    spec:      containers:      - name: web-demo        image: registry.cn-beijing.aliyuncs.com/yunweijia0909/tomcat:jre8-openjdk        ports:        - containerPort: 8080---#serviceapiVersion: v1kind: Servicemetadata:  name: web-demo  namespace: devspec:  ports:  - port: 80    protocol: TCP    targetPort: 8080  selector:    app: web-demo  #type: ClusterIP---#ingressapiVersion: networking.k8s.io/v1kind: Ingressmetadata:  name: web-demo  namespace: devspec:  rules:  - host: web.yunweijia.com    http:      paths:      - path: /        pathType: Prefix        backend:          service:            name: web-demo-dev            port:              number: 80[root@node1 namespace]# kubectl apply -f web-demo.yaml deployment.apps/web-demo createdservice/web-demo createdingress.networking.k8s.io/web-demo created[root@node1 namespace]#

然后查看下dev这个命名空间下是否有了;

[root@node1 namespace]# kubectl get pods -n devNAME                        READY   STATUS    RESTARTS   AGEweb-demo-58bf7ccc9c-d7gxl   1/1     Running   0          42s[root@node1 namespace]# kubectl get all -n devNAME                            READY   STATUS    RESTARTS   AGEpod/web-demo-58bf7ccc9c-d7gxl   1/1     Running   0          46sNAME               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGEservice/web-demo   ClusterIP   10.233.101.225           80/TCP    46sNAME                       READY   UP-TO-DATE   AVAILABLE   AGEdeployment.apps/web-demo   1/1     1            1           46sNAME                                  DESIRED   CURRENT   READY   AGEreplicaset.apps/web-demo-58bf7ccc9c   1         1         1       46s[root@node1 namespace]#

测试下命名空间的隔离性

首先我们需要在default这个命名空间下新建个两个pod,然后去做测试,因为我现在就有nginx这个pod,所以再启动一个tomcat的pod吧。

如果看过我之前的文章,你应该在default命名空间中有较多的pod,就不用新建了,我这里是演示完就删了,所以没了。

剩余内容请转至VX公众号 “运维家” ,回复 “138” 查看。

你可能感兴趣的:(k8s部署-31-k8s中如何进行资源隔离资源)