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

网友投稿 869 2022-11-05

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

k8s部署-31-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,就不用新建了,我这里是演示完就删了,所以没了。

# 查看default下面的pod资源[root@node1 namespace]# kubectl get podsNAME READY STATUS RESTARTS AGEdeploy-springboot-5dbfc55f78-mpg69 1/1 Running 1 24hnginx-ds-q2pjt 1/1 Running 17 11dnginx-ds-zc5qt 1/1 Running 22 17d[root@node1 namespace]# # 新建一个tomcat的pod[root@node1 namespace]# vim tomcat-demo.yaml #deployapiVersion: apps/v1kind: Deploymentmetadata: name: tomcat-demospec: selector: matchLabels: app: tomcat-demo replicas: 1 template: metadata: labels: app: tomcat-demo spec: containers: - name: tomcat-demo image: registry.cn-hangzhou.aliyuncs.com/liuyi01/tomcat:8.0.51-alpine ports: - containerPort: 8080---#serviceapiVersion: v1kind: Servicemetadata: name: tomcat-demospec: ports: - port: 80 protocol: TCP targetPort: 8080 selector: app: tomcat-demo---#ingressapiVersion: extensions/v1beta1kind: Ingressmetadata: name: tomcat-demospec: rules: - host: tomcat.yunweijia.com http: paths: - path: backend: serviceName: tomcat-demo servicePort: 80[root@node1 namespace]# [root@node1 namespace]# kubectl apply -f tomcat-demo.yaml deployment.apps/tomcat-demo createdservice/tomcat-demo createdingress.extensions/tomcat-demo created[root@node1 namespace]# [root@node1 namespace]# kubectl get podsNAME READY STATUS RESTARTS AGEdeploy-springboot-5dbfc55f78-mpg69 1/1 Running 1 24hnginx-ds-q2pjt 1/1 Running 17 11dnginx-ds-zc5qt 1/1 Running 22 17dtomcat-demo-54cbbcffdb-dldb2 1/1 Running 0 90s[root@node1 namespace]#

首先登录同一个命名空间下的pod,来访问下看看。

[root@node1 namespace]# kubectl exec -it tomcat-demo-54cbbcffdb-dldb2 -- bashbash-4.4# ping nginx-dsPING nginx-ds (10.233.127.233): 56 data bytes64 bytes from 10.233.127.233: seq=0 ttl=64 time=0.053 ms64 bytes from 10.233.127.233: seq=1 ttl=64 time=0.111 ms^C--- nginx-ds ping statistics ---2 packets transmitted, 2 packets received, 0% packet lossround-trip min/avg/max = 0.053/0.082/0.111 msbash-4.4# wget nginx-dsConnecting to nginx-ds (10.233.127.233:80)index.html 100% |***************************************************************************************************************************| 615 0:00:00 ETAbash-4.4#

从上面可以看到,同一个命名空间下,我们可以通过域名访问通另一个pod,并且可以下载资源。

那么接下来我们在default下,访问一下dev下的web-demo,看看啥情况。

[root@node1 namespace]# kubectl exec -it tomcat-demo-54cbbcffdb-dldb2 -- bashbash-4.4# ping web-demoping: bad address 'web-demo'bash-4.4#

可以看到通过dev下面pod的域名,是访问不通的,那么我们再试试service的IP呢?

[root@node1 ~]# kubectl get service -n devNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEweb-demo ClusterIP 10.233.101.225 80/TCP 44m[root@node1 ~]# # 再进入default的pod中bash-4.4# ping 10.233.101.225PING 10.233.101.225 (10.233.101.225): 56 data bytes64 bytes from 10.233.101.225: seq=0 ttl=64 time=0.096 ms64 bytes from 10.233.101.225: seq=1 ttl=64 time=0.116 ms^C--- 10.233.101.225 ping statistics ---2 packets transmitted, 2 packets received, 0% packet lossround-trip min/avg/max = 0.096/0.106/0.116 msbash-4.4#

可以看到不同命名空间中的service IP是可以访问通的哈。

然后再试试pod的IP呢?

[root@node1 ~]# kubectl get pod -o wide -n devNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESweb-demo-58bf7ccc9c-d7gxl 1/1 Running 0 47m 10.200.104.41 node2 [root@node1 ~]# # 再进入default的pod中bash-4.4# ping 10.200.104.41PING 10.200.104.41 (10.200.104.41): 56 data bytes64 bytes from 10.200.104.41: seq=0 ttl=62 time=0.833 ms64 bytes from 10.200.104.41: seq=1 ttl=62 time=0.562 ms^C--- 10.200.104.41 ping statistics ---2 packets transmitted, 2 packets received, 0% packet lossround-trip min/avg/max = 0.562/0.697/0.833 msbash-4.4#

可以看到不同命名空间中的pod IP是可以访问的。

那么我们总结一下,如下图:

至此,本文结束。

往期推荐如何安装nginx,并根据不同的项目读取不同的配置文件linux搭建mongodb数据库副本集13-docker系列-docker之harbor仓库的搭建

上一篇:软件测试培训之测试用例的维护
下一篇:软件测试培训之测试用例实现规则
相关文章

 发表评论

暂时没有评论,来抢沙发吧~