在k8s中的我们的资源如何隔离呢?如果说有一个服务异常了,内存无限制的占用,其他的服务岂不是无法部署上去了?
而且我们一般一个集群是给很多人,很多对象使用的,那么如何保证他们互不打扰?且无法看到其他人的相关内容呢?
Namespace
一个重要的概念,Namespace,我们之前说过,但是没有细说他的功能是什么,他可以实现资源隔离和配额的隔离,比如下面的信息:
从上图可以清晰的看到他能做什么,接下来实际操作下吧。
新建namespace
首先我们先查询下本地有多少个namespace;
[root@node1 ~]# kubectl get namespace
NAME STATUS AGE
default Active 18d
kube-node-lease Active 18d
kube-public Active 18d
kube-system Active 18d
[root@node1 ~]#
再看下命名空间中都有什么呢?这里我们只查看pod哈。
[root@node1 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
deploy-springboot-5dbfc55f78-mpg69 1/1 Running 1 21h
nginx-ds-q2pjt 1/1 Running 17 11d
nginx-ds-zc5qt 1/1 Running 22 17d
[root@node1 ~]# kubectl get pods -n kube-node-lease
No resources found in kube-node-lease namespace.
[root@node1 ~]# kubectl get pods -n kube-public
No resources found in kube-public namespace.
[root@node1 ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-858c9597c8-6gzd5 1/1 Running 29 17d
calico-node-6k479 1/1 Running 21 17d
calico-node-bnbxx 1/1 Running 21 17d
coredns-84646c885d-6fsjk 1/1 Running 21 17d
coredns-84646c885d-sdb6l 1/1 Running 21 17d
kube-flannel-ds-d7kvz 0/1 CrashLoopBackOff 614 11d
kube-flannel-ds-klfvj 0/1 CrashLoopBackOff 612 11d
nginx-proxy-node3 1/1 Running 22 18d
nodelocaldns-gj9xf 1/1 Running 21 17d
nodelocaldns-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.yaml
apiVersion: v1
kind: Namespace
metadata:
name: dev
[root@node1 namespace]# kubectl create -f create_namespace.yaml
namespace/dev created
[root@node1 namespace]#
那么我们就创建了一个名字叫dev的命名空间,我们查看下:
[root@node1 namespace]# kubectl get namespace
NAME STATUS AGE
default Active 18d
dev Active 69s
kube-node-lease Active 18d
kube-public Active 18d
kube-system Active 18d
[root@node1 namespace]#
新建一个pod
[root@node1 namespace]# vim web-demo.yaml
#deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-demo
namespace: dev
spec:
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
---
#service
apiVersion: v1
kind: Service
metadata:
name: web-demo
namespace: dev
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: web-demo
#type: ClusterIP
---
#ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-demo
namespace: dev
spec:
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 created
service/web-demo created
ingress.networking.k8s.io/web-demo created
[root@node1 namespace]#
然后查看下dev这个命名空间下是否有了;
[root@node1 namespace]# kubectl get pods -n dev
NAME READY STATUS RESTARTS AGE
web-demo-58bf7ccc9c-d7gxl 1/1 Running 0 42s
[root@node1 namespace]# kubectl get all -n dev
NAME READY STATUS RESTARTS AGE
pod/web-demo-58bf7ccc9c-d7gxl 1/1 Running 0 46s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/web-demo ClusterIP 10.233.101.225 <none> 80/TCP 46s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/web-demo 1/1 1 1 46s
NAME DESIRED CURRENT READY AGE
replicaset.apps/web-demo-58bf7ccc9c 1 1 1 46s
[root@node1 namespace]#
测试下命名空间的隔离性
首先我们需要在default这个命名空间下新建个两个pod,然后去做测试,因为我现在就有nginx这个pod,所以再启动一个tomcat的pod吧。
如果看过我之前的文章,你应该在default命名空间中有较多的pod,就不用新建了,我这里是演示完就删了,所以没了。
剩余内容请转至VX公众号 “运维家” ,回复 “138” 查看。