1-什么是NameSpace?
- 俗称命名空间,可以单纯的认为
namespaces
是kubernetes集群中的虚拟化集群。在一个Kubernetes集群中可以拥有多个命名空间,它们在逻辑上彼此隔离。 可以为你提供组织,安全甚至性能方面的帮助! - Namespace是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的pods, services, replication controllers和deployments等都是属于某一个namespace的(默认是default),而node, persistentVolumes等则不属于任何namespace。
大多数的Kubernetes中的集群默认会有一个叫default的namespace
。然而实际上存在4个namespace
。
- default:资源默认被创建于default命名空间。
- kube-system:kubernetes系统组件使用。
- kube-node-lease: kubernetes集群节点租约状态。
- kube-public:公共资源使用,但实际上现在并不常用。
这个默认(default)的namespace并没什么特别,但是不能删除它。这很适合刚刚开始使用kubernetes和一些小的产品系统。但不建议应用于大型生产系统。因为这种复杂系统中,团队会非常容易意外地或者无意识地重写或者中断其他服务service。相反,创建多个命名空间来把service(服务)分割成更容易管理的块。
(default)的namespace基本作用:
多租户情况下,实现资源隔离。
属于逻辑隔离,属于管理边界,不属于网络边界。
可以针对每个namespace做资源配额。
1.1 查看命名空间
1、具体命令
## 查看命名空间
kubectl get namespace
## 查看所有命名空间的pod资源
kubectl get pod --all-namespaces
kubectl get pod -A
## 简写命令(查看命名空间)
kubectl get ns
查询结果!!!
## 1、查看命名空间
[root@k8s-master01 data]# kubectl get namespace
NAME STATUS AGE
default Active 169m
kube-node-lease Active 169m
kube-public Active 169m
kube-system Active 169m
## 2、查看所有命名空间的pod资源
[root@k8s-master01 data]# kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-6b94766748-pn4l8 1/1 Running 0 78m
kube-system calico-node-4m62k 1/1 Running 0 78m
kube-system calico-node-7bnqj 1/1 Running 0 78m
kube-system calico-node-krh64 1/1 Running 0 78m
kube-system calico-node-zwvv9 1/1 Running 0 78m
kube-system coredns-6955765f44-nwzg6 1/1 Running 0 169m
kube-system coredns-6955765f44-rdwnc 1/1 Running 0 169m
kube-system etcd-k8s-master01 1/1 Running 1 169m
kube-system kube-apiserver-k8s-master01 1/1 Running 1 169m
kube-system kube-controller-manager-k8s-master01 1/1 Running 1 169m
kube-system kube-proxy-4vdxm 1/1 Running 1 159m
kube-system kube-proxy-5nlqn 1/1 Running 1 154m
kube-system kube-proxy-npzs2 1/1 Running 1 169m
kube-system kube-proxy-z47rt 1/1 Running 1 154m
kube-system kube-scheduler-k8s-master01 1/1 Running 1 169m
## 3、查看命名空间
[root@k8s-master01 data]# kubectl get ns
NAME STATUS AGE
default Active 169m
kube-node-lease Active 169m
kube-public Active 169m
kube-system Active 169m
[root@k8s-master01 data]#
3、命名空间说明
[root@k8s-master01 data]# kubectl get namespace
NAME STATUS AGE
default Active 169m # 用户创建的pod默认在此命名空间
kube-node-lease Active 169m # 所有用户均可以访问,包括未认证用户
kube-public Active 169m # kubernetes集群节点租约状态
kube-system Active 169m # kubernetes集群在使用
1.2 NameSpace相关操作
1、创建NameSpace
kubectl create namespace guardwhy01
-- 简写命令
kubectl create ns guardwhy02
2、删除NameSpace
kubectl delete namespace guardwhy01
-- 简写命令
kubectl delete ns guardwhy02
3、执行结果!!!
[root@k8s-master01 data]# kubectl get namespace
NAME STATUS AGE
default Active 3h7m
kube-node-lease Active 3h7m
kube-public Active 3h7m
kube-system Active 3h7m
[root@k8s-master01 data]# kubectl create namespace guardwhy01
namespace/guardwhy01 created
[root@k8s-master01 data]# kubectl create ns guardwhy02
namespace/guardwhy02 created
[root@k8s-master01 data]# kubectl get namespace
NAME STATUS AGE
default Active 3h8m
guardwhy01 Active 36s
guardwhy02 Active 5s
kube-node-lease Active 3h8m
kube-public Active 3h8m
kube-system Active 3h8m
[root@k8s-master01 data]# kubectl delete namespace guardwhy01
namespace "guardwhy01" deleted
[root@k8s-master01 data]# kubectl delete ns guardwhy02
namespace "guardwhy02" deleted
[root@k8s-master01 data]# kubectl get namespace
NAME STATUS AGE
default Active 3h12m
kube-node-lease Active 3h12m
kube-public Active 3h12m
kube-system Active 3h12m
[root@k8s-master01 data]#
2- 什么是pod?
Pod是kubernetes集群能够调度的最小单元,Pod是容器的封装 。在Kubernetes集群中,Pod是所有业务类型的基础,也是K8S管理的最小单位级,它是一个或多个容器的组合。这些容器共享存储、网络和命名空间,以及如何运行的规范。在Pod中,所有容器都被同一安排和调度,并运行在共享的上下文中。对于具体应用而言,Pod是它们的逻辑主机,Pod包含业务相关的多个应用容器。
2.1 Pod的基本特点
网络:每一个Pod都会被指派一个唯一的Ip地址,在Pod中的每一个容器共享网络命名空间,包括Ip地址和网络端口。在同一个Pod中的容器可以和localhost进行互相通信。当Pod中的容器需要与Pod外的实体进行通信时,则需要通过端口等共享的网络资源。
存储:Pod能够被指定共享存储卷的集合,在Pod中所有的容器能够访问共享存储卷,允许这些容器共享数据。存储卷也允许在一个Pod持久化数据,以防止其中的容器需要被重启。
2.2 Pod的工作方式
1、K8s一般不直接创建Pod,而是通过控制器和模版配置来管理和调度。
2、Pod重启:在Pod中的容器可能会由于异常等原因导致其终止退出,Kubernetes提供了重启策略以重启容器。重启策略对同一个Pod的所有容器起作用,容器的重启由Node上的kubelet执行。Pod支持三种重启策略,在配置文件中通过restartPolicy
字段设置重启策略。
Always:只要退出就会重启。
OnFailure:只有在失败退出(exit code不等于0)时,才会重启。
Never:只要退出,就不再重启
注意,这里的重启是指在Pod的宿主Node上进行本地重启,而不是调度到其它Node上。
3、资源限制
Kubernetes通过cgroups限制容器的CPU和内存等计算资源,包括requests(请求,调度器保证调度到资源充足的Node上)和limits(上限)。
2.3 Pod基本操作
1、查看Pod,执行以下命令
-- 1、查看default命名空间下的pods
kubectl get pods
-- 2、查看kube-system命名空间下的pods
kubectl get pods -n kube-system
-- 3、查看所有命名空间下的pods
kubectl get pod --all-namespaces
kubectl get pod -A
2、创建Pod
下载tomcat相关的镜像
[root@k8s-master01 data]# docker pull tomcat:9.0.37-jdk8-openjdk-slim
[root@k8s-master01 data]# docker pull tomcat:9.0.20-jre8-alpine
[root@k8s-master01 data]