声明样式的资源清单文件。
k8s v1.18.2
1 YAML文件书写格式
(1)YAML介绍
YAML:仍是一种标记语言。
为了强调这种语言以数据为中心,而不是以标记语言为重点。
(2)基本语法
使用空格作为缩进;
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可;
使用#号注释。
(3)YAML支持的数据结构
(3-1)对象
键值对的集合,也称为映射、哈希、字典。
name: tom
age: 18
stu: {name: tom,age: 18}
注意冒号后面有一个空格。
(3-2)数组
一组按次序排列的值,又称序列、列表。
people
- tom
- jack
或
people: [tom,jack]
(3-3)纯量
a: 12.54
2 资源清单描述方法
在k8s中,一般使用yaml格式的文件来创建符合我们预期期望的pod,这样的yaml文件称为资源清单。
(1)常用字段
(1-1)version—>>>String—这里指的是k8s API的版本,目前基本上是v1,可以用kubectl api-versions命令查询。
# kubectl api-versions
admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
discovery.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1beta1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1
(1-2)kind------------------------------->>>String-----这里指的是yaml文件定义的资源类型和角色,比如Pod。
(1-3)metadata------------------------->>>Object----元数据对象,固定值就写metadata
metadata.name----------------------->>>String-----元数据对象的名字,这里由我们编写,比如命名Pod的名字
metadata.namespace----------------->>>String----元数据对象的命名空间,由我们自身定义
(1-4)Spec------------------------------->>>Object----详细定义对象,固定值就写Spec
spec.containers[]---------------------->>>list--------这里是Spec对象的容器列表定义,是个列表
spec.containers[].name--------------->>>String-----这里定义容器的名字
spec.containers[].image-------------->>>String----这里定义要用到的镜像名称
spec.containers[].imagePullPolicy—>>>String----拉取策略
(2)举例
(2-1)创建一个Namespace
apiVersion: v1
kind: Namespace
metadata:
name: test
(2-2)创建一个Pod
apiVersion: v1
kind: Pod
metadata:
name: pod1
spec:
containers:
- name: nginx-containers
image: nginx:latest
3 命名空间
在现有的k8s集群中运行两套环境,可以使用k8s集群中的命名空间,实现开发测试与预发布环境的隔离。
(1)NameSpace介绍
命名空间
作用:多租户情况下,实现资源隔离。
属于逻辑隔离;
属于管理边界;
不属于网络边界;
可以针对每个namespace做资源配额。
(2)NameSpace查看
#kubectl get namespace
NAME STATUS AGE
default Active 7d5h
kube-node-lease Active 7d5h
kube-public Active 7d5h
kube-system Active 7d5h
名称,状态,集群创建后的时间
default:用户创建的pod默认在此命名空间
kube-node-lease:k8s集群节点租约状态,v1.13加入
kube-public:所有用户均可以访问,包括未认证用户
kube-system:k8s集群在使用。
#kubectl get pods --namespace kube-system
(3)创建命名空间
(3-1)通过kubectl命令进行创建
#kubectl create namespace test创建
namespace/test created
#kubectl get namespace查看
#kubectl get ns查看
(3-2)通过资源清单文件创建命名空间
#vi create-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: test2
#kubectl apply -f create-namespace.yaml 创建
namespace/test2 created
#kubectl get ns查看
(4)删除命名空间
删除命名空间时,命名空间中包含的所有资源对象同时被删除。
(4-1)通过kubectl删除
#kubectl get ns确认是否存在
#kubectl delete namespace test删除
namespace “test” deleted
#kubectl get ns
(4-2)通过资源清单文件删除
#kubectl get ns
#cat create-namespace.yaml 确认是否是相应文件
#kubectl delete -f create-namespace.yaml 删除
namespace “test2” deleted