Namespace
Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。
默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的"组",以方便不同的组的资源进行隔离使用和管理。
可以通过kubernetes的授权机制,将不同的namespace交给不同租户进行管理,这样就实现了多租户的资源隔离。此时还能结合kubernetes的资源配额机制,限定不同租户能占用的资源,例如CPU使用量、内存使用量等等,来实现租户可用资源的管理。
kubernetes在集群启动之后,会默认创建几个namespace
[root@master ~]# kubectl get namespace NAME STATUS AGE default Active 45h # 所有未指定Namespace的对象都会被分配在default命名 空间 kube-node-lease Active 45h # 集群节点之间的心跳维护,v1.13开始引入 kube-public Active 45h # 此命名空间下的资源可以被所有人访问(包括未认证用 户) kube-system Active 45h # 所有由Kubernetes系统创建的资源都处于这个命名空间
ClusterIP的缺陷:只能在集群内部使用。
NodePort:可以外部访问,但是要加映射的端口。
LoadBalance:负载均衡是云平台用的比较多的
pod创建时组件之间的交互:把命令,访问的入口不管是命令行还是web界面,访问的入口是API server,API server会把他相关信息写到键值对的数据库,这个数据库叫做etcd;
Scheduler会有个监控的组件,会时刻关注API Server和etcd,这个Scheduler会根据相关性请求会判断pod被调度到哪个节点。然后哪些节点符合我们的调度规则,告诉API Server,然后把我们目标调度节点写入etcd里面,然后etcd会通知这个节点Kubelet读取。(Kubelet是管理整个pod生命周期的)
标识:应该是当前环境下下拉一个pod,然后会创建一个container runtime容器运行。
!!!k8s不是容器,他是容器的一种编排工具
我们先把他删了吧,前面只是为了演示文件效果,我们起前面一样名字的话不太好‘
创建并运行
kubernetes没有提供单独运行Pod的命令,都是通过Pod控制器来实现的
# 命令格式: kubectl run (pod控制器名称) [参数] # --image 指定Pod的镜像 # --port 指定端口 # --namespace 指定namespace [root@master ~]# kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace dev
我们先删掉了dev的命名空间
然后我们把这个外面的控制器也删了
把这个默认的也删掉
然后就没有这个pod了
我们先生成一个名称空间
然后我们来运行
然后就创建好了
我们可以看详细信息
这个只能在集群内部访问这个,在集群内部任何一个节点都可以去访问
注意,这就没有了(版本的问题)
这是因为当前Pod是由Pod控制器创建的,控制器会监控Pod状况,一旦发现Pod死亡,会立即重建
此时要想删除Pod,必须删除Pod控制器
这就彻底没有了
Label
命令方式
# 为pod资源打标签 [root@master ~]# kubectl label pod nginx-pod version=1.0 -n dev pod/nginx-pod labeled # 为pod资源更新标签 [root@master ~]# kubectl label pod nginx-pod version=2.0 -n dev --overwrite pod/nginx-pod labeled # 查看标签 [root@master ~]# kubectl get pod nginx-pod -n dev --show-labels NAME READY STATUS RESTARTS AGE LABELS nginx-pod 1/1 Running 0 10m version=2.0 # 筛选标签 [root@master ~]# kubectl get pod -n dev -l version=2.0 --show-labels NAME READY STATUS RESTARTS AGE LABELS nginx-pod 1/1 Running 0 17m version=2.0 [root@master ~]# kubectl get pod -n dev -l version!=2.0 --show-labels No resources found in dev namespace. #删除标签 [root@master ~]# kubectl label pod nginx-pod version- -n dev pod/nginx-pod labeled
我们又设置一个成了
更新标签
Deployment
是控制器,是最小控制单元
我们先删掉