Namespace
默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的“组”,以方便不同的组的资源进行隔离使用和管理。
kubernetes在集群启动之后,会默认创建几个namespace
名称 | 含义 |
---|---|
default | 所有未指定Namespace的对象都会被分配在default命名空间 |
kube-node-lease | 集群节点之间的心跳维护,v1.13开始引入 |
kube-public | 此命名空间下的资源可以被所有人访问(包括未认证用户) |
kube-system | 所有由Kubernetes系统创建的资源都处于这个命名空间 |
Namespace的名字遵循如下要求:
- 不能以
kube-
作为前缀。 - 最多
63
个字符。 - 只能是小写字母和数字,或者
-
中划线。 - 首字符必须是字母或数字。
- 尾字符必须是字母或数字。
- 无法更新。
备注:命名空间的命名规则可以使用正则[a-z0-9]([-a-z0-9]*[a-z0-9])?
和最大63
字符来约束。
查看namespace
kubectl get ns
或者
kubectl get namespace
创建namespace
(1)使用命令行方式创建
kubectl create namespace test-01
(2)使用yaml文件创建
创建一个名为test-02.yaml的yaml文件
apiVersion: v1
kind: Namespace
metadata:
name: test-02
然后使用如下命令进行创建
kubectl create -f test-02.yaml
或
kubectl apply -f test-02.yaml
删除namespace
(1)命令行方式删除
kubectl delete ns/test-01
(2)使用yaml文件删除
如果Namespace是使用yaml文件创建的,也可以使用yaml文件进行删除
kubectl delete -f test-02.yaml
Pod
Pod 是 k8s 系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型,也是在 k8s 上运行容器化应用的资源对象。k8s 不会直接处理容器,而是通过 Pod。Pod 是由一个或多个 container 组成的。
Pod 是 Kubernetes 的最重要概念,每一个 Pod 都有一个特殊的被称为“根容器”的 Pause容器。Pause 容器对应的镜像属于 Kubernetes 平台的一部分,除了 Pause 容器,每个 Pod还包含一个或多个紧密相关的用户业务容器。
Kubernetes 集群中的 Pod 主要有两种用法:
-
运行单个容器的 Pod:“每个 Pod 一个容器”模型是最常见的 Kubernetes 用例; 在这种情况下,可以将 Pod 看作单个容器的包装器,并且 Kubernetes 直接管理 Pod,而不是容器。
-
运行多个协同工作的容器的 Pod: Pod 可能封装由多个紧密耦合且需要共享资源的共处容器组成的应用程序。 这些位于同一位置的容器可能形成单个内聚的服务单元 —— 一个容器将文件从共享卷提供给公众, 而另一个单独的“边车”(sidecar)容器则刷新或更新这些文件。 Pod 将这些容器和存储资源打包为一个可管理的实体。
查看Pod
查看默认命名空间的Pod
kubectl get pods
如果Pod指定了在某个命名空间的话,需要指定命名空间,否则无法查看。查看特定命名空间的Pod,比如Namespace为kube-system下的Pod
kubectl get pods -n kube-system
或
kubectl get pods --namespace kube-system
查看所有Pod
kubectl get pods -A
创建Pod
(1)命令行方式
kubectl run nginx --image=nginx
其中,nginx
为pod名字,--image=nginx
表示使用Nginx镜像。除此之外,还能用--image-pull-policy
指定镜像拉取策略。k8s的镜像拉取策略主要有以下三种:
策略 | 解释 |
---|---|
Always | 总是从镜像仓库获取镜像。当标签为latest,默认为Always |
Never | 禁止从仓库中获取镜像,只能使用本地镜像 |
IfNotPresent | 仅当本地没有镜像时,才从镜像仓库获取镜像。当标签为自定义时(不是latest),默认为IfNotPresent |
查看pod,STATUS为Running就表示pod创建成功
kubectl get pods
通过describe命令确定ip
kubectl describe pod nginx
其中nginx为pod的名字
通过该ip访问nginx也确实起来了
(2)使用yaml文件创建
创建一个名为test_pod.yaml的yaml
apiVersion: v1 #api版本
kind: Pod #创建的资源
metadata:
name: pod-test #Pod的名字
namespace: default #指定命名空间
labels:
name: pod-test #Pod具有的标签
spec:
containers:
- name: pod-test #Pod里容器的名字,这里必须要用-,不加就报错
image: nginx:latest #容器使用的镜像
imagePullPolicy: IfNotPresent #镜像拉取策略
ports:
- containerPort: 80 #容器暴露的端口,这里必须要用-,不加就报错
然后使用如下命令创建:
kubectl create -f test_pod.yaml
删除Pod
(1)命令行方式删除
kubectl delete pod nginx
其中,nginx是pod的名字。如果Pod在某个命名空间,也需要指定-n参数。如果删除速度比较慢的话可以加--force
。
(2)使用yaml文件
如果Pod是使用yaml文件创建的,也可以使用yaml文件删除
kubectl delete -f test_pod.yaml
(3)删除所有Pod
kubectl delete pods --all
执行容器命令
(1)执行pod的某个命令,默认使用pod的第一个容器执行
kubectl exec <pod-name> -- command
例如:让名为pod-test的pod执行ls命令
kubectl exec pod-test -- ls
(2)指定pod的某个容器执行命令
kubectl exec <pod-name> -c <container-name> -- date
(3)进入容器
kubectl exec -it <pod-name> -c <container-name> -- /bin/bash
用exit即可退出容器