Kubernetes之使用YAML文件创建资源对象

Kubernetes之使用YAML文件创建资源对象

Kubernetes创建资源的方式一共有两种:1.使用kubectl命令工具创建资源。2.使用文件进行创建,文件的形式分两种:一种是yaml文件,用于配置管理资源。另一种Jason文件,是用于接口之间信息的传递,多用于测试。
yaml文件的语法格式:
缩进标识层级关系
不支持制表符缩进,使用空格缩进
通常开头缩进两个空格
字符后缩进一个空格,如冒号,逗号等
“—”表示YAML格式,一个文件的开始
“#”表示注释

一、kubectl创建pod资源

#创建nginxwebs资源使用nginx:latest镜像,内部开放80端口,创建3个副本
kubectl run nginxwebs --image=nginx:latest --port=80 --replicas=3
#可以用kubectl descrbie查看创建的pod.
[root@master_01 dashboard]# kubectl describe deployment/nginxwebs
Name:                   nginxwebs
Namespace:              default
CreationTimestamp:      Sat, 09 May 2020 14:10:02 +0800
Labels:                 run=nginxwebs
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               run=nginxwebs
Replicas:               3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  run=nginxwebs
  Containers:
   nginxwebs:
    Image:        nginx:latest
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  
    Mounts:       
  Volumes:        
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  
NewReplicaSet:   nginxwebs-5cd89dd4d4 (3/3 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  28m   deployment-controller  Scaled up replica set nginxwebs-5cd89dd4d4 to 3

我们可以从上面看出这些信息很像待会用yaml创建pod资源的格式很像。

二、使用yaml文件格式创建资源

我们可以通过yaml文件查看具体的创建资源的信息。之前我也用过类似的文件docker compose去创建docker容器。
yaml文件格式是一种非常可读性非常高的语言,其参考了多种语言如,C语言、Python等。其固有格式在之前我已经介绍过了。
首先简单介绍一下yaml格式:

1.应用名称,apiVersion: apps/v1。这类apiVersion是首先要被定义的。这里就定义了apps/v1.
我们可以通过一条命令查看有哪些应用。
kubectl api-versions

[root@master_01 ~]# 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

版本,下面为测试版本
apps/v1beta1
apps/v1beta2
比较稳定的版本为:
apps/v1
2.控制器的设定
kind: Deployment
3.元信息的设定,名称和标签,创建的控制器元信息,标签和pod的标签一致。
metadata:
  name: nginxwebs
  labels:
    app: nginx
4.创建形式设定,指定副本和选择器指明之前的标签
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
5.容器创建的设定,app指定之前的标签,指定容器名称、镜像版本和容器端口
template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.15.4
        ports:
        - containerPort: 80

写完这个模板之后可以用命令创建这个资源。

kubectl create -f yaml文件

Kubernetes之使用YAML文件创建资源对象_第1张图片
我们不难发现yaml格式的文件通常比较复杂,在生产环境中我们也没有太多的时间去编写一个yaml文件。这时我们该怎么办呢?
其实我们之前用的kubectl run命令是可以生成一个yaml的文件的。

1.检查语法,如果有任何错误会立即显示出来只要在命令后面加上 --dry-run参数
kubectl run myweb --image=nginx --port=80 --replicas=3 --dry-run
[root@master_01 ~]# kubectl run myweb --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/myweb created (dry run)
2.将命令转化为yaml文件。在之前的基础上加 -o yaml
kubectl run myweb --image=nginx --port=80 --replicas=3 --dry-run -o yaml
3.生成文件并导出
kubectl run myweb --image=nginx --port=80 --replicas=3 --dry-run -o yaml > /opt/nginx.yaml
#生成的文本内容
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    run: myweb
  name: myweb
spec:
  replicas: 3
  selector:
    matchLabels:
      run: myweb
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: myweb
    spec:
      containers:
      - image: nginx
        name: myweb
        ports:
        - containerPort: 80
        resources: {}
status: {}
4.基于已有服务创建yaml文件,这样就可以进行服务的备份,或者复制等操作
kubectl get deployment/myweb --export -o yaml > /opt/ng.yaml
kubectl get service/nginxweb --export -o yaml > /opt/port.yaml
查看生成的yaml文件
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: 2020-05-09T07:39:31Z
  generation: 1
  labels:
    run: myweb
  name: myweb
  namespace: default
  resourceVersion: "69509"
  selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/myweb
  uid: 385e93ad-91c8-11ea-80cf-000c29002046
spec:
  progressDeadlineSeconds: 600
  replicas: 3
  revisionHistoryLimit: 2
  selector:
    matchLabels:
      run: myweb
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: myweb
    spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: myweb
        ports:
        - containerPort: 80
          protocol: TCP
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
status:
  availableReplicas: 3
  conditions:
  - lastTransitionTime: 2020-05-09T07:39:57Z
    lastUpdateTime: 2020-05-09T07:39:57Z
    message: Deployment has minimum availability.
    reason: MinimumReplicasAvailable
    status: "True"
    type: Available
  - lastTransitionTime: 2020-05-09T07:39:31Z
    lastUpdateTime: 2020-05-09T07:39:57Z
    message: ReplicaSet "myweb-7fd498c87" has successfully progressed.
    reason: NewReplicaSetAvailable
    status: "True"
    type: Progressing
  observedGeneration: 1
  readyReplicas: 3
  replicas: 3
  updatedReplicas: 3

生成json格式的文件也是同理操作,有兴趣可以去试一试。

你可能感兴趣的:(Kubernetes)