如何在智能告警平台CA触发测试告警
869
2022-11-05
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
测试下命名空间的隔离性
首先我们需要在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
可以看到不同命名空间中的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
可以看到不同命名空间中的pod IP是可以访问的。
那么我们总结一下,如下图:
至此,本文结束。
往期推荐如何安装nginx,并根据不同的项目读取不同的配置文件linux搭建mongodb数据库副本集13-docker系列-docker之harbor仓库的搭建
发表评论
暂时没有评论,来抢沙发吧~