K8s由两种创建资源的方式:
① kubectl :命令创建
② yaml/JSON:使用文件方式创建资源对象
两种格式对比:
JSON:更偏向于二次开发层面,软件中传的参数都会以json格式传输,此处,需要对api进行一个调用,然后传入json格式给k8s进行有效操作。
特点:用于接口之间消息的传递,更适用于开发
YAML:如果要对K8s进行有效维护,可以使用此格式对K8s的资源(Pod)进行管理
特点:用于配置和管理,如果基于k8s运维的话,更适合使用此格式文件
本问主要介绍YAML格式,所以此处介绍以下YAML格式的优势:
YAML 是一种简洁的非标记性语言,yaml 又被称为是 json 的超集,使用起来比 json 更方便
结构上它有两种可选的类型:Lists 和 Maps。
List:用 -(破折号) 来定义每一项
Map:则是一个 key:value 的键值对来表示
语法格式:
说到语法格式,要谈到pod资源发布的过程,假如使用kubectl expose 发布,流程如下:
而pods和service都可以使用YAML格式写出来
标签开头:
语法:kubectl api-versions(标签)
根据不同的资源,使用不同的标签/版本
PS:标签/v1beta1,beta表示测试版本标题,如果标签中未指定,可以使用apps代替
[root@master ~]# kubectl api-versions
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
apps/v1beta1
apps/v1beta2
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/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1
apiVersion: apps/v1 #基本语法,必选(关键字标签/版本)
kind: Deployment #类型,必选
metadata: #元数据(标签)
name: nginx-deployment #自定义标签
labels: #标签
app: nginx #自定义标签名(全文标签要相同)
spec: #选择器/模板
replicas: 3 #指定的副本集:资源数量
selector: #选择器信息
matchLabels: #匹配标签
app: nginx #匹配的标签名
template: #模板
metadata: #描述性信息,设置的标签
labels:
app: nginx
spec:
containers: #设置的容器信息
- name: nginx #指定容器名称(需要与以上相同)
image: nginx:1.15.4 #指定的镜像
ports:
- containerPort: 80 #指定容器端口
小结:yaml文件编写顺序:
① 开头标签、类型和信息描述
apiVersion、kind和、metadata
② 指定选择器
spec
③ 指定容器
spec:container
需注意:多一个空格,会导致系统认为是上一个标签的子集,会导致报错
[root@master ~]# mkdir demo
[root@master ~]# cd demo/
[root@master demo]# vim nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.15.4
ports:
- containerPort: 80
[root@master demo]# kubectl create -f nginx-deployment.yaml
deployment.apps/nginx-deployment created
#查看资源
[root@master demo]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-d55b94fd-d9sbm 0/1 ContainerCreating 0 10s
nginx-deployment-d55b94fd-vsb6l 0/1 ContainerCreating 0 10s
nginx-deployment-d55b94fd-vvkfv 0/1 ContainerCreating 0 10s
[root@master demo]# vim nginx-service.yaml
apiVersion: v1 #版本
kind: Service #类型
metadata: #标签描述
name: nginx-service #指定指定资源名称
labels: #标签信息
app: nginx #自定义标签名
spec: #发布信息
type: NodePort #类型:NodePort
ports: #指定端口
- port: 80 #内部端口
targetPort: 80 #对外映射端口:80
selector: #选择器
app: nginx #指定发布的资源名称
----》wq
[root@master demo]# kubectl create -f nginx-service.yaml
service/nginx-service created
[root@master demo]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 443/TCP 7d19h
nginx-service NodePort 10.0.0.196 80:39632/TCP 9s
[root@master demo]# kubectl run nginx-deployment.yaml --image=nginx --port=80 --replicas=3 --dry-run
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
deployment.apps/nginx-deployment.yaml created (dry run)
#--dry-run 只会尝试运行,不进行操作
#如果由语法问题,会出现提示信息(包括语法提示)
[root@master demo]# kubectl run nginx-deployment.yaml --image=nginx --port=80 --replicas=3 --dry-run -o yaml
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
apiVersion: apps/v1beta1
kind: Deployment
metadata:
creationTimestamp: null
labels:
run: nginx-deployment.yaml
name: nginx-deployment.yaml
spec:
replicas: 3
selector:
matchLabels:
run: nginx-deployment.yaml
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
run: nginx-deployment.yaml
spec:
containers:
- image: nginx
name: nginx-deployment.yaml
ports:
- containerPort: 80
resources: {}
status: {}
kubectl run nginx-deployment.yaml --image=nginx --port=80 --replicas=3 --dry-run -o json
[root@master demo]# kubectl run nginx-deployment.yaml --image=nginx --port=80 --replicas=3 --dry-run -o yaml > my-deployment.yaml
[root@master demo]# kubectl get depolyment/nginx --export -o yaml
#创建nginx
kubectl run nginx --image=nginx
#查看状态
kubectl get pods -w
[root@master demo]# kubectl explain pods.spec.containers
KIND: Pod
VERSION: v1
RESOURCE: containers <[]Object>
DESCRIPTION:
List of containers belonging to the pod. Containers cannot currently be
added or removed. There must be at least one container in a Pod. Cannot be
updated.
A single application container that you want to run within a pod.
.....省略部分内容